在yocto中使用devtool工具来修改源码 / using devtool to modify source code under yocto
https://wiki.phytec.com/pages/viewpage.action?pageId=127338558
参考资料:
- https://www.yoctoproject.org/docs/2.3/dev-manual/dev-manual.html#using-devtool-in-your-workflow
- http://events17.linuxfoundation.org/sites/events/files/slides/2017%20ELC%20--%20Using%20devtool%20to%20Streamline%20your%20Yocto%20Project%20Workflow.pdf
devtool是yocto中的一个工具,我们使用该工具主要用于修改BSP中各个软件包的源码,在修改后将提交加入到指定的layer中。
它的工作流程为:
其中,如果你不想用git的方式来做提交,那可以一直使用devtool生成的源码目录,当然这样不利于对更改的管理。
常用的软件包名称:
软件包
|
名称
|
---|---|
barebox bootloader | barebox |
u-boot bootloader | u-boot |
i.MX6 内核 | linux-mainine |
AM335x 内核 |
Vendor:linux-ti Mainline: linux-mainline |
i.MX6ul 内核 |
Vendor:linux-imx Mainline: linux-mainline |
i.MX7 内核 | linux-phytec-fsl |
AM57x 内核 | linux-phytec-ti |
- 内核和bootloader可以在 BSP版本、设备树、config文件对照表 中查到
-
其他软件可以用下面指令来查找
% bitbake -s |
grep
[software]
以下以barebox为例,首先执行modify指令,该指令将源码解压缩后放在build/workspace中,然后再根据recipe打上补丁:
% devtool modify barebox NOTE: Creating workspace layer in /mnt/work/home/bob/bsp/BSP-Yocto-HTML5-phyBOARD-Mira-v1 .0 /build/workspace NOTE: Enabling workspace layer in bblayers.conf Parsing recipes.. done . NOTE: Fetching barebox... NOTE: Unpacking... NOTE: Patching... NOTE: Source tree extracted to /mnt/work/home/bob/bsp/BSP-Yocto-HTML5-phyBOARD-Mira-v1 .0 /build/workspace/sources/barebox NOTE: Recipe barebox now set up to build from /mnt/work/home/bob/bsp/BSP-Yocto-HTML5-phyBOARD-Mira-v1 .0 /build/workspace/sources/barebox |
然后就可以在workspace/sources/barebox/ 中修改代码,此时任何做出的任何修改,yocto都会根据修改的类型来进行重新编译。
如在修改barebox源码后执行(注意bitbake必须在build目录下执行,且已经source环境):
% bitbake barebox |
就会重新编译barebox,并更新deploy中的barebox.bin文件。
如果执行:
% bitbake phytec-qt5demo-image |
则会在重新编译barebox的基础上,将新的barebox增加到img,如.sdcard文件中。
在镜像生成后,进行测试,测试满意时,可以用git将本次修改的内容提交
% git add file_name_edited % git commit |
接着继续调试下一个需求。
如果此时workspace中代码已改乱,或者其他问题,可以通过:
% devtool reset barebox |
然后删除源码目录,注意备份之前的修改:
% rm -rf workspace /sources/barebox |
重新再次用modify修改软件包。
注意这个功能的前提是之前对源码的修改已经提交到git,未提交到git的源码修改无法通过这个方式增加。
如果还没有建立layer,请把当前目录移动到sources文件夹,然后:
% yocto-layer create example Please enter the layer priority you'd like to use for the layer: [default: 6] Would you like to have an example recipe created? (y /n ) [default: n] Would you like to have an example bbappend file created? (y /n ) [default: n] New layer created in meta-example. Don't forget to add it to your BBLAYERS ( for details see meta-example /README ). |
并修改build/conf/bblayers.conf,增加meta-example layer,
然后使用下面这个命令来生成bbappend文件以及补丁:
% devtool finish barebox meta-example |
此时就会在meta-example中自动生成所作的修改。
bob@Z220 ~ /bsp/sources/meta-example/recipes-bsp % tree . └── barebox ├── barebox │ └── 0001-example.patch └── barebox_%.bbappend |
注意patch文件一般是有顺序的,而之前介绍的流程并不会自动使用在workspace commit时的顺序,需要在bb文件中再检查一下。
执行了devtool finish barebox meta-example操作之后, workspace中barebox的源码就会实效了, 需要先把workspace中的barebox目录删除, 下次如果要修改barebox的源码, 可以使用devtool modify barebox重新创建barebox的源码.