内核模块无法内置、设备树探测失效及自动加载配置错误排查
内核模块编译与自动加载问题排查
问题背景
我正在开发两个内核模块:一个类模块、一个设备驱动模块。当前遇到的问题是:
- 两个
.ko模块无法被编译为内置模块,也不会触发设备树中的设备探测; - 只有通过
insmod手动先插入类模块、再插入驱动模块时,才会创建设备文件。
文件结构与配置
文件放置在package/kernel/mypackage目录下,该目录的Makefile内容如下:
define KernelPackage/mypackage ... FILES:= $(PKG_BUILD_DIR)/mydriver.ko $(PKG_BUILD_DIR)/myclass.ko AUTOLOAD:=$(call AutoLoad,30,mypackage,1) ... endef
src目录下存放源码文件,其Makefile内容为:
obj-m += myclass.o obj-m += mydriver.o
错误现象
- 执行
make V=s package/kernel/mypackage/{clean,compile}时,屏幕显示need-built-in=1,但仅执行make V=s时无该提示; - 若将
obj-m改为obj-y,编译完全失败,提示缺少.ko文件(工作目录中确实不存在这些文件)。
问题根源(更新)
此前的分析方向正确,但真正的问题出在AUTOLOAD配置项:
原来的配置使用了包名mypackage:
AUTOLOAD:=$(call AutoLoad,30,mypackage,1)
正确的配置应该指定要自动加载的模块/驱动名称:
AUTOLOAD:=$(call AutoLoad,30,mydriver,1)
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

