在从源代码构建Linux内核时,可以通过.config决定某个功能是静态构建到内核中还是打包成模块以便动态插入。
但如果我有任何第三方模块的源代码,例如打包的设备驱动程序,是否可能将此代码静态地集成到内核中?而不是从根文件系统加载内核模块?
在从源代码构建Linux内核时,可以通过.config决定某个功能是静态构建到内核中还是打包成模块以便动态插入。
但如果我有任何第三方模块的源代码,例如打包的设备驱动程序,是否可能将此代码静态地集成到内核中?而不是从根文件系统加载内核模块?
当然可以,你只需要进行一些调整,将外部模块移动到内核源代码树中,微调Makefile/Kconfig以便代码被内置,并构建内核映像。例如,假设你将模块源代码移动到drivers/blah
中,则应在drivers/Makefile
末尾添加一行:
obj-y += blah/
你需要确保 drivers/blah/Makefile
已经设置用于构建你的模块,例如:
obj-y += mymodule.o
mymodule-objs := src.o other.o
等等,你的Makefile必须按照构建你正在处理的特定模块的方式进行设置。 注意:你必须使用mymodule-objs的输出文件名而不是输入文件名!
__exit
,因此不会链接到内核映像中。 - Rolandmodule_init(...)
和module_exit(...)
宏定义,模块具有生命周期处理程序,而同一代码静态链接则依赖于__init
注释,对吧? - dronus