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

如何在Yocto Project中构建Linux内核in-tree树内模块?

Yocto 环境下in-tree树内内核模块构建步骤

你已经掌握out-of-tree模块编译的基础,做in-tree构建只需要按下面的流程操作即可,全程不需要手动修改Yocto临时工作目录里的内核源码,符合Yocto可复现构建的规范。

第一步:给内核源码树添加模块编译规则

in-tree模块的编译逻辑由内核源码树自带的Kconfig、Makefile体系管理,自定义模块优先放到drivers/misc/目录(内核预留的杂项驱动目录,新手不需要额外适配目录的层级配置):

  • 把你的custom_lkm.c源码文件放到对应目录
  • 修改同目录下的Kconfig文件,添加模块的配置项入口,示例如下:
config CUSTOM_LKM
    tristate "Custom LKM: custom_lkm"
    default m
    help
      Custom kernel module, select m to build as loadable .ko, select y to build directly into kernel image.

这里tristate代表配置支持三态:y编进内核镜像、m编译为可加载ko模块、n不编译;default m代表默认编译为ko模块,和你之前out-of-tree的产物形式一致。

  • 修改同目录下的Makefile文件,添加模块的编译关联规则:
obj-$(CONFIG_CUSTOM_LKM) += custom_lkm.o

注意CONFIG_后缀必须和Kconfig里config后面的标识完全一致,否则不会触发编译。
上面两个文件的修改不要直接在tmp目录的内核源码里改,做成git patch格式,存到你自己的自定义meta层里即可。

第二步:通过Yocto内核recipe整合改动

在你自定义meta层的recipes-kernel/linux/路径下创建内核的bbappend扩展文件,命名格式为linux-yocto_%.bbappend(通配符%会自动匹配你当前使用的所有linux-yocto版本,不需要针对特定版本写死文件名):

  • 在文件里通过SRC_URI变量引用你准备好的源码、Kconfig补丁、Makefile补丁、内核配置片段:
SRC_URI += "file://custom_lkm.c \
            file://0001-add-custom-lkm-config-entry.patch \
            file://0002-add-custom-lkm-build-rule.patch \
            file://custom_lkm.cfg \
           "
  • 新建custom_lkm.cfg内核配置片段,内容只有一行,用来显式启用你的模块配置:
CONFIG_CUSTOM_LKM=m

Yocto构建内核时会自动合并这个配置片段,不需要手动跑menuconfig修改内核配置。

第三步:构建与验证

  • 执行内核构建命令:bitbake virtual/kernel
  • 构建完成后,生成的custom_lkm.ko会被自动部署到rootfs的/lib/modules/<对应内核版本>/kernel/drivers/misc/路径下,烧录镜像启动设备后,不需要手动拷贝ko文件,直接执行modprobe custom_lkm即可完成加载。如果需要开机自动加载,只需要添加一行modules-load配置,不需要额外写部署脚本。

新手常见注意点

  • 版本一致性问题:in-tree模块和内核是同一次构建产出,不会出现out-of-tree模块常见的version magic不匹配导致的加载失败问题。
  • 内置模块选项:如果不需要ko形式,想把模块功能直接编进内核镜像,只需要把cfg文件里的CONFIG_CUSTOM_LKM=m改成CONFIG_CUSTOM_LKM=y,系统启动后模块功能直接生效,不需要执行加载操作。
  • 构建规范问题:所有源码、配置改动都必须放在自定义meta层通过bbappend引入,不要直接修改tmp工作目录下的内核源码,Yocto清理临时目录时会直接丢弃这些改动,也无法保证构建可复现。

内容的提问来源于stack exchange,提问作者Đức Nghĩa Phùng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:27:18