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

在Yocto Recipe目录外构建内核模块时出现编译错误

解决Yocto分离Recipe与源码后内核模块构建失败的问题

核心原因

调整目录结构后,Recipe未正确定位到内核模块的源码目录,导致oe_runmake执行时找不到Makefile。

具体修复步骤

1. 确认目录结构

确保你的demo_project目录结构符合以下规范:

demo_project/
├── recipes/
│   └── hello-mod/
│       └── hello-mod_0.1.bb
└── source/
    └── hello-mod/
        ├── Makefile
        └── hello-mod.c

2. 修改Recipe中的路径配置

在hello-mod_0.1.bb中添加或调整以下关键变量:

  • 指定源码根目录:
    设置S变量指向源码的实际位置,示例:
    # 若源码通过本地文件引入,直接指向source目录下的模块文件夹
    S = "${TOPDIR}/source/hello-mod"
    
  • 添加源码搜索路径:
    通过FILESEXTRAPATHS让BitBake能识别你的本地源码位置:
    FILESEXTRAPATHS:prepend := "${THISDIR}/../../source/hello-mod:"
    
  • 修正SRC_URI配置:
    确保SRC_URI正确列出源码文件,示例:
    SRC_URI = "file://Makefile \
               file://hello-mod.c"
    

3. 验证Makefile格式

确保source/hello-mod/Makefile符合Yocto内核模块的标准编写格式,示例:

obj-m += hello-mod.o
KERNEL_SRC ?= ${STAGING_KERNEL_DIR}
PWD ?= $(shell pwd)

all:
        ${MAKE} -C ${KERNEL_SRC} M=${PWD} modules

clean:
        ${MAKE} -C ${KERNEL_SRC} M=${PWD} clean

4. 清理缓存后重新构建

执行以下命令清理旧构建缓存,再重新编译:

bitbake -c clean hello-mod
bitbake hello-mod

额外排查点

  • 检查Recipe中是否有其他覆盖S变量的配置,避免路径被错误重置
  • 通过bitbake -e hello-mod | grep TOPDIR确认TOPDIR是否正确指向demo_project根目录
  • 确保source/hello-mod下的文件权限正常,BitBake拥有读取权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:02:38