//【核心符號表】,就是在核心的內部函式或變數中,可供外部引用的函式和變數的符號表。
//其實說白了就是乙個索引檔案,它存在的目的就是讓外部軟體可以知道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 中斷號被占...