Yocto
Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建
Yocto系列讲解[入门篇] 2 - 演示运行qemux86-64虚拟机
Yocto系列讲解[理论篇] 3 - meta layer recipe class概念介绍
Yocto系列讲解[入门篇] 4 - 创建自己的meta layer
Yocto系列讲解[入门篇] 5 - 在meta-mylayer中添加helloworld recipe
Yocto系列讲解[理论篇] 6 - yocto是什么,学习它不难
Yocto系列讲解[实战篇] 7 - 开发工具devtool实操(创建新项目helloyocto)
Yocto系列讲解[实战篇] 8 - 开发工具devtool实操(添加git项目learnyocto)
Yocto系列讲解[实战篇] 9 - devtool验证并将learnyocto添加到meta-mylayer中
Yocto系列讲解[实战篇] 10 - 在qemux86机器运行时安装程序
Yocto系列讲解[实战篇] 11 - 在qemux86机器运行时卸载删除程序
Yocto系列讲解[实战篇]12 - 修改开源项目的代码(1)
Yocto系列讲解[技巧篇]13 - devtool修改workspace目录位置
Yocto系列讲解[技巧篇]14 - devtool edit-recipe命令(编辑bb文件命令)
本文档使用 MrDoc 发布
-
+
首页
Yocto系列讲解[实战篇] 9 - devtool验证并将learnyocto添加到meta-mylayer中
### 查看workspace中有哪些项目 可以罗列出当前的工作区中有哪些`recipes`及其各自源码的路径,参考如下: poky]$ source oe-init-build-env build]$ devtool status -h NOTE: Starting bitbake server... usage: devtool status [-h] Lists recipes currently in your workspace and the paths to their respective external source trees options: -h, --help show this help message and exit build]$ devtool status NOTE: Starting bitbake server... helloyocto: /home/peeta/code/helloyocto (/home/peeta/poky/build/workspace/recipes/helloyocto/helloyocto.bb) #这个也可以没有 learnyocto: /home/peeta/poky/build/workspace/sources/learnyocto (/home/peeta/poky/build/workspace/recipes/learnyocto/learnyocto_git.bb) #这个 可见我当前的`workspace`有两个`recipe`,即`helloyocto`和`learnyocto`。 ### 复制软件到虚拟机中运行 前面我们编译了`learnyocto`, 而且也看到如下路径中有执行程序如下: build/workspace/sources/learnyocto/oe-workdir/image/usr/bin/learnyocto 该程序不能在我们的(我的是`Ubuntu`)电脑上面直接执行,因为编译出来的体系架构不同指令码也不一样。我们需要将其放到目标`qemux86-64`虚拟机系统中才可以执行。 我们在另一个shell终端中启动我们的`QEMU`虚拟机 build]$ runqemu qemux86-64 然后在另一个shell终端中,通过下面的方式登路qemux86-64系统: $ ssh-keygen -f "/home/peeta/.ssh/known_hosts" -R 192.168.7.2 $ ssh root@192.168.7.2 root@qemux86-64:~# 我们先不研究如何将learnyocto项目整合到系统镜像中,先将上面提及的learnyocto测试程序复制到qemux86-64系统中,如下: build]$ scp workspace/sources/learnyocto/oe-workdir/image/usr/bin/learnyocto root@192.168.7.2:~/ learnyocto 100% 23KB 22.7KB/s 00:00 #发送成功 然后,再qemux86-64机器中执行如下: root@qemux86-64:~# ./learnyocto [develop branch]Hello Yocto! #程序打印的结果 关闭qemux86-64系统: root@qemux86-64:~# shutdown -h now ### 项目开发和修改阶段验证 现在有一个场景是这样的:我们的learnyocto项目还在workspace,我还在开发,但是我又想集成到文件系统当中随系统一起启动并验证,怎么处理呢,手动拷贝对于那些比较大的文件较多的项目而言费时费力?有没有什么好方法呢? 使用`devtool build-image`命令来构建`image`,并将`workspace`中的`recipes`包含到的`qemux86-64`文件系统中。使用`devtool build-image`命令时,必须提供`image`的名称。还记得`qemux86-64`的编译时候的镜像名吗?参考如下: build]$ devtool build-image core-image-sato 编译完成后,确认下文件系统中是否有`learnyocto`程序: build/tmp-qemux86-64/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/usr/bin/learnyocto 运行系统,并运行learnyocto程序: build]$ runqemu qemux86-64 并在另一个shell中执行: $ ssh-keygen -f "/home/peeta/.ssh/known_hosts" -R 192.168.7.2 $ ssh root@192.168.7.2 root@qemux86-64:~# learnyocto [develop branch]Hello Yocto! #执行成功 你可能会问:为什么要这个`devtool build-image core-image-sato`命令?不是有前面的`bitbake core-image-sato`,你的疑惑是有点道理的。但是你要这么想,当前是`learnyocto`项目通过devtool工具来做开发或修改,是在workspace目录中有自己的一套recipe,其他的metadata中也可能又有一套,而workspace中的recipe并没有实际将修改中的项目和我们的目标镜像(即core-image-sato)关联起来,bitbake要么找不到对应的recipe,要么使用了其他metadata目录中的recipe,总之,bitbake没有去编译workspace目录中的recipe。因此,我们就需要使用`devtool build-image core-image-sato`命令来帮我们解决这个问题,它可以在开发和修改的中途就来验证你的成果,如果成功了就集成到某个metadata [layer](https://so.csdn.net/so/search?q=layer&spm=1001.2101.3001.7020)目录中,如果没有成功就继续开发和修改~ ### 集成到meta-mylayer中去 比如说此时我们通过`devtoolo`工具已经完成了`learnyocto`项目的开发,但是它当前只是在`workspace`目录中,一个用于开发的临时目录中,我们需要固化我们的成果,需要将其添加到一个`metadata`中去,比如我们之前创建的`meta-mylayer`中去,我们应该怎么做呢?此时,`devtool finish`命令就派上用场了,参考如下: build]$ devtool finish learnyocto meta-mylayer ... Parsing of 877 .bb files complete (875 cached, 2 parsed). 1461 targets, 49 skipped, 0 masked, 0 errors. Summary: There was 1 WARNING message shown. INFO: Updating SRCREV in recipe learnyocto_git.bb INFO: Moving recipe file to /home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto INFO: Leaving source tree /home/peeta/poky/build/workspace/sources/learnyocto as-is; if you no longer need it then please delete it manually build]$ rm workspace/sources/learnyocto/ -rf #确认不需要就可以删除,以免下次调用devtool命令时冲突 在上面的`INFO`提示中也可以看出我们的`learnyocto`项目已经添加到`meta-mylayer`目录中去了,如下所示: poky]$ tree meta-mylayer/recipes-learnyocto/ meta-mylayer/recipes-learnyocto/ └── learnyocto └── learnyocto_git.bb 看下这个bb文件: poky]$ cat meta-mylayer/recipes-learnyocto/learnyocto/learnyocto_git.bb # Recipe created by recipetool # This is the basis of a recipe and may need further editing in order to be fully functional. # (Feel free to remove these comments when editing.) # WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is # your responsibility to verify that the values are complete and correct. LICENSE = "LGPLv3" LIC_FILES_CHKSUM = "file://LICENSE;md5=e6a600fd5e1d9cbde2d983680233ad02" SRC_URI = "git://gitee.com/fulinux/learnyocto.git;protocol=https;branch=develop" # Modify these as desired PV = "1.0+git${SRCPV}" SRCREV = "351e99f4d4f6045771a920a33ab178b55a8ff829" S = "${WORKDIR}/git" inherit cmake # Specify any options you want to pass to cmake using EXTRA_OECMAKE: EXTRA_OECMAKE = "" 这个bb文件我没有做任何改动,一步到位,指定了`SRC_URI`、版本信息、cmake编译方式等。是不是超级方便~ > tips: 通常我们可以将meta-mylayer做成一个独立的项目放到git服务器上面,避免意外删除 这条命令后面的[yocto-第16篇-devtool upgrade命令](https://blog.csdn.net/fulinus/article/details/109476622)也有讲,就是将learnyocto项目从workspace开发目录中添加到了自己的meta-mylayer层中了。 ### 如何安装到文件系统中 我们先清空我们的`core-image-sato`目标镜像,然后用bitbake命令来编译: build]$ bitbake core-image-sato -c cleanall build]$ bitbake core-image-sato 此时,在`build/tmp-qemux86-64/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/usr/bin/`目录下就没有`learnyocto` 程序了 说明正常编译目标镜像的时候是没有将`learnyocto`中集成到文件系统的,为什么?因为没有添加这个: IMAGE_INSTALL += "learnyocto" 那么在哪里可以添加这个`IMAGE_INSTALL`变量呢?有两个地方,下面先讲第一个。 #### 在local.conf文件中添加 添加`IMAGE_INSTALL`变量,第一个方法是在`build/conf/local.conf`文件结尾添加如下一行: build]$ cat conf/local.conf ... IMAGE_INSTALL_append = " learnyocto" #在learnyocto前面有个空格哦 添加完后重新source环境,并编译: poky]$ source oe-init-build-env build]$ bitbake core-image-sato 确认下文件系统中是否有`learnyocto`程序: build/tmp-qemux86-64/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/usr/bin/learnyocto 如果想进一步确认可以将`qemux86-64`虚拟机跑起来运行程序看看。我这里就不运行它了~ #### 在目标recipe文件中添加 `build/conf/local.conf`文件中添加这个毕竟是一个临时的方案,最终的方案是应该将其添加到我们的`meta-mylayer`目录中去,既不会修改原poky目录下的内容,又让文件系统永久性的集成了我们的软件项目。 首先,有看过[yocto-第5篇-在meta-mylayer中添加helloworld recipe](https://fulinux.blog.csdn.net/article/details/109129587)的盆友应该记得我们创建的这个文件: poky/meta-mylayer/recipes-sato/images/core-image-sato.bbappend 我们也可以在这个文件中添加: ... IMAGE_INSTALL += "learnyocto" 添加完后重新source环境,并编译: poky]$ source oe-init-build-env build]$ bitbake core-image-sato 确认下文件系统中是否有`learnyocto`程序: build/tmp-qemux86-64/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/usr/bin/learnyocto 当然,最后运行`qemux86-64`虚拟机后,就可以运行跑我们的程序了: root@qemux86-64:~# learnyocto [develop branch]Hello Yocto! ### 查看安装的软件清单 [yocto](https://so.csdn.net/so/search?q=yocto&spm=1001.2101.3001.7020)编译的内容那么多我怎么知道有哪些项目目标输出呢, 小技巧: build]$ cat tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64.manifest ... alsa-utils-alsamixer core2_64 1.2.1 busybox core2_64 1.31.1 kernel-5.4.50-yocto-standard qemux86_64 5.4.50+git999 update-rc.d noarch 0.8 ... helloworld-a core2-64 1.0-r0 #这个是我们自己添加的 helloworld-c core2-64 1.0-r0 #这个是我们自己添加的 helloworld-m core2-64 1.0-r0 #这个是我们自己添加的 learnyocto core2-64 1.0+git0+351e99f4d4-r0 #这个是我们自己添加的 上面有列举几个目标文件,有kernel、和应用程序。每一行的第二个参数,比如举例中有两类:core2_64 和 noarch。 其中core2_64表示该项目于目标的体系架构有关,可以理解成有相应二进制的执行程序。而noarch为与体系结构无关的项目,一般就是一些配置文件、脚本什么的,可以在任意平台上使用,比如上面的update-rc.d,还有一些字体库、time zoen什么的。
admin
2024年2月5日 15:27
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码