前言

Yocto 是一个很强大的构建工具,其功能不仅仅是用来获取BSP源码和简单地编译源码,开发者还可以使用Yocto对其

开发板添加各种第三方开发库,而不需要每次重新从零开始编译源码,解决第三方依赖的方式进行开发,对开发效率的

提高有很大的帮助。也可以基于Yocto的构建规则,把自己定义的开发板卡添加到Yocto的构建工程中,便于向第三方进

行发布。但同时,Yocto也是一个很庞大的构建系统,里面有很多基本的构建规则需要开发者不断去熟悉才能灵活运

用,遇到问题要善于使用搜索引擎去寻找答案,最好的参考教程还是Yocto Project的官方文档,开发者只有不断学习,

不断提高,才能把Yocto这个工具用好,才能在开发中起到事半功倍的作用。

一、Yocto简介

Yocto是什么?简单地概括,它是一个工具,可以用来构建u-boot,kernel,文件系统,交叉编译工具链,等等。

Yocto提供了一套完整的全面的嵌入式Linux移植解决方案。使嵌入式Linux系统移植告别了以前通过源码一步步移植的

年代。Yocto解决了嵌入式Linux行业内各自为政的乱象,它为芯片厂家,操作系统,和设备厂商之间的协作提供广泛一

致的行业支持。

二、系统准备工作

1、系统要求

对于如何基于Yocto构建 i.MX6UL 的u-boot,kernel,rootfs,NXP官方提供了一份指导手册,参考NXP官方提供的指导

手册《i.MX_Yocto_Project_User’s_Guide.pdf》,我们开始基于Yocto构建i.MX6UL平台 的u-boot,kernel内核,rootfs

根文件系统。

在构建系统之前,需要进行一系列的准备工作,构建前准备:

1. 主机电脑的Linux版本:ubuntu18.04.2 LTS2. 主机电脑建议配置:Intel i7 四核以上处理器,8G内存,SSD硬盘更佳。3. 主机能正确访问互联网(最好网速比较快)。4. 需要在普通用户的环境下进行构建。

1.1 、安装与配置 git

1.1.1、 安装 git

因为 yocto 需要使用 git(用 git 来作版本控制),如果您已经有安装过 git 并且已经设置过本地用户 git 信息就跳过此步。

Ubuntu:~$sudo apt-get install git

1.1.2、配置 git

需要设置Git版本管理工具的信息,执行以下命令:

git config --global user.name "your_name"git config --global user.email "your_email"git config --list
参数解释:

–global user.name :添加Git用户名
–global user.email :添加Git用户的 email
–list :查看列表信息

2、下载构建所需依赖包

以下是整个Yocto构建过程,构建过程中,如遇到权限问题,使用sudo工具解决。

在主机Linux上安装Yocto构建过程中需要的依赖包,执行以下命令。

sudo apt-get install gawk wget git-coresudo apt-get install diffstat unzip texinfo gcc-multilibsudo apt-get install build-essential chrpath socat libsdl1.2-devsudo apt-get install libsdl1.2-devsudo apt-get install xterm sed cvssudo apt-get install subversion coreutils texi2htmlsudo apt-get install docbook-utils python-pysqlite2sudo apt-get install help2man make gcc g++sudo apt-get install desktop-file-utilssudo apt-get install libgl1-mesa-dev libglu1-mesa-dev mercurialsudo apt-get install autoconf automake groffsudo apt-get install curl lzop asciidocsudo apt-get install u-boot-tools

安装软件依赖包这一步骤,只要网络环境正常,一般不会出现问题。如果某些依赖包安装失败,可以尝试更换软件源,

笔者默认使用ubuntu18.04的官方源。

三、 获取 yocto 项目

1、下载repo

Yocto工程是使用repo工具进行版本管理的,因此,需要对ubuntu主机的repo工具进行安装和配置。整个Yocto的构建

在目录 /opt/yocto_project下进行。

1.1、repo 简介

repo 是一个构建在 Git 之上的工具,它可以更容易地管理包含多个存储库的项目,而这些存储库不需要位于同一台服

务器上。 repo 很好地补充了 yocto 项目的分层特性,使用户可以更容易地将自己的层添加到 BSP 中。简单来说,

repo 用来管理多个 git 工程, git 是无法将 freescale 的在存储库里面的某个项目给 clone 下来,如果我们只需要

freescale 的 yocto 项目, (要想知道 freescale 可不只有 yocto 项目呢),使用 Git 下载却把个存储库项目都下下来了。

这就是为什么要用 repo 来管理更庞大的项目的原因了。

1.2、获取 repo

由于国内外网络环境的原因,官方手册里下载 repo 的链接需要翻墙。下面提供获取 repo 的方法。

注意,以下操作需要在普通用户下进行,如果遇到需要权限的问题,就使用sudo命令进行解决。

执行以下命令,安装repo工具:

mkdir  /opt/yocto_project/bin -pchmod -R  777  /opt/yocto_projectPATH=/opt/yocto_project/bin:$PATHcurl  https://mirrors.tuna.tsinghua.edu.cn/git/git-repo  >  /opt/yocto_project/bin/repochmod  a+x  /opt/yocto_project/bin/repo

1.3、获取 yocto 项目

(1)、选择 yocto 的分支,可以用浏览器打开网址(网址有可能失效)添加链接描述查看 freescale 的 yocto 项目的分支。

(2)、根据源码内核的版本号是 4.1.15-2.10,可以从下图看出 imx-4.1-krogoth 分支就是对应内核 4.1.15-2.1.0 的版本,所以我们选择 imx-4.1-krogoth 分支。

(3)、获取 freescale yocto 项目的 imx-4.1-krogoth 分支, 在当前目录下执行下面的指令,执行过程如下。

过程中还会确认您的 git 用户信息是否是您在 1.1 节中配置的信息。

Ubunt~$ ./repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-4.1-krogoth

上面 freescale 仓库可能会失效。 备用下面的链接,从别外一个地方下载。

Ubunt~$  ./repo init -u https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp -b imx-4.1-krogoth

对于imx6ul平台,在使用Yocto构建BSP包的过程中,会从NXP官方的Git仓库下载很多文件,并在编译过程中产生很多文件信息,所以,我们把整个构建过程的下载文件和安装文件都放在/opt/yocto_project/fsl-release-bsp目录,方便统一进行管理。执行以下命令:

mkdir /opt/yocto_project/fsl-release-bspchmod 777 -R /opt/yocto_project/fsl-release-bspcd /opt/yocto_project/fsl-release-bsprepo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-4.1-krogothrepo sync -f -j4

因为国内某些不可描述的原因,在repo进行同步的过程中,可能会出现网络中断或网络连接不可访问的错误,如以下

错误可能会出现:
解决方法是,先单独克隆repo

git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo

然后将git-repo里面的repo可执行文件复制到/opt/yocto_project/bin目录

cp  git-repo/repo  /opt/yocto_project/bin  -achmod  a+x  /opt/yocto_project/bin/repo

再在同步源码的工作目录fsl-release-bsp新建.repo文件夹(若已存在则不用新建),把git-repo文件夹重命名为repo文

件夹,并复制到 .repo 目录下:

mv  git-repo  ./.repo/repo

重新执行以下命令,初始化repo仓库:

repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-4.1-krogoth

初始化成功后,如下图所示:
重新开始进行repo仓库同步:

repo sync -f -j8

仓库同步需要一段时间,同步完成后,如下图所示:
repo同步成功后,就可以开始进行镜像构建了.。

四、构建Yocto根文件系统

下面是Yocto发行版(DISTRO)的四种配置:

 fsl-imx-x11 -只有 X11 图形fsl-imx-wayland - Wayland weston graphicsfsl-imx-xwayland - Wayland graphics and X11。不支持使用 EGL 的 X11 应用程序fsl-imx-fb -帧缓冲图形-没有 X11 或 Wayland

支持的 machine 有很多种,以下是按官方文档列出的几种。

 imx6qpsabreautoimx6qpsabresdimx6ulevkimx6ull14x14evkimx6ull9x9evkimx6dlsabreautoimx6dlsabresdimx6qsabreautoimx6qsabresdimx6slevkimx6solosabreautoimx6solosabresdimx6sxsabresdimx6sxsabreautoimx7dsabresd

更多 machine 支持,可以进入 sources/meta-fsl-bsp-release/imx/meta-bsp/conf/machine 查看。

或者直接用 ls 指令查看

USER~$ ls sources/meta-fsl-bsp-release/imx/meta-bsp/conf/machine

构建 yocto 的文件系统镜像, freescale(NXP)提供了几种镜像供读者构建,文件系统镜像支持的功能越多,文件系

统就越大,读者可自行选择一个来构建。

如下表格简单介绍了几种镜像.

镜像名 说明
core-image-minimal 仅支持设备启动的小镜像
core-image-base 目标设备硬件的只支持控制台的镜像
core-image-sato 支持 X11 与 Sato 主题和使用 Pimlico 应用程序
fsl-image-machine-test FSL 社区的核心镜像,支持控制台环境,没有GUI 界面
fsl-image-gui 一个支持 GUI 但没有 Qt5 的镜像
fsl-image-qt5 一个开源 Qt 5 的镜像

官方提供了 fsl-setup-release.sh 脚本来构建项目,,在fsl-release-bsp目录下,使用以下命令格式配置镜像的构建参数,脚本语法如下:

DISTRO=<distro name> MACHINE=<machine name> source fsl-setup-release.sh -b <builddir>

参数解释:
DISTRO:发行版类型
MACHINE:机器类型
-b 表示构建的在指定目录。

在这里,我们选择imx6ulevk这个选项。

最终,配置镜像构建参数的完整命令:

DISTRO=fsl-imx-x11 MACHINE=imx6ulevk source fsl-setup-release.sh -b ./fsl_build_x11

fsl-setup-release.sh是构建脚本,如脚本不可执行,需使用chmod命令添加可执行权限。

执行完以上的配置参数的命令后,会提示需要接受EULA协议,按空格键直到协议最后,然后按“y”确认接受,最后,完

成后如下图所示:
在Yocto这个系统中,使用bitbake工具来进行各种系统或第三方库的构建和安装。bitbake是一个软件组建的自动化构建

工具,它可以像make命令一样控制如何构建一个系统或解决系统构建过程中的依赖问题。但bitbake又不像make依赖

makefile那样单一,bitbake可以搜集和管理大量没有依赖关系的配置描述文件(一般称为配方recipe),然后根据这些

描述文件自动按照正确的顺序进行构建。

注意:bitbake工具只能在普通用户下进行使用,在本次配置的Yocto环境中,bitbake支持以下镜像的构建:

     core-image-minimalmeta-toolchainmeta-toolchain-sdkadt-installermeta-ide-support

在这里,我们需要构建一个最小的嵌入式Linux系统,因此,执行以下命令构建一个最小的嵌入式Linux系统:

sudo bitbake core-image-minimal

这个最小的嵌入式Linux系统,构建的过程非常漫长,大概需要好几个小时,取决于你的网速带宽和电脑配置。因为

bitbake是一边下载一边编译的。构建过程如下图所示:
注意:如果构建过程中出现网络中断或关闭了构建的终端,只需要在fsl-release-bsp目录下执行以下命令:

DISTRO=fsl-imx-x11 MACHINE=imx6ulevk source fsl-setup-release.sh -b ./fsl_build_x11

重新配置构建的环境,然后再进入fsl_build_x11目录下,重新执行bitbake命令就可以继续构建了。

Yocto构建core-image-minimal成功

如下图所示:
注意:由于各种不可描述的原因,国内的普通网络在访问外国的源码服务器时,可能会出现源码下载错误,源码下载中

断等等情况,一般遇到这种情况的时候,可以先忽略其错误或警告,等整个Yocto构建完成后,再重新执行bitbake。网

络环境这个因素不是每个开发者都能主导的,这个只能看运气。有条件的开发者可以不断寻找优质的网络环境。

五、嵌入式Linux系统构建目录构造

最小的嵌入式Linux系统构建完成后,在Yocto工程的构建目录里,已经包含了kernel和u-boot的源代码,以及根文
件系统目录

u-boot源码目录:

/opt/yocto_project/fsl-release-bsp/fsl_build_x11/tmp/work/imx6ulevk-poky-linux-gnueabi/u-boot-imx/2016.03-r0/git

Linux kernel源码目录:

/opt/yocto_project/fsl-release-bsp/fsl_build_x11/tmp/work-shared/imx6ulevk/kernel-source

rootfs根文件目录:

/opt/yocto_project/fsl-release-bsp/fsl_build_x11/tmp/deploy/images/imx6ulevk/core-image-minimal-imx6ulevk-20190621012322.rootfs.tar.bz2

为了方便管理,我们把u-boot源码、Linux kernel源码和rootfs根文件目录统一存放在/opt/imx6ul_bsp目录下,并对源码

文件夹重新命名,完成后,如下图所示:

使用Yocto除了能获取源码,还帮我们成功编译出各个源码的镜像文件,这些镜像可以直接烧录至官方的开发套件

(imx6ul-evk)里面运行,镜像文件存放在以下目录:

/opt/yocto_project/fsl-release-bsp/fsl_build_x11/tmp/deploy/images/imx6ulevk

至此,Yocto构建u-boot、kernel内核、rootfs文件系统已经基本完成。

下一步可以基于使用Yocto构建的最小系统进行移植工作,以适配我们自己定制的开发板平台。

在这里,只是简单地描述了如何使用Yocto构建i.MX6UL的最小系统,并且构建出来的i.MX6UL的各种镜像是以NXP官方

开发套件(imx6ul-evk)为基础的,对于用户自定义的开发板,还需要进行一些移植工作,才能使u-boot,kernel,

rootfs运行在自定义的开发板上。

基于Yocto构建嵌入式Linux系统U-boot、kernel内核、rootfs文件系统相关推荐

  1. 【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统)

    知识架构及层次 Linux内核由三部分构成: Bootloader:启动引导系统(可执行文件) Kernel:内核(可执行文件) Root File System:根文件系统 嵌入式Linux系统构成 ...

  2. iMX6Ull采用Yocto构建嵌入式Linux系统(三)

    获取Yocto 设置Git用户名和密码 Yocto项目采用repo管理各个git库的方式进行管理.因此,除了使用repo工具外,还需要使用到Git.使用Git前,需要设置Git的用户名和密码: $ g ...

  3. 基于AT91SAM9G20构建嵌入式Linux系统

    本文中使用的目标平台AT91SAM9G20是Atmel公司使用ARM926EJ-S处理器内核开发的一块SoC嵌入式微处理器,主频达到400MHz,具有Atmel 先进的外设DMA 和分布式存储器架构, ...

  4. 基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg

    基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg 上一节我们已经基本完成了uboot的移植,下一步自然就是移植linux kernel.在真实的 ...

  5. 基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器、串口、pflash支持

    基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器.串口.pflash支持 添加串口支持 真实板卡的初期调试中,串口打印可谓神器,几乎所有的SOC都会带有串口这个外设,因 ...

  6. 构建嵌入式linux系统_用于构建嵌入式Linux系统的4种工具

    构建嵌入式linux系统 Linux正在被部署到比Linus Torvalds在他的宿舍里工作的设备更多的设备中. 受支持的各种芯片架构令人震惊,并导致各种大小的设备都使用Linux. 从庞大的IBM ...

  7. buildroot:Linux平台构建嵌入式Linux系统的框架

    buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...

  8. 嵌入式系统实验 构建嵌入式Linux系统,《嵌入式系统与开发》构建嵌入式Linux系统-实验报告.doc...

    <嵌入式系统与开发>构建嵌入式Linux系统-实验报告 <嵌入式数据库sqlite移植及使用> 实验报告 学生姓名: 陈 彤 学 号: 1座机电话号码 专业班级: 130044 ...

  9. 利用Yocto构建嵌入式Linux教程01--第一个Yocto项目构建

    大家好,从今日开始,计划写一个利用Yocto构建嵌入式Linux的教程,算是对个人工作和学习的一个总结. 本教程选用的Yocto版本为3.0.4,我使用的Linux发行版为Ubuntu 18.04 ( ...

最新文章

  1. [知识库分享系列] 三、Web(高性能Web站点建设)
  2. python跟php如何共用mysql_Python 3 多个函数共用一个mysql连接
  3. 清华大学刘知远组:基于Prompt Tuning对低维本征任务子空间进行探索
  4. mariadb设置root初始密码
  5. 【Yarn】hadoop的yarn资源队列
  6. linux重新设定分区大小
  7. php废物,PHP的垃圾回收机制以及大概实现
  8. 内存的静态分配和动态分配的区别
  9. tvpvar模型的建模步骤_这种思路讲解数据仓库建模,你见过吗?数据人与架构师必看...
  10. 慧荣SM2263XT量产开卡成功,附SM2263XT量产工具、开卡软件(一个512G固态硬盘不认盘修复教程)
  11. 苏科大的四年里,我都学会了啥?
  12. MySQL数据库软件及SQL简介
  13. MySQL数据库输入密码后闪退问题的解决方法
  14. Godot实现项目差异热更新
  15. 求求你!不要在网上乱拷贝代码了
  16. AD-NeRF 由音频和人脸图像合成人脸视频并表现出自然的说话风格
  17. Android Applicaion组件创建的源代码(Android 9,含代码注释)
  18. 国内人工智能在教育教学的应用汇总
  19. 进程调度----FCFS,SJF,优先级调度,RR
  20. EMC经典问答85问(70-74问)

热门文章

  1. 一个成功人士的创业心得
  2. vs2017开发ActiveX(主讲OCX)(七)、方法
  3. MD5密码哈希算法(c语言实现)
  4. 如何下载 TI 公司的官方例程以及为用户写好的标准头/源文件
  5. OGRE 引擎官方基础教程 (一)
  6. ADSL MODEM用户名和密码大全
  7. 给教师的一百条意见读后感
  8. 高清壁纸wallhaven.cc下载图片
  9. 都2023年了,你如果还不知道这18个C语言入门经典程序就亏了
  10. H264视频压缩编码标准(一)