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系列讲解[入门篇] 4 - 创建自己的meta layer
### 创建自己的layer 在后续的讲解过程中我们会大量的创建新的项目和演示操作等,但是我们尽可能不去改动`poky`中的源码等内容,我也希望大家能有这种原则意识。因此,我们可以使用`bitbake-layers create-layer`命令创建一个自己的`layer`,我们就取名为`meta-mylayer`吧。过程演示如下: $ cd poky/ $ source oe-init-build-env $ bitbake-layers create-layer meta-mylayer NOTE: Starting bitbake server... Add your new layer with 'bitbake-layers add-layer meta-mylayer' build]$ ls ../ #发现这个下面并没有meta-mylayer目录,但是它在poky/build/目录下面: build]$ ls bitbake-cookerdaemon.log cache conf downloads meta-mylayer sstate-cache tmp 但是,这个meta-mylayer是在build目录下,build只是一个临时的构建目录,我们应该将其放在与其他meta目录平级的poky目录下,执行删除操作: build]$ rm meta-mylayer/ -rf #重新开始创建meta-mylayer build]$ bitbake-layers create-layer ../meta-mylayer NOTE: Starting bitbake server... Add your new layer with 'bitbake-layers add-layer ../meta-mylayer' build]$ ls ../ bitbake documentation LICENSE.MIT meta-altera meta-selftest oe-init-build-env README.poky build LICENSE MEMORIAM meta-mylayer meta-skeleton README.hardware README.qemu contrib LICENSE.GPL-2.0-only meta meta-poky meta-yocto-bsp README.OE-Core scripts 创建完了,它提示你执行: build]$ bitbake-layers add-layer ../meta-mylayer #注意执行的路径是在build目录下,meta-mylayer在poky目录下,故而../meta-mylayer 简单讲下:`bitbake-layers create-layer`会在先在poky目录下创建对于的文件夹,而`bitbake-layers add-layer`会将layer路径添加到`build/conf/bblayers.conf`文件中,是分两步的。 也有对应的命令去删除layer,比如: build]$ bitbake-layers remove-layer ../meta-mylayer/ 只是将`bblayers.conf`中的`meta-mylayer`配置,不会讲poky目录下的`meta-mylayer`子目录删除。如果有必要可以手动删除。 ### 创建自己的layer最终命令 综上,创建自己的layer,严格安装下面的命令即可: build]$ bitbake-layers create-layer ../meta-mylayer build]$ bitbake-layers add-layer ../meta-mylayer ### 查看添加了那些layers 参考: build]$ bitbake-layers show-layers NOTE: Starting bitbake server... WARNING: Layer meta-mybsp should set LAYERSERIES_COMPAT_meta-mybsp in its conf/layer.conf file to list the core layer names it is compatible with. layer path priority ========================================================================== meta /home/peeta/poky/meta 5 meta-poky /home/peeta/poky/meta-poky 5 meta-yocto-bsp /home/peeta/poky/meta-yocto-bsp 5 meta-mylayer /home/peeta/poky/meta-mylayer 5 ### meta-mylayer图片结构 参考:  查看example_0.1.bb文件是`create-layer`时,自己创建的一个示例项目,简单看下这个bb文件内容: build]$ cat ../meta-mylayer/recipes-example/example/example_0.1.bb SUMMARY = "bitbake-layers recipe" DESCRIPTION = "Recipe created by bitbake-layers" LICENSE = "MIT" python do_build() { bb.plain("***********************************************"); bb.plain("* *"); bb.plain("* Example recipe created by bitbake-layers *"); bb.plain("* *"); bb.plain("***********************************************"); } 可以看到example.bb文件中没有做什么事情,就是在编译的时候打印了字符串。 ### 编译我们的example项目 build]$ bitbake example Parsing recipes: 100% |##########################################################################################| Time: 0:00:09 Parsing of 780 .bb files complete (0 cached, 780 parsed). 1321 targets, 46 skipped, 0 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "1.46.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "universal" TARGET_SYS = "x86_64-poky-linux" MACHINE = "qemux86-64" DISTRO = "poky" DISTRO_VERSION = "3.1.2" TUNE_FEATURES = "m64 core2" TARGET_FPU = "" meta meta-poky meta-yocto-bsp = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe" meta-altera = "master:aa24dfcb39fce3619a87ee6eef6e4296e66d2099" meta-mylayer = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe" Initialising tasks: 100% |#######################################################################################| Time: 0:00:00 Sstate summary: Wanted 7 Found 0 Missed 7 Current 128 (0% match, 94% complete) NOTE: Executing Tasks NOTE: Tasks Summary: Attempted 542 tasks of which 527 didn't need to be rerun and all succeeded. 编译好像没有什么输出,中间文件都在: build]$ cd build/tmp/work/core2-64-poky-linux/example/0.1-r0 [peeta@tommy-OptiPlex-7060 0.1-r0]$ ls configure.sstate example-0.1 license-destdir pkgdata pseudo source-date-epoch deploy-rpms example.spec package pkgdata-pdata-input recipe-sysroot sysroot-destdir deploy-source-date-epoch image packages-split pkgdata-sysroot recipe-sysroot-native temp ### 打印不显示问题 - 后记 关于在bb文件中加打印信息没有任何显示的问题 修改`meta-mylayer/recipes-example/example/example_0.1.bb`文件: SUMMARY = "bitbake-layers recipe" DESCRIPTION = "Recipe created by bitbake-layers" LICENSE = "MIT" python do_compile() { #改成do_compile bb.plain("***********************************************"); bb.plain("* *"); bb.plain("* Example recipe created by bitbake-layers *"); bb.plain("* *"); bb.plain("***********************************************"); } addtask compile #加上这一行 然后编译就可以看到打印了: build]$ bitbake example ... NOTE: Executing Tasks *********************************************** * * * Example recipe created by bitbake-layers * * * *********************************************** 如果再次编译会看不到上述打印,是因为有了编译历史记录,而bb文件没有更新,所以do_compile任务就没有再次执行。需要做如下工作: build]$ bitbake -c cleanall example ### deploy目录 所有生成的镜像文件包括bootloader、kernel镜像和文件系统等镜像都在这个目录下面: build]$ cd tmp/deploy/images/qemux86-64/ qemux86-64]$ ls bzImage bzImage--5.4.50+git0+416566e1f0_94667198aa-r0-qemux86-64-20201003082353.bin bzImage-qemux86-64.bin core-image-sato-qemux86-64-20201003082353.qemuboot.conf core-image-sato-qemux86-64-20201003082353.rootfs.ext4 core-image-sato-qemux86-64-20201003082353.rootfs.manifest core-image-sato-qemux86-64-20201003082353.rootfs.tar.bz2 core-image-sato-qemux86-64-20201003082353.testdata.json core-image-sato-qemux86-64.ext4 core-image-sato-qemux86-64.manifest core-image-sato-qemux86-64.qemuboot.conf core-image-sato-qemux86-64.tar.bz2 core-image-sato-qemux86-64.testdata.json modules--5.4.50+git0+416566e1f0_94667198aa-r0-qemux86-64-20201003082353.tgz modules-qemux86-64.tgz ### 文件系统在哪里 制作文件系统也是一个独立的任务叫core-image-sato,生成的中间文件目录在: build]$ ls tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/ bin boot dev etc home lib media mnt proc run sbin sys tmp usr var 这里面有个技巧就是你的程序有没有整合到文件系统中可以到这里面找找看,没有就说明有问题,就不需要实际刷机运行了。
admin
2024年2月7日 14:14
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码