Yocto —— devtool 介绍和应用示例
Yocto devtool 介绍和应用示例
文章目录
一、Yocto 中的 devtool 是什么
- 定位:Yocto 官方的“开发者命令行一站式工作台”。
- 作用:把“改源码 → 生成补丁 → 升级配方 → 编译验证”全部自动化,避免手动编辑 .bbappend 与 SRC_URI。
- 本质:在 build/workspace 下创建一层“临时 Layer”,优先级高于任何正式 Layer,可随时 reset 回退,安全又干净。
命令全景图:
| 子命令 | 典型场景 | 备注 |
|---|---|---|
add <URI> [<recipename>] |
把 Git 仓库快速变成配方 | 自动生成 bb 文件 |
modify <recipename> |
已有配方改源码 | 最常用的入口 |
build <recipename> |
只编译指定配方 | 不整包编,节省小时级 |
deploy-target <RN> <HOST> |
通过 ssh 把新 rpm/ipk 装到板子 | 无需重新烧 rootfs |
undeploy-target <RN> <HOST> |
回滚上述改动 | 调试驱动时反复使用 |
finish <RN> <layer> |
把 commits 变成补丁并生成 .bbappend |
收工前必做 |
reset <RN> |
扔掉工作区,恢复原始配方 | 改错可随时反悔 |
upgrade <RN> <newver> |
自动升级版本并 rebase 补丁 | 大版本迁移神器 |
edit-recipe <RN> |
直接打开 .bb 文件 |
定位文件目录超方便 |
二、临时创建工作区
如何使用:
devtool —h
可以让我们的程序在临时 layer 先验证,再移植过去 meta-mylayer
创建一个工作区:
devtool add hellopoky /home/mjj/projects/yocto/hellopoky

自动添加了 layer 和相关的配置文件:
初始化默认内容:
编译:

打包镜像:在这里我们不用去手动添加 install 了,devtool 自动会完成
devtool build-image core-image-sato

验证成功后我们需要把临时的 layer 移植到现有项目的 meta-mylayer,需要复制代码和菜单文件:
mkdir -p ../meta-mylayer/recipes-mapps/hellopoky/
cp -r /home/mjj/projects/yocto/hellopoky ../meta-mylayer/recipes-myapps/hellopoky/
cp workspace/appends/hellopoky.bbappend ../meta-mylayer/recipes-myapps/hellopoky/
cp workspace/appends/hellopoky.bb ../meta-mylayer/recipes-myapps/hellopoky/

然后用 bitbake 编译
bitbake hellopoky

构建镜像:记得添加 install
bitbake core-image-sato


最后再清除之前 devtool hellopoky 的临时构建文件:
devtool reset hellopoky

三、从 github 加入一个软件包
拉取软件包:
devtool add --srcbranch main testapphello git@github.com:zylinux/test_app.git

自动初始化了 bb 等文件,包含源地址等,例如:

可以查看临时构建的 layer 有什么文件:
devtool status

编译:
devtool build testapphello

构建镜像(rootfs新添加包):
devtool build-image core-image-sato

验证成功后,可以移植到我们自己的 meta-mylayer:
devtool finish testapphello meta-mylayer

可以查看是否新添加了 .bb 文件:

移植成功后继续使用 bitbake 编译:
bitbake testapphello

构建记得添加 install:devtool 会自动打包,bitbake 不会
bitbake core-image-sato


四、修改开源代码生成补丁
以现有的 alas 的 utils 为例,将它拉到工作区,生成临时 layer
devtool modify alsa-utils


修改代码:


查看差异:
git diff

修改完后编译:
devtool build alsa-utils

注意,添加 install 后需要重新编译和构建镜像,确保是最新的 rootfs,避免运行的时候找不到相关的依赖包:

首先查看 ssh 能否正常登入:

可以的话才可以进行推送:
devtool deploy-target alsa-utils root@192.168.7.2:~/

验证成功的话,接下来我们就要将之前修改的打包回去:

只需要提交我们修改过的 cli.c 文件:

然后强制打包回去:因为中间会生成很多临时文件
devtool finish alsa-utils meta-mylayer -f

最主要的是生成了 bbappend 文件:


还生成了一个补丁文件,可以查看修改内容:


最后就可以在我们原来的项目里面构建了:
bitbake core-image-sato

五、创建 workspace 加入软件包
注意 :
- workspace 一个时间点只能有一个生效
- 后创建出来的默认是最新的
创建名为 haha 的 workspace
devtool create-workspace haha

在这个 workspace 加入 hellopoky 软件包:
devtool add hellopoky /

查看临时生成的文件:

想要回到之前默认的工作区,可以执行:
devtool create-workspace

通过查看 devtool.conf 可以知道默认的 workspace 的路径:
cat conf/devtool.conf

六、devtool 软件项目开发流程
1.第一次改动
拉取代码到工作区:
devtool modify alsa-utils

修改原来的代码:


修改完后提交:

构建镜像:

把你对 alsa-utils 所做的本地修改(比如在 workspace 里改的源码、补丁、bbappend 等)同步回你指定的层(这里是 ../meta-mylayer/)。
关键点:
- 不会关闭开发模式(不会从
workspace移除)。 - 只是把改动“写回”层,比如:
- 生成或更新
.bbappend文件。 - 把补丁放到
meta-mylayer/里。 - 更新
SRCREV如果用的是 Git 仓库。
- 生成或更新
- 适合还在开发中,但想保存进度到层里。
devtool update-recipe alsa-utils -a ../meta-mylayer/

结束开发,把改动永久化到层里,并从 workspace 移除。
关键点:
- 会调用类似
update-recipe的逻辑,把改动写回层。 - 随后清理 workspace(移除
alsa-utils的临时工作目录)。 -f是强制覆盖,不提示确认。- 适合开发完成,准备提交或构建最终镜像。
devtool finish alsa-utils meta-mylayer -f

最后需要手动清除源码:

然后构建镜像:

在镜像里面可以查看修改内容:
alsamixer -h

2. 第二次改动
流程还是一样,重新拉取代码到工作区:
devtool modify alsa-utils
修改代码:


提交修改:

重新构建镜像:

在镜像里面可以看到第二次改动:

重新同步回指定的层:

生成第二次修改的补丁:


清理 workspace:

然后删除工作区代码后构建镜像:

七、如何使用 devtool 修改版本
查看最新版本:
devtool latest-version testapphello

修改:

添加版本号后 push:

还得 push 版本号:
git push origin v1.7

在工作区的 app 更新:
devtool upgrade -S v1.7 testapphello

查看工作区的 .bb 文件,发现版本号已修改:

最后清除一下工作区和删除源码:


查看原来的 .bb 文件:


成功后重新编译系统和打包镜像就可以了:
bitbake testapphello
bitbake core-image-sato
更多推荐


所有评论(0)