yocto-第34篇-旧版的yocto或者devtool使用不了时如何修改开源项目源码

By: fu linux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!

问题出发点

可能刚刚接触yocto的盆友,遇到要修改开源项目的源码时,喜欢到形如

poky/build/tmp-glibc/work/armXXXXXX-linux-gnueabi/dhcpcd/5.2.10-r2/dhcpcd-5.2.10/
  • 1

目录下去修改源代码,然后编译,再然后就没有然后了,就剩下一脸惊诧:
我的改动呢?

很多新手都会约到类似问题,这里我提醒大家不要到work目录下去修改源码,除非你懂得自己在干嘛。

简单讲解

由于实际开发需要,有些低版本的yocto项目,使用的devtool工具可能不够强大,本专栏提及的devtool工具修改方式
可能无法满足有些盆友的需求。

这里结合有个同事遇到的实际问题出发,写个帮助文档,希望能帮助到其他盆友。

先简单记录下步骤后面再规范下:

进入work目录下的项目

cd poky/build/tmp-glibc/work/armXXXXXX-linux-gnueabi/dhcpcd/5.2.10-r2/dhcpcd-5.2.10
  • 1

查看下项目有没有git仓库:

ls -l .git
  • 1

如果没有这个目录,需要手动初始化git仓库,并做首次添加和提交,参考如下:

git init .
git add -A
git commit -m 'first init'
  • 1
  • 2
  • 3

修改源码

vim dhcpcd-hooks/20-resolv.conf #做了一些修改,具体内容没有关系,你可以加注释
  • 1

然后添加我们的修改并提交,然后生成一个补丁文件

git add -u
git commit -m 'fix some problem'
git format-patch -1 #生成一个补丁文件
  • 1
  • 2
  • 3

然后将其拷贝到其他目录,比如这里我将其拷贝到根用户目录下:

cp 0001-fix-some-problem.patch ~/
  • 1

这个版本够呛,用devtool找不到项目的bb文件,devtool 工具无法找到相应的bb文件时:
通过dhcpcd/5.2.10-r2项目目录,找到类似:

dhcpcd_5.2.10.bb
  • 1

文件,再结合使用find命令查找

find ./meta-* -iname dhcpcd_5.2.10.bb
./meta-XXX/recipes-connectivity/dhcpcd/dhcpcd_5.2.10.bb
  • 1
  • 2

找到后看看有没有这个目录:

./meta-XXX/recipes-connectivity/dhcpcd/files/
  • 1

如果没有就创建:

mkdir ./meta-XXX/recipes-connectivity/dhcpcd/files/
  • 1

将前面生成的补丁文件拷贝到该目录下:

cd ./meta-XXX/recipes-connectivity/dhcpcd/files/
cp ~/0001-fix-some-problem.patch .
  • 1
  • 2

再bb文件中添加补丁路径,参考如下:

vim dhcpcd_5.2.10.bbappend
SRC_URI += "\
file://dhcpcd_iface_info.patch \ #改成这样,\前面有个空格
file://0001-fix-some-problem.patch" #添加这行
  • 1
  • 2
  • 3
  • 4

编译验证

最好是重新source环境,然后重编译验证:

rebake dhcpcd
  • 1

进入目录验证

cd tmp-glibc/work/armXXXXX-linux-gnueabi/dhcpcd/5.2.10-r2/dhcpcd-5.2.10/
vim dhcpcd-hooks/20-resolv.conf #查看修改的文件是否符合预期,符合就说明修改正确
  • 1
  • 2

完~