本文针对的是yocto(linux)的编译与分析,分享一下自己学习的心得。
文章目录
一、yocto是什么?
Yocto 项目是一个开源协作项目,可帮助开发人员创建基于 Linux 的定制系统,这些系统专为嵌入式产品而设计,无论产品的硬件架构如何。
分析一下目录结构,主要有三级构成:
meta-xxx->recipes-yyy->zzz/ttt.bb。
比如:meta-rockchip-> recipes-kernel->linux-firmware
Yocto中一个软件包是放在bb文件中的,然后很多的bb文件集成一个recipe(配方),然后许多的recipe又组成一个meta layer(层)。配方文件分为bb文件和bbappend文件。(bbappend和bb的区别主要在于bbappend是基于bb的,功能是对相应的bb文件作补充和覆盖,有点类似于“重写”的概念)。
在yocto目录下,放工具的bitbake目录、放元数据的目录、和执行构建的build目录这三个目录比较重要:
bitbake目录: bitbake工具。
元数据目录: 在poky中元数据目录是meta。在元数据目录中,有3个目录里是真正的元数据:classes、conf、packages。
build目录: build是我们烹饪嵌入式系统的大厨房。整个构建过程就是在build目录的tmp子目录完成的。 build目录的conf子目录里是用户的配置文件local.conf。
二、工作步骤
1.OpenEmbedded工作流
视频链接:https://youtu.be/-cXvE4VyyA8
2.流程解读
- 首先,开发人员指定架构、策略、补丁和配置细节。
- 然后构建系统从指定的位置获取和下载源代码。该项目支持标准方法,例如 tarball 或源代码存储库系统,例如 git。
- 下载后,源代码将被提取到本地工作区,在该工作区应用补丁并运行配置和编译软件的通用步骤。
- 然后将软件安装到临时暂存区,您选择的二进制包格式(deb、rpm 或 ipk)将用于汇总软件。
- 在整个构建过程中运行不同的 QA 和健全性检查。
- 创建二进制文件后,会生成一个二进制包提要,然后用于创建最终的根文件映像。
- 生成文件系统映像。
三.编译问题
1.不支持UTF-8 (如图所示)
解决方法:
locale-gen en_US.UTF-8
export LANG=en_US.UTF-8 LANGUAGE=en_US.en LC_ALL=en_US.UTF-8
2.将warnings视为errors(如图所示)
原因:如果加上 -Wextra 选项会告知编译器做更深度的检查报告, -Wextra 还有更多的检查,打印一些额外的警告信息。上面只是其中一个 -Wall 没包含但很有用的一个检查。
解决方法:
下载代码后,编译前;在…/yocto/meta-rockchip/recipes-multimedia/gstreamer-rockchip/文件夹下面:
新建files文件夹,并将上面的patch文件放入即可。
3.do_fetch失败(如图所示)
解决方法:
1.查看URL是否可以打开,若无法打开,首先验证网络是否正常
若链接可以打开,正常下载,则是网络波动问题。
2.若网络正常,URL无法打开,则是链接出错,选择其他有效链接
四.编译过程中tips
1.限制线程的数量
在…/yocto/build/conf/include/common.conf配置文件中增加:
BB_NUMBER_THREADS = ‘16’
PARALLEL_MAKE =’-j 16’
(第一行修改编译线程的数量,改为多线程)
(第二行修改cpu核的数量,根据实际情况修改)
2.编译成功后rootfs.img的位置
编译后
在docker中yocto/ build/lastest 目录下生成 rootfs.img。
在服务器的yocto/ build/lastest 目录下只是软链接,具体看软链接内容。
也可以通过./mkfirmware.sh来打包,在…/rockdev下面生成rootfs.img.
五.Bitbake编译
1.编译步骤
1.sudo su
2. cd …/yocto
3. source oe-init-build-env (进入build目录)
4. bitbake +,bitbake具体命令如下:
直接编译文件系统:
bitbake core-image-minimal
重新编译u-boot:
bitbake -c compile -f u-boot(-v)
只下载不编译:
bitbake -c fetchall core-image-minimal
下载特定的包:
bitbake packagename -c fetch
查看软件依赖关系:
bitbake –g packagename
Bitbake前可以加入time,是为了看看最终需要多长时间。
下图为bitbake的一些常用命令:
总结
本文主要讲了yocto系统的含义与编译。更为深层次的知识点未加上,例如:bb文件的含义与攥写,layer.conf文件架构以及如何往最终的系统中加入自定义软件包(hello等)。后续在更新!期待你的点赞~