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
完~