在后续的讲解过程中我们会大量的创建新的项目和演示操作等,但是我们尽可能不去改动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
这里面有个技巧就是你的程序有没有整合到文件系统中可以到这里面找找看,没有就说明有问题,就不需要实际刷机运行了
