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

描述

多个源文件编译生成一个内核模块

例如,将hello.c和world.c两个c文件编译生成一个叫hello_world.o的目标文件,则在Makefile中添加以下两句:

obj-m := hello_world.o

hello_world-objs = hello.c world.c

内核污染

insmod ko模块时,可能出现如下提示:

loading out-of-tree 

module

 taints kernel

几个可能原因:

  • 模块没有声明GPL协议
  • 当前linux内核版本和编译模块使用的内核版本不一致
  • 使用内核源代码未包含的树外模块

printk和printf

在内核中的打印函数是printkprintkprintf的行为非常相似,但是通常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!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分