一 顺利的情况
假设存在一个文件叫mymq.c,下该文件相同目录下的makefile如下语句:
obj-y += mymq.o
然后编译:编译完成了以后,mymq.c文件中,有个函数叫mymq_open,搜索这个函数在不在System.map文件中,如果在,就说明这个模块被内置到内核中了。
执行grep -rn mymq_open System.map,在文件System.map中搜索函数mymq_open
二 没被内置成功的情况
如下所示:按照上面的简单配置,内核没有出现在符号表中,怎么办呢?
执行grep -rn mymq_open System.map,在文件System.map中搜索函数mymq_open,
解决办法:
使用subsys_initcall而不是module_init,如下所示
subsys_initcall(mymq_init);
如果这样还不行的话,那就看看,mymq.c所在的目录是如果被上级目录链接的,就是上一级目录的Makefile,如下所示,
obj-m += mymq/ 这样设置,mymq目录下的文件不会被编译进内核,
将obj-m += mymq/ 改成obj-y += mymq/
修改后如下所示:
在次编译内核然后 ,执行grep -rn mymq_open System.map,在文件System.map中搜索函数mymq_open文章来源:https://www.toymoban.com/news/detail-423118.html
文章来源地址https://www.toymoban.com/news/detail-423118.html
小结
到了这里,关于如何将模块加载到linux内核的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!