一些核心模組API 2

2021-08-20 03:17:31 字數 1225 閱讀 2338

//【核心符號表】,就是在核心的內部函式或變數中,可供外部引用的函式和變數的符號表。

//其實說白了就是乙個索引檔案,它存在的目的就是讓外部軟體可以知道kernel檔案內部實際分配的位置。

//給乙個記憶體位址address,查詢乙個核心符號,並將該符號的基本資訊,符號名name,偏移offset

//大小size,所屬模組名,儲存在 fmt 的%s中

void __print_symbol(const char *fmt, unsigned long address)

static int __sprint_symbol(char *buffer,        unsigned long address,

int   symbol_offset, int           add_offset)

//給乙個核心符號名symbol,獲得該符號的記憶體位址,找到其所在的核心模組,並會給該模組的引用計數

//加1

void *__symbol_get(const char *symbol)

//給乙個核心符號名symbol,獲得該符號的記憶體位址,找到其所在的核心模組,並會給該模組的引用計數

//減1 【此處即是核心態下,部分api成雙成對的使用,有+就要有-】

void __symbol_put(const char *symbol)

//給乙個給定的模組名 name ,由於模組名不允許有重複,是一一對應的,所以可以通過模組名找到模組

struct module *find_module(const char *name)

static struct module *find_module_all(const char *name, size_t len, bool even_unformed)

return null;

}//這個函式有點複雜,主要是通過核心名name,bool型引數gplok,warn來查詢核心符號,並返回該符號

//的結構體指標。如果

const struct kernel_symbol *find_symbol(const char *name,          struct module **owner,

const unsigned long **crc, bool gplok, bool warn)

pr_debug("failed to find symbol %s\n", name);

return null;

}

一些核心排程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 獲取訊號量,失敗進...

一些核心中斷API 2

解除安裝irq鍊錶中與輸入引數相對應的 irqaction 描述符 void remove irq unsigned int irq,struct irqaction act 動態申請及註冊乙個中斷 動態建立乙個irqaction描述符,把該描述 符加入到irq鍊錶中 0 建立成功 16 中斷號被占...