Yocto:打patch

文章目录

  • 生成patch
    • 法1:diff
    • 法2:内置quilt工具
  • 打patch
  • 其他

以下介绍在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 > 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}/"

你可能感兴趣的:(Tools,linux,Yocto,嵌入式)