Phytec中国的wiki
support@phytec.cn
热线:0755-61802110-803
使用devtool 工具
准备工作
参考资料:
- 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修改软件包。
将更改增加到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文件中再检查一下。
独立开发kernel/uboot
下载源码
从Git repositories (phytec.de) 或者 PHYTEC (github.com) 中下载对应仓库源码。根据BSP中kernel/bootloader recipe中描述的分支,切换到B对应的代码分支,并checkout 到对应的commitid
例如:下面是从am62产品 PD24.1 中kernel的recipe recipes-kernel/linux/linux-phytec-ti_6.6.32-10.00.08-phy2.bb 中摘录的一段:
显示kernel 源码git仓库是https://github.com/phytec/linux-phytec-ti.git
分支和bb文件名后缀相同是6.6.32-10.00.08-phy
改BSP所用的kernel分支的commit id是SRCREV,即ff957b44632eb319b4163dccaf9b53105ce95b5d。需要checkout到这个commitid上后进行相应的开发,从而保证和已经经过严格测试的BSP版本一致。
inherit kernel kernel-yocto inherit phygittag buildinfo require recipes-kernel/linux/linux-common.inc LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" FILESEXTRAPATHS:prepend := "${THISDIR}/linux-phytec-ti-6.6:${THISDIR}/linux-phytec-6.6:" GIT_URL = "git://github.com/phytec/linux-phytec-ti.git;protocol=https" # NOTE: PV must be in the format "x.y.z-.*". It cannot begin with a 'v'. # NOTE: Keep version in filename in sync with commit id! # NOTE: Keep version of TI_LINUX_FW_SRCREV in sync, configured in # dynamic-layers/meta-ti-bsp/recipes-bsp/ti-linux-fw/ti-linux-fw-freeze.inc SRCREV = "ff957b44632eb319b4163dccaf9b53105ce95b5d" S = "${WORKDIR}/git"
加入yocto工程构建
yocto工程build/conf/local.conf文件中加入下列代码片段。下方的linux-phytec-ti 需要替换为kernel/bootloader中recipe的ProductName名称。如linux-phytec-ti_6.6.32-10.00.08-phy2.bb 即linux-phytec-ti
SRCREV:pn-linux-phytec-ti = "${AUTOREV}" GIT_URL:pn-linux-phytec-ti = "git://path-to-your-local-kernel/bootloader-codesource/;protocol=file" BRANCH:pn-linux-phytec-ti = "your git branch"
yocto就会将本地独立的kernel/bootloader代码仓库纳入进工程中进行镜像编译,但是在yocto工程中构建之前需要将kernel/bootloader代码仓库修改的代码进行本地commit。 根据以上代码片段,yocto会捕获最新的commit进行镜像编译。没有提交到最新commit的本地修改就不会被纳入yocto构建中。