Yocto编译与分析

本文针对的是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.流程解读

  1. 首先,开发人员指定架构、策略、补丁和配置细节。
  2. 然后构建系统从指定的位置获取和下载源代码。该项目支持标准方法,例如 tarball 或源代码存储库系统,例如 git。
  3. 下载后,源代码将被提取到本地工作区,在该工作区应用补丁并运行配置和编译软件的通用步骤。
  4. 然后将软件安装到临时暂存区,您选择的二进制包格式(deb、rpm 或 ipk)将用于汇总软件。
  5. 在整个构建过程中运行不同的 QA 和健全性检查。
  6. 创建二进制文件后,会生成一个二进制包提要,然后用于创建最终的根文件映像。
  7. 生成文件系统映像。

三.编译问题

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等)。后续在更新!期待你的点赞~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值