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

如何在Yocto构建系统的rootfs中安装无源码的out-of-tree内核模块

在Yocto中安装预编译的Out-of-Tree内核模块

模块安装路径

Linux系统中,第三方out-of-tree内核模块的标准安装路径是:
/lib/modules/<内核版本>/extra/
Yocto构建时可通过变量${KERNEL_VERSION}自动获取当前内核版本,配方中对应的目标路径为${D}/lib/modules/${KERNEL_VERSION}/extra/。

对应的Yocto配方示例

创建名为hello-mod.bb的配方文件,放在自定义层的recipes-kernel/hello-mod/目录下,同时将hello.ko放在该目录的files/子目录中:

SUMMARY = "Pre-built hello out-of-tree kernel module"
LICENSE = "Proprietary"
# 若厂商提供许可证文件,替换为实际文件路径和校验和
LIC_FILES_CHKSUM = "file://LICENSE;md5=d41d8cd98f00b204e9800998ecf8427e"

# 指定预编译模块来源,本地文件放在配方的files目录下
SRC_URI = "file://hello.ko"

# 工作目录直接使用下载文件所在的WORKDIR
S = "${WORKDIR}"

do_install() {
    # 创建目标目录
    install -d ${D}/lib/modules/${KERNEL_VERSION}/extra/
    # 复制模块文件并设置标准权限
    install -m 0644 ${S}/hello.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/
}

# 生成模块依赖文件,确保系统能识别模块
do_install_append() {
    depmod -b ${D} ${KERNEL_VERSION}
}

# 声明依赖对应版本的内核,避免模块与内核不匹配
RDEPENDS:${PN} = "kernel-${KERNEL_VERSION}"

关键说明与建议

  • 许可证要求:Yocto强制要求设置LICENSE和LIC_FILES_CHKSUM,若厂商未提供许可证文件,可暂时使用上述占位校验和(对应空文件),但建议向厂商索要合法许可证文件。
  • 版本匹配验证:预编译模块必须与Yocto构建的内核版本、编译配置、GCC版本完全一致,否则加载会失败。可通过modinfo hello.ko查看模块的内核版本信息,与目标系统uname -r的输出对比。
  • 层结构规范:将配方放在自定义层(如meta-my)中,保持Yocto层结构整洁,便于后续维护。
  • 构建与部署:在local.conf中添加IMAGE_INSTALL_append = " hello-mod",然后重新构建镜像;也可单独构建模块:bitbake hello-mod,再将生成的包部署到目标板。
  • 模块加载:在目标板上可通过insmod /lib/modules/$(uname -r)/extra/hello.ko手动加载,或使用modprobe hello(需模块无未满足的依赖),用lsmod检查加载状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:25:56