【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十七章 Yocto文件系统在线构建

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、

【公众号】迅为电子

【粉丝群】258811263


第七十七章 Yocto文件系统在线构建

77.1 yocto简介

嵌入式Linux解决方案应用范围广泛,灵活多变且经济高效,具有巨大的价值,这也致使方案开发人员必须构建定制Linux版本来满足其特定需求。

一直以来,开发人员不得不向各家芯片制造厂商寻求主板支持包(BSP)和工具。而且这些部件往往是基于不同制式开发的。虽然市面上有数百种可用的嵌入式Linux发行版,但每个版本都是高度定制的,这导致了大量的重复工作,很多开发人员创建了大同小异的Linux版本,再基于其开发自己的增值特性和功能。

Yocto是一个开源社区。它通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM,PPC,MIPS,x86(32&64bit)硬件体系架构。飞思卡尔官方支持Linux Yocto BSP,具有图形界面,支持Qt。

Yocto Project为解决嵌入式Linux开发乱象迈出了一大步。芯片、操作系统和设备厂商之间的协作和战略规划有助于实现广泛而一致的行业支持。因此,操作系统厂商可以基于Yocto Project内核来开发商业操作系统和其他产品,而且芯片厂商也可以提供硬件BSP。

该项目有以下优势:

健壮的构建系统。Yocto Project支持从其他常用构建系统轻松迁移到Yocto Project的经过事实验证的环境,而且新的软件版本更新也十分容易。

灵活的定制能力。开发人员可以自由选择资源的使用,或者完善特定的组件(包括这些组件的特定版本)。

可简单地向商业操作系统迁移。Yocto Project的设计允许用户使用自主开发的操作系统或商业操作系统,在迁移时不会丢失优化或功能。此外,商业操作系统也可以使用Yocto Project作为上游资源,从而确保最大化代码重用。

综上所述,Yocto Project赋予开发人员一个极高的起点,帮助他们避免重复工作以及不必要的维护。事实上,Yocto Project是全球最大的开源项目之一,以此为基础而开发的通用创建系统,可帮助开发人员避免从零开始,转而把时间和资源集中于开发差异化Linux设备,从而实现投资回报最大化。

NXP官方已经给出了详细的yocto项目使用手册,文档名字为《i.MX_Yocto_Project_User's_Guide.pdf》,本章内容我们将通过一步步操作,带领大家学习如何通过yocto构建文件系统。

如果大家想深入学习yocto,可以参考官方文档https://docs.yoctoproject.org/。目前国内很少有yocto的资料教程,我们可以参考官方提供的英文教程进行学习,地址是https://docs.yoctoproject.org/ 如下图所示框住的几份在线资料大家可以阅读学习。

77.2 构建Yocto的主机环境

如果我们想要在 Linux 主机中构建Yocto 项目,我们需要做以下准备。

  • 一个重要的考虑因素是主机所需的硬盘空间。构建yocto所需的最小硬盘空间约为 50 GB,但是建议至少提供 120 GB,足以将所有文件编译完整。
  • 推荐的最低 Ubuntu 版本是 16.04 或更高版本。早期版本可能会导致 Yocto 项目构建失败,因为它需要从Ubuntu 12.04 使用可用的 Python 版本。想要查询更多的信息,请参阅 Yocto 项目参考手册。
  • 特别注意的是在构建过程中要保证Ubuntu可以从github下载文件。如果不能达到此条件,请参考离线构建yocto系统章节

77.2.1 安装依赖包

使用命令安装其他依赖软件包,如下两个图所示,可以多运行几次,确保安装成功。

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev
sudo apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc

 

77.2.2 设置 repo 实用程序

repo是Android为了方便管理多个git库而开发的Python脚本。repo的出现,并非为了取代git,而是为了让Android开发者更为有效的利用git。

首先我们在家目录下新建一个bin文件夹,然后下载repo,并赋予权限,输入以下命令,如下图所示:

mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

然后将下列命令添加到 .bashrc 文件,以确保 ~/bin 文件夹位于您的 PATH 变量中。输入以下命令编辑.bashrc文件

cd

vi .bashrc

.bashrc文件中添加如下代码

export PATH=~/bin:$PATH

 

修改完,保存退出,并输入以下命令更新环境变量。

source .bashrc

 

77.3 安装Python3.7

Repo是python脚本,我们需要安装合适的版本来运行repo,Ubuntu16中自带了python2.7和python3.5,所以我们安装Python3.7,注意python的版本必须是3.6以上的。

 

77.3.1下载python源码

1 我们打开官网下载python源码,如下。官网地址是https://www.python.org/downloads/release/python-371/

2 我们点击下载如下图所示的压缩包,下载的文件是 Python-3.7.1.tgz。 

77.3.2 安装python

python源码的安装一般由三个步骤组成:配置(config),编译(make),安装(make install)。configure是一个可执行脚本,它有很多选项,使用./configure --help 输出详细的选项列表。

1 将下载的压缩包拷贝到ubuntu,然后输入以下命令解压

sudo tar -zxvf Python-3.7.1.tgz

默认生成的文件夹是Python-3.7.1。

2 输入以下命令安装依赖

sudo apt-get install libffi-dev

3 配置python,输入以下命令:

cd Python-3.7.1

./configure --prefix=/opt/python3.7

4 输入以下命令进行编译,如果权限不够的话,就加sudo

make

5 输入以下命令安装python

make install

6 创建软连接,输入以下命令:

sudo ln -s /opt/python3.7/bin/python3.7 /usr/bin/python3.7

7 输入以下命令查看是否安装成功

python3.7 -V

8 输入以下命令添加python的版本

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3

9 输入以下命令切换python的版本,在接下来的操作中,我们需要切换python的版本,设置python版本为3.7。

sudo update-alternatives --config python

 

77.4 安装配置git

使用命令“sudo apt-get install git”,输入密码,安装过程中询问信息按“y”继续,安装git,如下图所示:

 

首先确保使用以下命令正确设置了git,填写Git注册的用户名和邮箱。注意Git注册的用户名和邮箱务必要真实有效,否则会下载失败。

git config --global user.name "topeetapple"

git config --global user.email "2654300291@qq.com"

git config --list

如下图所示:

 

77.5 获取Yocto主线源码

我们使用浏览器打开以下链接https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html#usegit-to-clone-poky 

编译 yocto 官方默认支持的 image。  

77.6 获取imx-yocto分支代码

77.6.1 imx官方源码位置

NXP 在 Linuxkernel 4.19 版本之前yocto meta元层代码托管以下链接里。

http://freescale.github.io/#download

yocto meta 层相关的源码都托管在以下仓库内,我们可以根据自己的需求来获取到对应的分支源码

https://source.codeaurora.org/external/imx/imx-manifest

77.6.2 使用支持iTOP-i.MX8M Mini源码

1 新建imx-yocto-bsp文件夹,然后进入到imx-yocto-bsp文件夹下,如下图所示:

 

2 我们使用repo命令来获取源码,输入以下命令下载yocto的源码

repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.78-1.0.0_ga.xml

repo sync

 

3 repo 同步完之后如下图所示。如果在 repo 初始化过程中出现错误,请尝试删除 .repo 目录并再次运行 repo 初始化命令。 

4 切换python版本为2.7版本,如下图所示:

sudo update-alternatives --config python

 

5 我们查看《i.MX_Yocto_Project_User's_Guide.pdf》相关内容,可以了解到如下内容。我们需要使用脚本“fsl-setup-release.sh”构建项目。 

DISTRO:发行版类型

MACHINE:机器类型

-b:指定工程构建输出的目录

DISTRO有如下四种设置:

 

	fsl-imx-x11 			---仅支持X11图型
	fsl-imx-wayland		--- Wayland weston graphics
	fsl-imx-xwayland		---Wayland graphics 和 X11,不支持使用 EGL 的 X11 应用
	fsl-imx-fb			----帧缓冲图形,没有X11或Wayland

 支持的machine有很多种,在“sources/meta-fsl-arm/conf/machine/”文件夹中都有给出,以下是按官方文档列出的几种。

• imx6qpsabreauto
• imx6qpsabresd
• imx6ulevk
• imx6ulz14x14evk
• imx6ull14x14evk
• imx6ull9x9evk
• imx6dlsabreauto
• imx6dlsabresd
• imx6qsabreauto
• imx6qsabresd
• imx6slevk
• imx6solosabreauto
• imx6solosabresd
• imx6sxsabresd
• imx6sxsabreauto
• imx6sllevk
• imx7dsabresd
• imx7ulpevk
• imx8qmmek
• imx8qxpmek
• imx8mqevk
• imx8mmevk

6 i.MX 提供了一个脚本 fsl-setup-release.sh,可简化 i.MX 机器的设置。该脚本设置了目录以及指定机器和后端的配置文件。我们输入以下命令:

DISTRO=fsl-imx-xwayland MACHINE=imx8mmevk source fsl-setup-release.sh -b build-xwayland

7 如果出现以下错误,说明编译需要的python版本是2.7。我们切换python版本是2.7。

8 然后再继续执行命令,如下图所示: 

9 在执行完第一条设置 DISTRO MACHINE 和一些基本参数后,终端会提示阅读 EULA (用户使用许可协议)按下键盘空格键即可开始阅读 等待终端最下面红色框阅读进度显示 100%如下图所示: 

10 弹出一个对话框询问你是否同意此 EULA 协议,此时输入 y 回车即如下图所示 

11 接着配置完会直接进入刚才指定的的“build-xwayland”目录,如下图所示: 

77.6.3 编译包含qt系统

我们选择编译一个镜像,输入以下命令。此过程时间较长,请耐心等待,会有十几个小时,与网速,电脑配置,虚拟机配置有关,中间有出错情况可用,Ctrl+C终止,再次使用“bitbake fsl-image-qt5-validation-imx”构建,yocto会在跳过之前已经完成的工作,继续任务。

bitbake fsl-image-qt5-validation-imx

 

最终编译完成如下图所示: 

编译生成的镜像都在“imx-yocto-bsp/build-xwayland/tmp/deploy/images/imx8mmevk”目录下,我们使用命令“ls imx-yocto-bsp/build-xwayland/tmp/deploy/images/imx8mmevk”即可查看,如下图所示: 

⽣成的⽂件中,有⼀些是链接⽂件, 下⾯是不同⽂件的⽤途: 

文件名

用途

*.rootfs.manifest

⽂件系统内的软件列表

*.rootfs.ext4

打包成ext4格式的⽂件系统

*.rootfs.sdcard

可直接写⼊SD卡, 从SD卡启动的镜像

*.rootfs.tar.bz2

打包成tar.bz2格式的⽂件系统

*.rootfs.tar.xz

打包成tar.xz格式的⽂件系统

imx-boot-imx8mmevk-sd.bin

适合从SD和emmc 启动的u-boot镜像

这里面包含不同格式的uboot,内核,设备树,文件系统镜像。我们仅使用“tar.bz2”格式即可。

我们将fsl-image-qt5-validation-imx-imx8mmevk-20210715012231.rootfs.tar.bz2文件拷贝到Linux源码的rootfs目录下进行编译。

77.7 扩展命令

77.7.1 编译生成工具链

编译完系统后可以执行如下命令生成 sdk 包,用以后续针对系统的应用开发。 

 bitbake meta-toolchain

编译完成生成的压缩包一般在编译目录tmp/deploy/images/imx8mmevk/sdk 目录内。 

77.7.2 其他参数

使用多线程编译,需要修改DISTRO 里面的conf/local.conf配置项,新增如下两个参数

BB_NUMBER_THREADS ?= "8"

PARALLEL_MAKE ?= "-j 8"

77.7.3 Bitbake常⽤命令

Bitbake 参数

描述

-c fetch

从recipe中定义的地址, 拉取软件到本地

-c cleanall

清空整个构建⽬录

-c deploy

部署镜像或软件包到⽬标rootfs内

-k

有错误发⽣时也继续构建

-c compile

重新编译镜像或软件包

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值