yocto bitcake 使用记录

本文介绍了使用Yocto Project的BitBake工具构建嵌入式Linux系统的过程,包括理解bblayers.conf和local.conf配置文件、解析Metadata、构建根文件系统、管理Layers以及创建和修改Recipes。特别提到了如何处理U-Boot的适配和网络启动Linux进行调试。
摘要由CSDN通过智能技术生成
user@ubuntu:~/Desktop/yocto/build$ bitbake core-image-minimal
ERROR:  OE-core's config sanity checker detected a potential misconfiguration.
    Either fix the cause of this error or at your own risk disable the checker (see sanity.conf).
    Following is the list of potential problems / advisories:

    MACHINE=XXX is invalid. Please set a valid MACHINE in your local.conf, environment or other configuration file.

如何分析处理?
有可能是bblayers.conf没有设置好
请参考:参考

build目录下的conf目录中有两个重要的文件:bblayers.conf和local.conf两个配置文件
/conf/bblayer.conf:该配置文件定义了构建嵌入式Linux系统发行版所需要使用的metalayers。
/conf/local.conf:该配置文件定义了MACHINE和DISTRO的配置项。

解析Metadata的过程就是,BitBake根据build/conf/bblayers.conf中定义所使能的layers(meta-xxx),找到对应meta-xxx文件夹下的layer.conf文件,根据layer.conf文件中所使用的.bb或.bbappend文件中定义的软件包或源码的下载、配置、编译方式、安装目录等,将需要的软件包或者源码编译进根文件系统(使用的软件包等最终是安装在根文件系统中。对于U-Boot、Linux Kernel的配置编译等)

在解析了Recipes之后,将会生成一个“任务列表”,BitBake根据该“任务列表”开始编译目标文件。BitBake会查找每一个Recipes对应的PROVIDES列表。PROVIDES列表是由模块的PN(package name)隐式的确定或者由Recipes中的PROBIDES变量显式的决定;当Recipes中通过PROVIDES变量显式的定义了之后,那么该Recipes中定义的功能将由PROVIDES变量定义的recipe文件确定;否则,如果Recipes中没有通过PROVIDES变量显式地定义,那么该Recipes中定义的功能将由模块的PN值定义的recipe文件确定。例如,假设一个名为keyboard的recipe,在keyboard_1.0.bb中包含了PROVIDES+= “fullkeyboard”,那么对于recipes的PROVIDES列表,keyboard_1.0.bb是隐式的定义,而fullkeyboard.bb是显式的定义,该recipes中的功能将由fullkeyboard.bb确定。

local中的DL_DIR:下载目录


bb文件中有关下载资源的内容:

recipes:meta-xxx文件夹下有许多的recipes文件夹,recipes文件夹下主要存放.bb、.bbapped文件.bb、.bbapped主要定义了构建系统所使用到的软件包、源代码、补丁文件以及这些软件包、源代码的配置、编译、安装方法。

Image文件生成过程包括多个阶段,并取决于多个任务和变量。do_rootfs任务使用几个关键变量来确定实际安装软件包列表
IMAGE_INSTALL:列出要安装的基本程序包
PACKAGE_EXCLUDE:…

BitBake通过变量IMAGE_ROOTFS指向构造的根文件系统中的位置,并根据PACKAGE_INSTALL变量指定的最终安装的软件包列表,从而创建最终的根文件系统。
在生成的根文件系统目录下,manifest文件(.manifest),列出了根文件系统中所安装的软件。

根文件系统的位置?

meta-xxx是一个比较大的概念

layer相关:
考虑到创建的Layers易于维护,且不会影响到其他Layer,创建Layers时,应该遵循一些原则:
1.避免覆盖其他Layer中的recipe。也就是说,尽量不要将其他layer中的整个recipe复制到新创建的Layer中,并对其进行修改。而是采用追加文件.bbappend文件的方式,覆盖仅需要修改的部分。
2.避免重复包含文件,对于需要修改的recipe,使用.bbappend文件获知使用相对于原始Layer的相对路径再进行应用,例如:使用require recipes-core/package/file.inc代替require.file.inc

Layers管理
BitBake提供了Layer管理工具,用来查看Layers的一些基本信息。使用方式如下:
可以使用的命令如下:
help:帮助命令
show-layers:显示当前配置的Layer。
show-recipes:显示可用的recipes以及recipes提供的layers。
show-overlayed:显示覆盖的recipes。高优先级Layer中的recipe将覆盖其他低优先级Layer中相同的recipes。
show-appends:显示.bbappend文件,以及对应的recipe文件。
show-cross-depends:显示不同Layer中recipes的依赖关系。

通过local.conf添加软件包


创建基础Recipes
有两种比较简便易行的创建新的recipes的方法

7.2.3.5 获取源码
recipe的第一步是定义如何获取相关的软件源码

machine文件
其中,imx-base.inc文件位于/sources/meta-freescale/conf/machine/include路径下,主要定义了一些imx系列CPU的默认配置参数,如U-BOOT的入口地址,默认的Linux内核文件定义等。imx6ull属于cortex-A7系列的内核,因此,引用了tune-cortexa7.inc文件,该文件位于/sources/poky/meta/conf/machine/include路径下,主要定义了一些与cortexA7架构内核相关的定义,对于tune-cortexa7.inc,我们不需要进行修改。对于imx-base.inc文件,定义了系统构建过程中使用的一些配置信息。我们需要根据实际使用情况进行相应的修改。
imx-base.inc

挺扯淡的,像IMAGE_FSTYPES这些东西yocto也不给个参数列表,这怎么方便我们选定参数呢?

recipes的设置:
在layer.conf中配置recipes:

修改BBFILE_xxx变量,用于告诉BitBake构建系统时,采用meta-bird-imx6ull文件夹下的.bb文件。其中,BBFILE_COLLECTIONS += "bird-imx6ull"必须和meta-bird-imx6ull文件夹的后缀bird-imx6ull一致。

此外,我们还需要验证增加的recipe是否正确。在新增加的recipe中,打印出了相关的测试信息,因此,可以通过该测试信息是否正确打印来确定新增加的recipe是否正确。

bitbake的构建,会在该目录下生成如下内容:


里面有设备树,内核,根文件系统等等。

uboot的适配

在U-boot移植(硬件适配)过程中,需要修改对应的U-Boot源码,同样的,我们不会直接在Yocto中提供的recipe中直接修改,而是在我们新组建的metadata中创建新的recipe的方式来对U-Boot编译过程进行配置。

快速编译boot命令:
采用如下两种方式都可以进行编译:
1.编译整个系统:bitbake imx-image-multimedia
2.单独编译uboot:bitbake -c compile -f u-boot-bird
3.部署生成的U-boot镜像:bitbake -c deploy -f u-boot-bird

bitbake 清除编译缓存命令:
bitbake -c clean imx-image-multimedia



可以采用本地目录

网络启动,kernel调试
从网络启动Linux系统,对于调试Linux系统是一种很便捷的方式。U-boot支持网络接口,因此,可以实现从网络中获取Linux内核镜像文件、设备树文件等,通过tftp将这些文件下载至DRAM中,并且启动Linux内核。
U-Boot中已经支持了tftp协议,因此,可以将Ubuntu主机作为TFTP服务器,将Linux内核镜像文件等存放在Ubuntu主机上,然后通过tftp协议下载至开发平台DRAM中运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值