You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mendel Linux编译自定义驱动刷入后模块不存在 操作步骤排查

问题描述

我是Mendel Linux开发新手,已按照官方入门指引克隆代码,在/linux-imx/drivers/mytestdriver路径下添加自定义内核模块,完成如下修改:

  • 新增mytestdriver.c驱动源码文件
  • 新增目录下的编译配置文件,内容为:
obj-$(CONFIG_TEST_MYDRIVER) += mytestdriver.o
  • 新增目录下的内核配置Kconfig文件,内容为:
menu "Test Driver"
config TEST_MYDRIVER
    tristate "Test Driver"
    default m
  • 修改/linux-imx/arch/arm64/configs/defconfig文件,新增配置项:
CONFIG_TEST_MYDRIVER=m

完成修改后执行m docker-linux-imx和FETCH_PACKAGES=true m命令重新构建代码,编译日志显示模块编译、链接、安装流程正常执行:

CC [M]  drivers/mytestdriver/mytestdriver.o
  CC      drivers/mytestdriver/mytestdriver.mod.o
  LD [M]  drivers/mytestdriver/mytestdriver.ko
  INSTALL drivers/mytestdriver/mytestdriver.ko

通过fastboot将构建产物刷入设备后,执行lsmod命令未列出mytestdriver模块,检查/lib/modules/4.14.98-imx/kernel、/lib/modules/4.14.98-imx/extras目录,均未找到mytestdriver.ko文件,确认现有操作流程存在遗漏。

解决方案

你遗漏了3处关键配置和构建步骤,这也是Mendel封闭构建系统和手动编译原生内核的典型差异:

  • 未在驱动层Makefile中注册新增的驱动目录
    仅在自定义驱动目录下创建Kconfig和Makefile不会被内核构建系统识别,需要编辑/linux-imx/drivers/Makefile,在文件中追加一行:
    obj-$(CONFIG_TEST_MYDRIVER)		+= mytestdriver/
    
    没有这行配置的话,构建系统不会遍历你新建的mytestdriver目录,你看到的编译日志是增量编译阶段生成的临时产物,不会进入后续的镜像打包流程。
  • 文件名大小写不符合构建系统规则
    内核构建系统默认识别的子目录编译配置文件名为Makefile(仅首字母大写),如果你创建的文件名为MakeFile(F大写),构建系统会直接忽略该文件,导致模块无法被正常安装到输出目录。
  • 未将模块打包进最终刷写的镜像分区
    Mendel系统的动态内核模块存放在rootfs分区的/lib/modules/<内核版本>/路径下,仅编译内核、刷写boot分区不会更新rootfs里的模块文件:
    1. 内核编译完成后,需要在构建目录执行make modules_install INSTALL_MOD_PATH=<构建输出目录对应的rootfs/lib/modules路径>,确认mytestdriver.ko被拷贝到输出目录的对应模块路径下
    2. 重新完整生成rootfs镜像后再通过fastboot刷入,不要只刷boot分区
    3. 设备首次启动后执行depmod -a更新模块依赖索引,再通过modprobe mytestdriver加载模块,此时执行lsmod即可看到对应模块,对应ko文件也会出现在/lib/modules/4.14.98-imx/kernel/drivers/mytestdriver/路径下。

内容的提问来源于stack exchange,提问作者Aromal PJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:03:33