为何修改rcar_canfd.c后Yocto镜像无法生效?
解决Yocto修改rcar_canfd.c后编译不生效的问题
先明确修改的正确文件
你改动的两个文件里,只有./home/u/hungphung/S4_APD/build-spider-gateway/tmp/work-shared/spider/kernel-source/drivers/net/can/rcar/rcar_canfd.c是内核驱动的实际源码文件。另一个linux-libc-headers下的文件属于用户空间头文件包,驱动代码修改完全不需要碰它,后续只需要维护内核源码目录下的这个文件即可。
触发内核重新编译的具体操作
Yocto的sstate缓存机制会直接复用已编译完成的组件,所以你需要手动触发内核的重新构建,以下是几种可行方法:
方法1:清理内核缓存并全量编译内核
在项目根目录~/hungphung/S4_APD下执行:
bitbake -c cleansstate virtual/kernel bitbake virtual/kernel
完成内核编译后,再执行你的项目编译脚本:
./build_yocto.sh spider gateway
方法2:单独编译CAN驱动模块(高效)
如果只修改了这一个驱动文件,可以只编译对应模块节省时间:
- 进入内核源码目录:
cd ./home/u/hungphung/S4_APD/build-spider-gateway/tmp/work-shared/spider/kernel-source
- 编译CAN驱动模块:
make modules_prepare make M=drivers/net/can/rcar modules
编译完成后,执行bitbake virtual/kernel让Yocto把新模块打包进内核镜像,再运行项目编译脚本。
方法3:临时禁用sstate缓存(不推荐)
修改项目的local.conf文件,添加一行:
SSTATE_DIR = ""
然后重新执行编译脚本。这种方法会让所有组件从头编译,耗时极长,仅适合临时验证问题时使用。
注意事项
- 不要修改
linux-libc-headers下的文件,该目录仅用于生成用户空间头文件,和内核驱动逻辑无关。 - 每次修改内核源码后,必须清理内核的sstate缓存或强制触发内核编译,否则Yocto会直接复用旧的编译产物。
内容的提问来源于stack exchange,提问作者hungcuiga1
相关产品推荐
相关产品推荐

