Yocto:打patch

文章介绍了在Yocto项目中如何生成和应用patch,包括通过diff命令和内置quilt工具创建patch文件,以及如何在bbappend文件中添加patch路径,执行patch任务,并提供了添加条件编译的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


以下介绍在yocto环境中以shadow.bb为例的打patch的例子

清理shadow.bb的工作缓存
bibake shadow -c cleanall -f
执行shadow中的do_patch任务
bibake shadow -c patch -f

一般来说我们在yocto项目中需要在工作区中修改源码,然后重编bb文件,验证成功之后再生成patch,在bb文件中添加patch,参考以下内容

生成patch

法1:diff

重新生成一个分支,在新分支中修改代码,使用

git diff <oldcommit> <newcommit> > file.patch

来生成patch文件。然后切回原来的分支。

如果不想新建分支,可以在源分支修改完代码后:

git diff > file.patch

生成patch文件,不过注意生成patch之后需要使用git checkout .来舍弃修改,以防patch打不进去。

法2:内置quilt工具

进入源码build路径work/armv7at2hf-neon-oe-linux-gnueabi/shadow/4.6-r0/shadow-4.6

使用quilt创建一个patch文件shadow-test.patch
quilt new shadow-test.patch

添加要修改的文件
quilt add src/login.c

修改
vi src/login.c

更新patch
quilt refresh

查看生成的patch
cat patches/shadow-test.patch

打patch

将patch复制到recipe中,在bbappend文件中添加patch路径,并添加SRC_URI

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI += "file://shadow-test.patch"

patch文件在当前bbappend文件路径下的files文件夹中

如果需要添加条件编译,如客户宏 STD,可以这样:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

OVERRIDES =. "${@str.lower("${CUSTOM_NAME}")}:"
SRC_URI_append_std = "file://shadow-test.patch"

将CUSTOM_NAME转化为小写,如果CUSTOM_NAME是std时再添加patch,否则不添加

执行清理,然后执行shadow的patch任务:
bitbake shadow -c cleanall -f
bitbake shadow -c patch -f
查看do_patch任务执行日志:
cat tmp-glibc/work/armv7ahf-neon-oe-linux-gnueabi/shadow/4.2.1-r0/temp/log.do_patch

其他

do_patch默认打在${S}目录,如shadow的:

work/armv7at2hf-neon-oe-linux-gnueabi/shadow/4.6-r0/shadow-4.6

即:${WORKDIR}/${P}/

可以通过在patch路径后定义patchdir来修改打patch的路径:

SRC_URI += "file://shadow-test.patch;patchdir=${WORKDIR}/"

### 如何在 OpenBMC 中应用 Patch 文件 在 OpenBMC 项目中,应用补丁文件是一种常见的需求,通常用于修复 bug 或者引入新功能。以下是关于如何在 OpenBMC 中应用 patch 的详细介绍。 #### 使用 `.bbappend` 文件来应用 Patch OpenBMC 基于 Yocto Project 和 OpenEmbedded 构建,因此可以利用 BitBake 提供的功能来管理补丁文件。通过创建或修改现有的 `.bbappend` 文件,可以在构建过程中自动应用所需的补丁[^2]。 1. **准备补丁文件** 将需要应用的补丁文件放置在一个合适的目录中,通常是 `meta-custom/recipes-core/<recipe-name>/files/` 下。例如,假设要为某个软件包 `example-package` 应用补丁,则路径应如下: ``` meta-custom/ recipes-core/ example-package/ files/ my-fix.patch ``` 2. **创建 .bbappend 文件** 创建一个对应的 `.bbappend` 文件,命名为 `<package_name>-<version>.bbappend` 并将其放在自定义层(如 `meta-custom`)中。例如: ``` meta-custom/ recipes-core/ example-package/ example-package_%.bbappend ``` 3. **指定补丁文件** 在 `.bbappend` 文件中,使用 `SRC_URI` 变量指明补丁的位置以及其作用范围。示例如下: ```bitbake FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI += "file://my-fix.patch" ``` 这里的 `FILESEXTRAPATHS_prepend` 定义了补丁文件所在的相对路径,而 `SRC_URI` 则告诉 BitBake 需要在构建时应用此补丁[^4]。 4. **验证补丁的应用情况** 当运行 `bitbake <package_name>` 时,BitBake 会自动检测并尝试应用所有的补丁文件。如果补丁无法成功应用,可能会抛出错误提示冲突位置或者拒绝原因。此时可以根据日志调整补丁内容直至顺利集成。 #### 自动化测试与调试技巧 为了确保补丁能够正常工作,在提交之前建议执行以下操作: - 测试整个项目的重新编译流程是否受到影响; - 如果涉及核心组件改动,还需确认目标硬件上的行为一致性; - 对新增加的功能部分编写单元测试以提高稳定性。 ```bash # 清理旧版本缓存数据后再试一次完整的build过程 bitbake -c cleanall example-package && bitbake example-package ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值