本文将介绍如何在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。