当前位置: 代码迷 >> 综合 >> How to patch in YOCTO
  详细解决方案

How to patch in YOCTO

热度:64   发布时间:2023-12-09 14:34:49.0

本文将介绍如何在YOCTO编译系统中成功打上patch的一种方法,主要通过查找打patch前的最后编译 文件,修改此文件生成patch的方法。


其中共包含五步(本文以给.c 文件打patch 为例):


1. 取一份完全干净的sourcecode确保打patch前可以成功编译),然后执行bitbake 相应的 xx.bb文件(xx代表文件名,下文中的xx表示此处的bb文件名)


2.找到 ~/build/tmp/work/ 目录下以xx.bb文件名xx命名的文件夹,在该目录下 执行

grep  -nr   文件名.c

找到最终用于编译的.c文件。

tips:

a.如果是.c文件 在该.c 文件目录下一般会有相应的.o 文件。

b. 如果是采用git 做的,此处应该先

git add 文件名.c

git commit -m " biubiu"

以此确保,在接下来生成的patch是在此最终形态上的修改。

3.在编译最终的.c 文件目录下,修改该文件,改成最终代码

4.生成patch

a. 第一种,通过diff生成patch:

diff -uN ~origina/l.c ~atest/l.c > diff_patch

b.第二种,通过git命令生成patch:

git add 文件名.c

git commit  -m "hiahiahia"

git format-patch -1

5.在对应的~/meta-XXXX /recipe-/目录下 添加 bb文件对应的  xx,bbappend 文件,并根据自己的编译目录需求添加 相应的patch。例如在某个bbappend文件中添加如下指令


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

SRC_URI_append = " \
                   file://0001-hello.patch;patch=1 \

0001-hello.patch放入bbappend 目录下的file 文件中,bitbake xx.bb的时候就回去寻找xx.bbappend 然后可以去搜集到这个patch。



最后执行bitbake 验证,patch是否成功。

caution:如果打patch失败

原因:1.查看patch被导入后,bb文件指定的source文件存放的路径,在我用的host上是 _PKG_SRC_DIR。如果指定的路径跟git format-patch 生成的指定路径不同,可以用diff 生成patch。

    2. 不能给.bb 文件打patch!可以通过加bbappend 来实现相应功能,换而言之,yocto 打patch 只能给sourcecode打patch,不能对编译系统本身的code打patch。