一些核心中斷API 2

2021-08-20 08:09:01 字數 1840 閱讀 8964

//解除安裝irq鍊錶中與輸入引數相對應的 irqaction 描述符

void remove_irq(unsigned int irq, struct irqaction *act)

//動態申請及註冊乙個中斷(動態建立乙個irqaction描述符,把該描述

//符加入到irq鍊錶中)

//0-建立成功  -16-中斷號被占用

static inline int __must_check

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,

const char *name, void *dev)

int request_threaded_irq(unsigned int irq      , irq_handler_t handler,

irq_handler_t thread_fn, unsigned long irqflags,

const char *devname    , void *dev_id)

action = kzalloc(sizeof(struct irqaction), gfp_kernel);

if (!action)

return -enomem;

action->handler = handler;

action->thread_fn = thread_fn;

action->flags = irqflags;

action->name = devname;

action->dev_id = dev_id;

chip_bus_lock(desc);

retval = __setup_irq(irq, desc, action);

chip_bus_sync_unlock(desc);

if (retval)

kfree(action);

#ifdef config_debug_shirq_fixme

if (!retval && (irqflags & irqf_shared))

#endif

return retval;

}//將乙個中斷描述符加入到irq鍊錶中

int setup_irq(unsigned int irq, struct irqaction *act)

//將 tasklet_struct 的count欄位加1,使軟中斷睡眠,不能響應對應的

//中斷

//tasklet_enable相反

static inline void tasklet_disable(struct tasklet_struct *t)

static inline void tasklet_enable(struct tasklet_struct *t)

//初始化乙個 struct tasklet_struct 軟中斷結構體變數,將其 state 和 

//count 欄位都清零

void tasklet_init(struct tasklet_struct *t   ,

void (*func)(unsigned long), unsigned long data)

//阻塞當前程序,等待中斷處理函式的執行完畢(yield)

void tasklet_kill(struct tasklet_struct *t)

while (test_bit(tasklet_state_sched, &t->state));

}tasklet_unlock_wait(t);

clear_bit(tasklet_state_sched, &t->state);

}

一些核心模組API 2

核心符號表 就是在核心的內部函式或變數中,可供外部引用的函式和變數的符號表。其實說白了就是乙個索引檔案,它存在的目的就是讓外部軟體可以知道kernel檔案內部實際分配的位置。給乙個記憶體位址address,查詢乙個核心符號,並將該符號的基本資訊,符號名name,偏移offset 大小size,所屬模...

一些核心排程API(2)

根據tcb,獲取對應的記憶體資訊,儲存在專門描述tcb記憶體資訊的 mm struct 中 struct mm struct get task mm struct task struct task task unlock task return mm tcb專門的記憶體資訊儲存區 struct mm...

一些核心同步API 2

獲取訊號量,成功後sem的計數器減1 不成功後程序將進入睡眠狀態而一直等待下去 注意區分down interruptible down killable 由於會使程序進入睡眠狀態 不響應任何訊號量,阻塞 所以不建議使用 void down struct semaphore sem 獲取訊號量,失敗進...