在linux
核心模組中能用到的函式比使用者空間多,但是它的函式往往被用得很少。當然在核心中葉可以呼叫使用者空間的函式只要直接呼叫系統呼叫的封裝函式就行,如下:
如呼叫long gettimeofday(struct timeval tv, struct timezone tz
);函式可以直接呼叫封裝體:
_syscall1
(long,gettimeofday, struct timeval,tv,struct timezone ,tz
);這個是現在核心的系統呼叫標準形式,
syscall
後面接的數字表示這個系統呼叫型別,系統呼叫將引數個數的多少進行了分類。
當然也可以直接使用核心特有的函式,這樣效率更高:
標頭檔案:
time.h
屬性:系統符號匯出函式
void do_gettimeofday(struct timeval *tv);
struct timerspec current_kernel_time(void);
標頭檔案標頭檔案:jeffies.h / time.h
while(time_before(jiffies,jiffies+msecs_to_jiffies(delay_time))
標頭檔案: delay.h
void ndelay(unsigned long nesec);
void udelay(unsigned long usecs);
void mdelay(unsigned long msecs);
void msleep(unsigned int millisecs);
void ssleep(unsigned int seconds);
: wait.h
long wait_event_timerout(wait_queue_head_t q, condition, long timeout);
long wait_event_interruptible_timerout(wait_queue_head_t q, condition, long timeout);
標頭檔案:
timer.h
定時器資料結構:標頭檔案:struct timer_list;
初始化定時器
void init_timer(struct timer_list *timer);
新增定時器
void add_timer(struct timer_list *timer);
銷毀定時器
int del_timer(struct timer_list *timer);
semaphore.h
屬性:初始化函式是標頭檔案靜態,其他函式時系統符號匯出
static inline void sema_init(struct semaphore *sem, int val);第乙個引數訊號量,第二個引數訊號量初始值。
void down(struct semaphore *sem)
;void up(struct semaphore *sem);
int down_timeout(struct semaphore *sem, long jiffies)
;int down_trylock(struct semaphore *sem)
int down_interruptible(struct semaphore *sem)
int down_killable(struct semaphore *sem)
1.初始化標頭檔案:無
屬性:系統符號匯出
void tasklet_init(struct tasklet_struct *t,void (*func)(unsigned long), unsigned long data);
第乙個引數是
tasklet
結構體指標,第二個引數是執行任務的函式,第三個引數是資料結構體指標。
2.排程tasklet
標頭檔案:
interrupt.h
屬性:標頭檔案靜態
static inline void tasklet_schedule(struct tasklet_struct *t);
3.結束tasklet
屬性:系統符號匯出
extern void tasklet_kill(struct tasklet_struct *t);
4.高精準定時器tasklet
tasklet_hrtimer_init, tasklet_hrtimer_start,tasklet_hrtimer_cancel
1. 建立並初始化工作佇列init_work(_work, _func);
標頭檔案:
workqueue.h
屬性:標頭檔案巨集定義
或者create_workqueue
,這個好像沒有上面那個全面,不是很清楚。
2. 銷毀工作佇列
標頭檔案:workqueue.h
void destroy_workqueue(struct workqueue_struct *wq)
3. 重置工作佇列
標頭檔案:workqueue.h
int cancel_work_sync(struct work_struct *work)
; 4. 排程工作佇列,下面兩個函式一樣,s呼叫q
標頭檔案:workqueue.h
int schedule_work(struct work_struct *work)
int queue_work(struct workqueue_struct *wq, struct work_struct *work)
linux核心模組匯出函式
乙個模組可以使用另乙個模組匯出的函式,可以通過函式export symbol func name 來匯出,匯出後的函式位於 proc kallsyms檔案中。include include module license dual bsd gpl static inthello init void s...
ansible 使用ping模組和時間同步模組
命令格式 ansible 主機清單中ip或分組名稱 m 模組 ping模組應用 ansible 192.168.1.6 m ping 或者 ansible new machine m ping 輸出結果 root server ansible ansible new machine m ping w...
時間模組和pickle函式
python的時間模組可以用於記錄程式中一些步驟的執行時長 開始記錄和結束記錄均用time函式記錄 import time sum 0 starttime time.time for i in range 0,10 sum i endtime time.time time endtime start...