多个源文件编译生成一个内核模块
例如,将hello.c和world.c两个c文件编译生成一个叫hello_world.o的目标文件,则在Makefile中添加以下两句:
obj-m:=hello_world.o
hello_world-objs=hello.cworld.c
内核污染
insmod ko模块时,可能出现如下提示:
loadingout-of-tree
module
taintskernel
几个可能原因:
-
模块没有声明
GPL协议 - 当前linux内核版本和编译模块使用的内核版本不一致
- 使用内核源代码未包含的树外模块
printk和printf
在内核中的打印函数是printk,printk和printf的行为非常相似,但是通常printk不支持浮点数,例如要打印一个浮点变量,在编译时通常会出现如下警告,并且模块也不会加载成功:
WARNING:
"__extendsfdf2"
[/home/ubuntu/driver/user.ko]undefined!
WARNING:
"__truncdfsf2"
[/home/ubuntu/driver/user.ko]undefined!
WARNING:
"__divdf32"
[/home/ubuntu/driver/user.ko]undefined!
WARNING:
"__floatsidf"
[/home/ubuntu/driver/user.ko]undefined!
-
模块
+关注
关注
7文章
2822浏览量
52798 -
内核
+关注
关注
4文章
1436浏览量
42491 -
Linux
+关注
关注
88文章
11628浏览量
217980 -
源文件
+关注
关注
0文章
30浏览量
4876
发布评论请先 登录

内核模块知识:多个源文件编译生成一个内核模块
评论