准备工作

参考资料:

devtool是yocto中的一个工具,我们使用该工具主要用于修改BSP中各个软件包的源码,在修改后将提交加入到指定的layer中。

它的工作流程为:


其中,如果你不想用git的方式来做提交,那可以一直使用devtool生成的源码目录,当然这样不利于对更改的管理。

常用的软件包名称:

软件包名称
barebox bootloaderbarebox
u-boot bootloaderu-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

以下以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修改软件包。

将更改增加到layer

注意这个功能的前提是之前对源码的修改已经提交到git,未提交到git的源码修改无法通过这个方式增加。

如果还没有建立layer,请把当前目录移动到sources文件夹,然后:

% bitbake-layers create-layer meta-example
NOTE: Starting bitbake server...
Add your new layer with 'bitbake-layers add-layer meta-example'


老版本的yocto需要使用 yocto-layer 工具,请检查 bitbake-layers --help 是否有create-layer指令


并修改build/conf/bblayers.conf,增加meta-example layer,

然后使用下面这个命令检查要对recipe的修改内容,其中各个参数的意思详见devtool update-recipe --help

 % devtool update-recipe --append ../sources/meta-example --dry-run linux-mainline
NOTE: Starting bitbake server...
WARNING: Layer meta-example should set LAYERSERIES_COMPAT_meta-example in its conf/layer.conf file to list the core layer names it is compatible with.
Loading cache: 100% |####################################################################################################################| Time: 0:00:00
Loaded 3204 entries from dependency cache.
Parsing recipes: 100% |##################################################################################################################| Time: 0:00:01
Parsing of 2315 .bb files complete (2314 cached, 1 parsed). 3205 targets, 371 skipped, 0 masked, 0 errors.
WARNING: No bb files matched BBFILE_PATTERN_meta-example '^/mnt/rd/home/bob/bsp/BSP-Yocto-AM335x-PD19.1.1/sources/meta-example/'

Summary: There were 2 WARNING messages shown.
NOTE: Handling main branch (devtool)...
NOTE: Writing append file /mnt/rd/home/bob/bsp/BSP-Yocto-AM335x-PD19.1.1/sources/meta-example/recipes-kernel/linux/linux-mainline_4.14.78-phy6.bbappend (dry-run)
NOTE: Copying 0002-fix-display-and-touch.patch to /mnt/rd/home/bob/bsp/BSP-Yocto-AM335x-PD19.1.1/sources/meta-example/recipes-kernel/linux/linux-mainline/0002-fix-display-and-touch.patch (dry-run)
NOTE: Copying 0003-fix-ethernet.patch to /mnt/rd/home/bob/bsp/BSP-Yocto-AM335x-PD19.1.1/sources/meta-example/recipes-kernel/linux/linux-mainline/0003-fix-ethernet.patch (dry-run)
NOTE: Copying debugging.cfg to /mnt/rd/home/bob/bsp/BSP-Yocto-AM335x-PD19.1.1/sources/meta-example/recipes-kernel/linux/linux-mainline/debugging.cfg (dry-run)
NOTE: Copying 0001-add-huagao-s-dt-nicola-did.patch to /mnt/rd/home/bob/bsp/BSP-Yocto-AM335x-PD19.1.1/sources/meta-example/recipes-kernel/linux/linux-mainline/0001-add-huagao-s-dt-nicola-did.patch (dry-run)
NOTE: Handling branch devtool-override-ti33x...
NOTE: No patches or local source files needed updating

如果确认无误,可以去掉--dry-run,然后将更改添加到recipe中。

此时就会在meta-example中自动生成所作的修改。

% tree                                                                                                                              21-06-08 - 14:38:35
.
└── linux
    ├── linux-mainline
    │   ├── 0001-add-xxx-s-dt.patch
    │   ├── 0002-fix-display-and-touch.patch
    │   ├── 0003-fix-ethernet.patch
    │   └── debugging.cfg
    └── linux-mainline_4.14.78-phy6.bbappend

注意patch文件一般是有顺序的,而之前介绍的流程并不会自动使用在workspace commit时的顺序,需要在bb文件中再检查一下。

  • No labels