我编写了一个示例 hello.ko 内核模块:
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world.\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
在这里,我使用了“printk”方法,它是 Linux 公开的内核 API。我可以在“/proc/kallsyms”中看到 Linux 导出的符号。我很想知道 gcc/ld 如何链接被调用的内核 API?gcc/ld 是否从“/proc/kallsyms”或其他文件中获取内核方法的地址并执行链接?如果是,gcc/ld 如何知道这一点?我没有任何选择可以说明这一点。