By: fulinux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!
返回总目录 : Yocto开发讲解系列 - 总目录
创建自己的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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
但是,这个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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
创建完了,它提示你执行:
build]$ bitbake-layers add-layer ../meta-mylayer
#注意执行的路径是在build目录下,meta-mylayer在poky目录下,故而../meta-mylayer
- 1
- 2
简单讲下:
bitbake-layers create-layer
会在先在poky目录下创建对于的文件夹,而
bitbake-layers add-layer
会将layer路径添加到
build/conf/bblayers.conf
文件中,是分两步的。
也有对于的命令去删除layer,比如:
build]$ bitbake-layers remove-layer ../meta-mylayer/
- 1
只是讲
bblayers.conf
中的
meta-mylayer
配置,不会讲poky目录下的
meta-mylayer
子目录删除。如果有必要可以手动删除。
创建自己的layer最终命令
综上,创建自己的layer,严格安装下面的命令即可:
build]$ bitbake-layers create-layer ../meta-mylayer
build]$ bitbake-layers add-layer ../meta-mylayer
- 1
- 2
查看添加了那些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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
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("***********************************************");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
可以看到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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
编译好像没有什么输出,中间文件都在:
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
- 1
- 2
- 3
- 4
- 5
打印不显示问题 - 后记
关于在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 #加上这一行
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
然后编译就可以看到打印了:
build]$ bitbake example
...
NOTE: Executing Tasks
***********************************************
* *
* Example recipe created by bitbake-layers *
* *
***********************************************
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
如果再次编译会看不到上述打印,是因为有了编译历史记录,而bb文件没有更新,所以do_compile任务就没有再次执行。需要做如下工作:
build]$ bitbake -c cleanall example
- 1
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
文件系统在哪里
制作文件系统也是一个独立的任务叫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
- 1
- 2
这里面有个技巧就是你的程序有没有整合到文件系统中可以到这里面找找看,没有就说明有问题,就不需要实际刷机运行了。
希望帮我点个赞加关注,你的喜欢就是我持续更新的动力!
更新时间:2021年5月