如何在Yocto中定位对应recipe并为内核文件应用补丁?
问题1:如何确定补丁归属的recipe
你要修改的drivers/rpmsg/virtio_rpmsg_bus.c是Linux内核源码的一部分,所以补丁需要打到负责构建你设备内核镜像的内核recipe上,你看到的另外两个带headers后缀的目录对应的recipe仅用于导出内核头文件给用户空间程序使用,不参与内核镜像编译,不需要考虑。
快速定位当前用的内核recipe路径,直接执行以下命令:
bitbake -e virtual/kernel | grep ^FILE:
命令输出的路径就是你要找的内核recipe。结合你用的是Variscite DART-MX8M-MINI开发板,该内核recipe大概率位于sources/meta-variscite-fslc/recipes-kernel/linux目录下,命名一般为linux-imx_*.bb或者linux-variscite_*.bb。
问题2:如何完成补丁应用操作
- 首先准备好补丁文件,命名格式建议为
序号-修改模块-修改内容.patch,比如0001-rpmsg-virtio_fix_queue_poll_error.patch - 建议你先创建专属的自定义meta层(如果已经有可以跳过),方便后续维护补丁和自定义配置,避免修改官方层源码
- 在自定义层下创建
recipes-kernel/linux目录,在该目录下创建和内核recipe同名的.bbappend文件,比如内核recipe叫linux-imx_5.4.bb,对应的append文件就是linux-imx_5.4.bbappend - 在.bbappend文件中添加以下内容:
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" SRC_URI += "file://0001-rpmsg-virtio_fix_queue_poll_error.patch"
注意把补丁文件名替换成你实际的文件名
5. 在.bbappend同目录下创建和内核recipe同名的文件夹(比如linux-imx),把准备好的补丁文件放到这个文件夹内
6. 重新编译内核验证补丁是否生效:
# 先清理旧的构建缓存 bitbake virtual/kernel -c cleansstate # 执行内核构建,构建过程会自动应用你添加的补丁 bitbake virtual/kernel
你也可以执行bitbake virtual/kernel -c patch之后,去tmp/work-shared/imx8mm-var-dart/kernel-source/drivers/rpmsg/目录下查看对应文件的修改记录,确认补丁已经正确应用。
内容的提问来源于stack exchange,提问作者rosewater
相关产品推荐
相关产品推荐

