一、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/

34706.png&pos_id=img-WXRDGUds-1761643228536)

然后用 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
Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐