【移植01】用NXP(恩智浦)提供的IMX6ULL的公板的BSP(FSL Yocto Project Community BSP)来编译生成烧写在SD卡中的完整镜像,并分析运行结果

NXP官网下载公板的原理图和PCB资料

在这一步我们到NXP(恩智浦)官网下载IMX6ULL的公板(EVK)的硬件资料,硬件资料主要是指公板的原理图和PCB资料。

在本篇博文中实际上我们并没有用到公板的原理图资料,但在下一篇博文我们对u-boot进行修改时就要用到了,下一篇博文的链接 https://blog.youkuaiyun.com/wenhao_ir/article/details/145662136

既然本篇博文没有用到公板的原理图资料,那为什么要写在这篇博文中呢?那是因为我的终极目标是要用公板提供的BSP移植生成能够在自己购买的开发板上正常运行的Bootloader和内核呀,在移植过程中迟早要用到,所以先把资料下载下来,在下载的过程中,也能对官方的公板资料页面有个了解。

01-进入官网,找到IMX6ULL的公板

进入NXP官网,官网地址如下:
https://www.nxp.com/
在这里插入图片描述
点击上图中的DESIGN CENTER:
在这里插入图片描述
点击下图中的Dev/Evaluation Boards
在这里插入图片描述
搜索关键词6ULL
在这里插入图片描述
搜索结果中的第1个就是我们要找的公板:
在这里插入图片描述

02-公板的名字和价格

上图中我们点击BUY OPTIONS还可以购买哦:
在这里插入图片描述
可见公板的全名为:MCIMX6ULL-EVK,从后面的构建配置中我们还可以知道这个发开板在FSL Yocto Project Community BSP构建环境中的名字为imx6ull14x14evk
这个公板的价格为 171.35USD,即人民币 1251.8488 元。
我们可以淘宝上搜索一下MCIMX6ULL-EVK
在这里插入图片描述
发现大致价格为:1600元左右。

03-公板的资料详情页

当然我们这里是要获取公板的资料,所以点击下图中的链接:
在这里插入图片描述
这样就进入了其详情页,链接如下:
https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-6ull-and-6ulz-applications-processor:MCIMX6ULL-EVK
在这里插入图片描述

04-下载公板硬件资源的相关资料(原理图和PCB设计文件)

点击下图中的Design Resources,即可自动跳转到硬件资源下载栏:
在这里插入图片描述
在这里插入图片描述
上图显示,这个资料的大小22.3MB,最后更新时间为2023年11月09日,但是百问网制作这个教程时这个资源的大小为10.0MB,最后更新时间为2019年08月06日。
在这里插入图片描述
为了保持与教程的一致性,我这里就使用教程提供的2019年08月06日更新的,大小为10.0MB的这个资源包吧!百度网盘下载链接为:
https://pan.baidu.com/s/1gy1OlDDNPDmKI8L_fHDxOQ?pwd=shtd
在这里插入图片描述
解压缩后的文件列表如下图所示,文件夹 MCIMX6ULL_BB_DESIGNFILES 里面包含的是 IMX6ULL 底板相关的硬件资源,MCIMX6ULL_CM_DESIGNFILES 里面包含的是 IMX6ULL 核心板相关的硬件资源。底板(Baseboard)和核心板(Core Module)的详细描述见下。

05-底板(Baseboard)和核心板(Core Module)的详细描述

在许多嵌入式开发板中,通常会有 底板(Baseboard)核心板(Core Module) 两个部分,这种结构设计有助于模块化开发,使得开发更为灵活。下面是对这两个文件夹内容的进一步说明:

  1. MCIMX6ULL_BB_DESIGNFILES

    • 这个文件夹包含的是 底板(Baseboard) 的设计文件。底板通常包括了与外部世界接口相关的硬件,如 I/O 接口、调试接口、电源管理、显示接口、外部存储(如 SD 卡、eMMC)等。
    • 具体来说,底板的设计文件可能包括:
      • 电源电路、调节电路
      • 外部接口,如 USB、以太网、HDMI、显示器接口等
      • 串口、调试端口(如 JTAG)
      • 一些基本的硬件设计,比如连接器、跳线、开关等
  2. MCIMX6ULL_CM_DESIGNFILES

    • 这个文件夹包含的是 核心板(Core Module) 的设计文件。核心板是开发板的心脏部分,通常包括了主要的处理器(IMX6ULL),以及一些关键组件(如存储、内存等),这部分硬件设计文件关注的内容通常是处理器和相关资源的配置。
    • 核心板设计文件通常包括:
      • 处理器(IMX6ULL)以及与其连接的内存、闪存等
      • 系统总线、片上外设、时钟等
      • 可能还包括一些基本的调试接口和基础支持电路

主要区别:

  • 底板(BB)设计文件:主要涉及与外部设备连接和电源管理相关的硬件设计。
  • 核心板(CM)设计文件:主要涉及处理器及其直接相关的硬件资源(如内存、闪存等)的设计。

这种结构非常适用于模块化设计,你可以将 核心板(CM)底板(BB) 独立开发,核心板可以被多个底板复用,减少了设计和生产的复杂性。

下载NXP提供的公板的BSP的说明文档

NXP提供的公板的BSP的名字和情况说明

NXP提供的公板的BSP是以Yocto Projec为框架的,其全名叫做FSL Yocto Project Community BSPFSL Yocto Project Community BSP 是一个由 Yocto 社区提供的支持包,它为 i.MX 板提供了定制支持。虽然它是基于 Yocto Project 框架的,但它是一个特定于硬件的平台支持包(BSP),而不是 Yocto Project 本身。

进入公板的资料详情页

参考上一个目录“NXP官网下载公板的原理图和PCB资料”的“01至03”步,找到公板的资料详情页,公板的资料详情页的链接如下:
https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-6ull-and-6ulz-applications-processor:MCIMX6ULL-EVK
在这里插入图片描述

找到下载位置(Documentation项下)

点击下图中的Documentation,会跳转到页面的Documentation项下:
在这里插入图片描述
在这里插入图片描述
勾选上图中的Supporting Information
在这里插入图片描述

找到需要下载的资料文件和资料文件名称说明

在上一步的基础上,在页面中搜索关键词L5.4.47_2.2.0
在这里插入图片描述
这里要说明下资料名中的数字编号是什么意思。比如L5.4.47_2.2.0_LINUX_DOCS中的L5.4.47代表对应的Linux系统版本号为5.4.47,当然我拿到的百问网的开发板的内核版本号为:4.9.88,详情见 https://blog.youkuaiyun.com/wenhao_ir/article/details/145475132,那我们去看下有没有Linux内核版本号为:4.9.88的BSP资料说明文档,往下拉一点页面,就找到了,如下图所示:
在这里插入图片描述

下载FSL Yocto Project Community BSP的说明文档压缩文件:L5.4.47_2.2.0_LINUX_DOCS

这里,由于这里百问网教程中用的是L5.4.47_2.2.0_LINUX_DOCS,所以我们这里也下载L5.4.47_2.2.0_LINUX_DOCS,点击下图中红框的位置:
在这里插入图片描述
就会跳转到下载页面,并自动弹出下载对话框:
在这里插入图片描述
当然,这里为了与百问网提供的教程相吻合,所以我直接用百问网提供的已经下载好的imx-yocto-L5.4.47_2.2.0.zip,百度网盘下载链接如下:
https://pan.baidu.com/s/1m9TLpVW_5IBdeAanBtP3nA?pwd=e1y7

下载完成后解压得到的文件见下面。

资料包中的核心文档i.MX_Yocto_Project_User's_Guide.pdf的说明

资料包L5.4.47_2.2.0_LINUX_DOCS下载完成后解压得到的文件如下:
在这里插入图片描述
在上面截图中最后一个文档i.MX_Yocto_Project_User's_Guide.pdf中有如何下载Yocto Project源码和利用Yocto进行构建的方法,这个文档的Overview的截图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文字如下:

1 Overview
This document describes how to build an image for an i.MX board by using
a Yocto Project build environment. It describes the i.MX release layer and
i.MX-specific usage.
The Yocto Project is an open-source collaboration focused on embedded
Linux®
OS development. For more information on Yocto Project, see the Yocto
Project page: www.yoctoproject.org/. There are several documents on the
Yocto Project home page that describe in detail how to use the system. To use
the basic Yocto Project without the i.MX release layer, follow the instructions
in the Yocto Project Quick Start found at www.yoctoproject.org/docs/current/
yocto-project-qs/yocto-project-qs.html.
The FSL Yocto Project Community BSP (found at freescale.github.io) is a
development community outside NXP providing support for i.MX boards in the
Yocto Project environment. i.MX joined the Yocto Project community providing
a release based on the Yocto Project framework. Information specific to FSL
community BSP use is available on the community web page. This document
is an extension of the community BSP documentation.
Files used to build an image are stored in layers. Layers contain different types
of customizations and come from different sources. Some of the files in a layer
are called recipes. Yocto Project recipes contain the mechanism to retrieve
source code, build and package a component. The following lists show the
layers used in this release.
i.MX release layer
• meta-imx
— meta-bsp: updates for meta-freescale, poky, and metaopenembedded layers
— meta-sdk: updates for meta-freescale-distros
— meta-ml: Machine learning recipes
Yocto Project community layers
• meta-freescale: provides support for the base and for i.MX Arm®
reference boards.
• meta-freescale-3rdparty: provides support for 3rd party and partner boards.
• meta-freescale-distro: additional items to aid in development and exercise board capabilities.
• fsl-community-bsp-base: often renamed to base. Provides base configuration for FSL Community BSP.
• meta-openembedded: Collection of layers for the OE-core universe. See layers.openembedded.org/.
• poky: basic Yocto Project items in Poky. See the Poky README for details.
• meta-browser: provides several browsers

这段文字是关于如何使用 FSL Yocto Project Community BSP 构建 i.MX 板子的镜像文件的指南,特别是针对 NXP 提供的 i.MX6ULL-EVK 开发板。让我们逐步分析这段文字,帮助你理解其具体内容。

  1. Yocto Project 概述

    • Yocto Project 是一个开源项目,专注于嵌入式 Linux 系统的开发。它提供了一个灵活的平台,帮助开发人员定制和构建适合不同硬件平台的 Linux 镜像。
    • 通过 Yocto Project,开发人员可以从源代码构建嵌入式 Linux 操作系统,包括内核、Bootloader、文件系统、驱动等。
  2. Yocto 项目和 FSL Yocto Project Community BSP(板支持包)

    • 该文档介绍了如何使用 Yocto 构建适用于 i.MX 板(例如 i.MX6ULL)的镜像文件。
    • BSP(Board Support Package)是为特定硬件平台(如 i.MX 开发板)提供的支持包,包含了支持该平台所需的工具、配置文件、驱动程序和其他必要的软件资源。NXP 提供了一个针对 i.MX 系列的 BSP,它以Yocto Project为框架,其名字为 FSL Yocto Project Community BSP,包含了该系列处理器的驱动、内核配置和其他硬件相关的支持文件。Yocto Project 提供了一个构建框架,支持为不同的硬件平台构建 Linux 系统。而 BSP 是针对某个具体硬件平台的定制支持包,它依赖于 Yocto 项目来进行构建和定制。
    • i.MX Release Layer 是 NXP 提供的一个 Yocto 项目层,专门为 i.MX 系列处理器定制了 Yocto 环境。它包含了 NXP 针对 i.MX 处理器的特定修改和优化。
  3. Yocto 项目层和层结构

    • Layer:在 Yocto 中,(Layer)是用于组织和分离不同功能、组件、配置的结构。每个层都包含了一个或多个 recipe(配方),这些配方定义了如何获取、编译和安装软件包。
    • 该文档列出了为 i.MX 系列处理器构建镜像所需的不同层(Layer)。
  4. i.MX Release Layer

    • 这是 NXP 提供的针对 i.MX 处理器的 Yocto 配置层,包含了一些特定的修改和优化:
      • meta-imx:这是 i.MX 处理器的核心层,包括了几个子层:
        • meta-bsp:更新了 meta-freescalepokymeta-openembedded 等层,确保这些层与 i.MX 处理器兼容。
        • meta-sdk:提供了与 meta-freescale-distros 相关的更新,通常与开发工具包、SDK(软件开发工具包)相关。
        • meta-ml:这个子层包含了与 机器学习(Machine Learning) 相关的配方,可能包括深度学习框架、优化等工具。
  5. Yocto 项目社区层

    • meta-freescale:这个层提供了对 i.MX 处理器及其参考板的支持,包含了基础的 Yocto 配置和支持。
    • meta-freescale-3rdparty:这个层为第三方合作伙伴和板卡提供支持,允许将其他厂商的硬件支持集成到 Yocto 中。
    • meta-freescale-distro:这个层包含了额外的开发工具和项目,帮助开发者充分利用板卡的功能。
    • fsl-community-bsp-base:这是 FSL(Freescale,i.MX 的前身)社区提供的基本配置层,包含了用于构建的基础配置和设置。
    • meta-openembedded:这是一个包含多个层的集合,提供了各种与嵌入式 Linux 系统相关的工具和软件包。
    • poky:这是 Yocto 项目中最基本的层,包含了 Yocto 项目的核心功能,提供了构建嵌入式 Linux 系统所需的基础内容。
    • meta-browser:提供了与浏览器相关的配方,例如 Webkit、Chromium 等,可以用于嵌入式设备中的浏览器功能。
    • meta-qt5:这个层提供了 Qt 5,也就是流行的跨平台图形界面框架 Qt 5 的支持。
    • meta-timesys:这个层提供了 Vigiles 工具,用于监控和通知 BSP 漏洞(包括 CVE,即公共漏洞和暴露漏洞)的信息。
  6. 关于配方(Recipe)

    • 配方是 Yocto 项目中最基本的构建单元,每个配方定义了如何从源代码编译、构建和安装某个软件包。配方通常会指定软件的源代码位置、构建方式和安装路径等。
    • 这些配方可以帮助 Yocto 在构建时下载源代码、编译并打包成适合嵌入式设备的格式。
  7. 总结

    • 这段文字的核心是让开发人员了解如何使用 FSL Yocto Project Community BSP 构建适用于 i.MX 系列处理器的嵌入式 Linux 镜像。通过集成多个不同的层,Yocto 提供了丰富的工具和支持,能够为 i.MX 开发板定制镜像,并支持如机器学习等高层应用。
    • 通过 Yocto 提供的 meta-imx 等层,开发者可以很容易地为 i.MX 开发板创建一个包含 Bootloader、内核、根文件系统等的完整嵌入式 Linux 系统。

可见,NXP提供的BSP是利用Yocto这个构建系统进行Bootloader、Linux 内核、根文件系统、设备树文件的构建,但是在嵌入式应用开发手册中有下面的话:
在这里插入图片描述
所以有可能在本篇博文中我并不会去真正执行构建,即使万不得已要进行构建,也得在另外一台电脑或服务上进行构建,否则自己的电脑被占用两三天可不是一件好事。至于对服务器的要求是什么,请入下看。

Yocto构建操作时对服务器Ubuntu的要求

在文件i.MX_Yocto_Project_User's_Guide.pdf中有下面这段话:

To get the Yocto Project expected behavior in a Linux Host Machine, the packages and utilities described below must be installed.
An important consideration is the hard disk space required in the host machine. For example, when building on a machine running
Ubuntu, the minimum hard disk space required is about 50 GB. It is recommended that at least 120 GB is provided, which is
enough to compile all backends together. For building machine learning components, at least 250 GB is recommended.
The recommended minimum Ubuntu version is 18.04 or later. The Chromium version 74 requires Ubuntu 18.04. The latest release
supports Chromium V74, which requires an increase to the ulimit (number of open files) to 4098. If Chromium is not used, 16.04
should work. Earlier versions before 16.04 may cause the Yocto Project build setup to fail, because it requires python versions
only available starting with Ubuntu 12.04. See the Yocto Project Reference Manual for more information.

这段话是关于 FSL Yocto Project Community BSPLinux 主机 上的 环境配置,特别是主机上需要安装的包和工具,以及硬盘空间的要求。以下是这段话的解释:

解释:

  • 主机设置(Host Setup):为了在 Linux 主机上正确运行 Yocto 项目,必须确保主机上安装了所需的软件包和工具。此外,还需要满足一些硬件要求,尤其是硬盘空间。

  • 硬盘空间要求

    • 50 GB:这是最小要求,表示至少需要 50 GB 的硬盘空间来进行 Yocto 构建。
    • 120 GB:建议提供至少 120 GB 的硬盘空间,这样可以确保有足够的空间来编译所有后端组件(即构建所有的基础功能)。
    • 250 GB:如果你计划构建 机器学习组件(Machine Learning components),那么硬盘空间需要更大,建议至少 250 GB。
  • Ubuntu 版本要求

    • 最低 Ubuntu 版本是 18.04:Yocto 项目在构建时对 Ubuntu 系统有一定要求,推荐使用 Ubuntu 18.04 或更高版本。
    • Chromium 版本 74:如果构建过程中涉及到 Chromium(例如构建带有浏览器功能的系统),则必须使用 Ubuntu 18.04,因为 Chromium 版本 74 需要该版本的 Ubuntu 才能正常工作。
  • ulimit 设置:为了支持 Chromium V74,系统的 ulimit(即操作系统允许的最大打开文件数)需要设置为 4098。这通常通过修改系统配置文件来实现,以便支持更多的并发文件操作。

  • Ubuntu 16.04:如果不使用 Chromium,Ubuntu 16.04 版本应该能够满足构建需求。但如果使用早期版本(例如 16.04 以下的版本),则可能会导致构建失败,因为 Yocto 项目需要从 Ubuntu 12.04 开始支持的特定 Python 版本。

  • 参考手册:如果需要更详细的配置说明和安装要求,可以参考 Yocto 项目参考手册,该手册提供了更多的技术细节。

总结:
这段话主要强调了在 Linux 主机上构建 FSL Yocto Project Community BSP 项目时,所需的硬盘空间、操作系统版本和其他设置要求。特别是,对于构建包含 Chromium 或机器学习组件的系统,可能需要更多的硬盘空间和特定的系统配置(如增加 ulimit)。

在Vultr上开一台Ubuntu服务器用于构建

注意:最后在进行步骤“选择自己想生成的镜像并开始执行构建”时,发现由于git仓库的源已失效,所以无法进行构建,所以这里自己进行构建是不可行的,当然也就没必要去订阅配置一台Ubuntu服务器了。
注意:最后在进行步骤“选择自己想生成的镜像并开始执行构建”时,发现由于git仓库的源已失效,所以无法进行构建,所以这里自己进行构建是不可行的,当然也就没必要去订阅配置一台Ubuntu服务器了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可见,费用为0.312美元一个小时,即2.2802元一个小时,如果我用5天,那么费用为:
2.2802245=273.6元…哎呀,我去这费用有点不能承受呀。

那改为4核吧~
在这里插入图片描述
在这里插入图片描述

可见,4核,180GB存储空间下,费用为0.066美元一个小时,即0.4823元一个小时,如果我用5天,那么费用为:
0.4823245=57.8元…这费用还可以承受…

点击上图中的“Configure Software”,选择系统并填写服务器名字:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击下图中的Deploy开始部署服务器。
在这里插入图片描述
在这里插入图片描述
稍等10分钟等它彻底部署完成。
在这里插入图片描述
部署完成后用SecureCRT连接它,注意默认是没有桌面的,所以就没有远程桌面,也没有必要自己安装桌面,直接装个宝塔面板不香么?
在这里插入图片描述

用SecureCRT连接它后注意设置主动保持会话的有效状态:
在这里插入图片描述

在Ubuntu中安装进行Yocto Project构建时需要的22个软件包

文档中的相关原文如下:
在这里插入图片描述
Yocto 项目的构建要求为构建环境安装一些必要的软件包,这些软件包的安装命令如下:

注意:不要直接先运行这条命令,因为有很多源无法连接了,得先新下apt-get,具体的方法往后看。
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
 build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
 xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
 pylint3 xterm

在 Linux 中,命令行中的 反斜杠(\) 用于表示命令继续到下一行,即命令行可以分为多行书写,方便显示和管理。它告诉系统该命令还没有结束,需要继续在下一行接着输入。实际上是一个长命令的分行写法,等价于:

注意:不要直接先运行这条命令,因为有很多源无法连接了,得先新下apt-get,具体的方法往后看。
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm

这条命令的具体作用如下:
这条命令通过 apt-get 安装了多个软件包,这些软件包主要用于支持 Yocto Project 的构建环境和一些基本的开发工具。下面是逐个解释这些包的功能:

  1. gawk

    • 功能:GNU 版本的 AWK,一个强大的文本处理工具,用于处理、分析和转换文本文件,特别是处理按列组织的文本。
  2. wget

    • 功能:一个命令行工具,用于从网络上下载文件。支持 HTTP、HTTPS 和 FTP 协议,通常用于下载源代码或软件包。
  3. git-core

    • 功能:Git 是一个分布式版本控制系统,git-core 包含了 Git 的基本工具和库,用于代码版本控制和管理。
  4. diffstat

    • 功能:一个用于生成补丁(diff)统计信息的小工具。通常用于显示源代码修改的总结信息,如新增、删除和修改的行数。
  5. unzip

    • 功能:用于解压 ZIP 格式的压缩文件。
  6. texinfo

    • 功能:用于处理和生成 Info 文档的工具,Info 是一种用于电子文档的格式,通常与 GNU 项目相关。
  7. gcc-multilib

    • 功能:提供多架构编译支持,允许编译 32 位和 64 位程序。这个包对于需要同时处理 32 位和 64 位代码的项目(如交叉编译)是必需的。
  8. build-essential

    • 功能:这是一个元包,包含了许多基本的构建工具,如 gcc 编译器、make 工具和其他构建所需的工具,是构建源代码的基础。
  9. chrpath

    • 功能:修改二进制文件的 rpathrunpath,这些路径通常指示共享库的位置。
  10. socat

  • 功能:多功能网络工具,允许数据流通过网络接口和本地文件或其他端口进行转发。常用于嵌入式系统开发中的串口通信。
  1. cpio
  • 功能:用于创建和提取 CPIO 格式的归档文件(类似于 tar 文件)。通常用于创建 Linux 文件系统映像或安装包。
  1. python, python3, python3-pip
  • 功能:Python 编程语言的不同版本和工具:
    • python:默认的 Python 2.x 版本(虽然 Python 2 已经不再维护,但某些旧项目仍使用)。
    • python3:Python 3 的默认版本。
    • python3-pip:Python 3 的包管理工具,用于安装 Python 3 的第三方库。
  1. python3-pexpect
  • 功能:用于自动化交互式应用的 Python 库,能够控制子进程并模拟用户输入,通常用于嵌入式系统自动化测试和脚本。
  1. xz-utils
  • 功能:用于处理 XZ 格式的压缩文件,常用于处理大文件或存档文件。
  1. debianutils
  • 功能:一些有用的工具,通常用于管理 Debian 系统,提供了像 dpkgupdate-alternatives 等命令。
  1. iputils-ping
  • 功能:提供 ping 命令,用于测试网络连接是否正常。
  1. python3-git
  • 功能:Python 3 版本的 Git 库,允许使用 Python 脚本访问和操作 Git 仓库。
  1. python3-jinja2
  • 功能:一个模板引擎,用于生成动态内容,通常用于 Web 开发和嵌入式项目中的配置文件生成。
  1. libegl1-mesa
  • 功能:提供 OpenGL ES(图形库)的 EGL 接口,主要用于图形渲染。
  1. libsdl1.2-dev
  • 功能:开发版的 SDL 1.2 库,提供了跨平台的 2D 图形、音频和输入支持,常用于游戏开发和嵌入式图形应用。
  1. pylint3
  • 功能:Python 3 版本的 Pylint,是一个静态代码分析工具,用于检查 Python 代码的质量和风格。
  1. xterm
  • 功能:一个 X11 终端模拟器,允许在图形环境中打开命令行终端。

总结:
这条命令安装了一系列用于构建和开发嵌入式 Linux 系统所需的工具和依赖库,特别是为 Yocto 项目构建环境提供支持。它包括了构建工具、版本控制工具、网络工具、Python 库、调试工具、以及图形和多媒体相关库等。这些软件包帮助你处理代码、构建项目、自动化脚本、调试和测试等工作。

安装这些工具和库的命令的执行情况如下:

注意:不要直接先运行这条命令,因为有很多源无法连接了,得先新下apt-get,具体的方法往后看。
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm

在这里插入图片描述
结果有很多源都失效了:
在这里插入图片描述
可以更新下apt-get的的包索引再试:

sudo apt-get update

在这里插入图片描述
更新完成后再运行下面的命令:

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm

然后就没问题了,运行结果如下:
在这里插入图片描述

安装宝塔面板

安装宝塔面板的目的是方便将来进行文件的上传、下载、解压、编辑等操作。

wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh ed8484bec

在这里插入图片描述

 【云服务器】请在安全组放行 10152 端口
 外网面板地址: https://149.28.205.249:10152/d3b75d36
 内网面板地址: https://149.28.205.249:10152/d3b75d36
 username: oqgpbyyz
 password: dd826101

仪表盘如下:
在这里插入图片描述
哈哈,熟悉的界面,熟悉的味道。

新建一个非root用户并切换到这个新用户

为了安全着想,Yocto的构建过程不允许在root用户下进行,构建命令bitbake不允许以root用户身份运行,否则会报下面的错:
在这里插入图片描述

Do not use Bitbike as root.

所以咱们这里需要新建一个用户,按下面这篇博文新建并切换到用户suwenhao
在这里插入图片描述
请按照博文的方法 https://blog.youkuaiyun.com/wenhao_ir/article/details/145590463 新建一个名为suwenhao的用户并切换到这个用户。
在这里插入图片描述

安装配置Git的仓库管理工具repo(由于相关的git源已失效所以这一步的方法无效)

重要说明:由于这一步要用到的git源https://source.codeaurora.org/external/imx/imx-manifest/已无法解析:
在这里插入图片描述
所以只能用百问网之前下载好的BSP往服务器上传,所以这一步无效。

安装仓库管理工具repo

其实之前已经使用过Git的仓库管理工具repo了,详情见:
https://blog.youkuaiyun.com/wenhao_ir/article/details/144325141
只是上面这篇博文中的相当于使用的是一个绿色版的repo,在具体的git命令中通过路径来引用它里面的文件。但是咱们在这里需要直接把repo安装配置好,以使git命令能通过环境变量直接使用repo

在安装repo前,先确认系统中有没有repo,下面两个命令都可以进行确认:

repo --version

在这里插入图片描述
可见,没有repo工具。

which repo

在这里插入图片描述
可见也没有repo工具。

所以我们这里需要安装`repo。

关于安装repo,核心文档i.MX_Yocto_Project_User's_Guide.pdf中的相关原文如下:
在这里插入图片描述
Repo is a tool built on top of Git that makes it easier to manage projects that contain multiple repositories, which do not need to be on the same server. Repo complements very well the layered nature of the Yocto Project, making it easier for users to add their own layers to the BSP.
To install the “repo” utility, perform these steps:
①Create a bin folder in the home directory.

$ mkdir ~/bin (this step may not be needed if the bin folder already exists)
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo 

②Add the following line to the .bashrc file to ensure that the ~/bin folder is in your PATH variable.

export PATH=~/bin:$PATH 

Another option for installing the repo command is to use the Ubuntu package management system. The command is as follows:

$ sudo apt-get install repo

这段话的详细解释如下:

这段话主要讲解了如何设置 repo 工具。repo 是一个基于 Git 的工具,用于管理包含多个 Git 仓库的项目,特别适用于那些仓库不在同一服务器上的情况。repo 可以有效地补充 Yocto 项目的分层结构,方便用户向 BSP(板支持包)中添加自己的层(layer)。接下来是这段话的详细解释:

  1. repo 工具介绍

    • repo 是一个构建在 Git 之上的工具,用于管理包含多个仓库的项目。它使得管理这些仓库变得更加简单,即使这些仓库不在同一个服务器上。
    • 对于 Yocto 项目来说,repo 工具非常有用,因为 Yocto 项目是一个分层结构的项目,用户通常需要管理多个 Git 仓库并将自己的 layer(层)添加到 BSP(板支持包)中。repo 能简化这一过程。
  2. 安装 repo 工具的步骤
    安装 repo 工具有两种方法,第一种是手动安装,第二种是使用 Ubuntu 包管理系统。

手动安装方法:

  1. 创建 bin 文件夹(如果不存在的话)

    • 执行以下命令,在家目录(~)下创建一个 bin 文件夹:
      $ mkdir ~/bin
      
    • 如果 ~/bin 文件夹已经存在,则可以跳过这一步。
  2. 下载 repo 工具

    • 使用 curl 命令从指定 URL 下载 repo 工具并将其保存到 ~/bin 文件夹中:
      $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
      
  3. repo 工具赋予执行权限

    • 执行以下命令,确保 repo 文件可执行:
      $ chmod a+x ~/bin/repo
      
  4. ~/bin 添加到 PATH 环境变量中

    • 这样做是为了确保在终端中可以直接使用 repo 命令。执行以下命令,将 ~/bin 路径添加到 .bashrc 文件中:
      export PATH=~/bin:$PATH
      
    • 修改后,保存 .bashrc 文件并重新加载,以便让 PATH 环境变量生效。

使用 Ubuntu 包管理系统安装:

  • 如果你使用的是 Ubuntu,也可以通过包管理系统安装 repo 工具:
    $ sudo apt-get install repo
    

总结:

  • repo 是一个用于管理多个 Git 仓库的工具,特别适用于分层的 Yocto 项目。
  • 可以手动下载并安装 repo,或者通过 apt-get 安装。手动安装完成后,需要将 repo 添加到 PATH 中,以便在命令行中使用。
  • 如果你使用的是 Ubuntu,也可以通过包管理系统安装 repo 工具自动安装:
    $ sudo apt-get install repo
    
    通过包管理系统安装 repo 工具自动安装,不需要再手动设置PATH 环境变量哈。

这里我们首先尝试自动安装,运行下面的命令:

sudo apt-get install repo

在这里插入图片描述
可见报错了…那就只有手动安装了,运行下面三条命令手动安装:
注意:一定要先切换到新建的用户下进行操作,因为后面的构建过程是很有可能要用到repo的。

mkdir ~/bin

在这里插入图片描述

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

在这里插入图片描述

在这里插入图片描述

chmod a+x ~/bin/repo

在这里插入图片描述

然后添加环境变量:

vi ~/.bashrc

在末尾加上下面的配置语句(如果只是在本终端中临时生效,可以直接执行下面的命令,即不需要修改文件~/.bashrc):

export PATH=~/bin:$PATH

语句中$PATH 是一个环境变量,里面存储了操作系统查找可执行文件的路径列表。这条命令相当于把路径~/bin添加到现有环境变量$PATH的前面。
在这里插入图片描述
使用下面的命令使改生效:

source ~/.bashrc

在这里插入图片描述

用下面的命令验证下是否安装成功:

repo --version

在这里插入图片描述
这就repo就安装成功了。

配置repo并拉取对应的仓库

就像博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144325141 中那样,我们需要配置好repo,才能把我们需要的源码下载下来。

关于如何配置repo,核心文档i.MX_Yocto_Project_User's_Guide.pdf中的相关原文如下:
在这里插入图片描述
先说前三条命令:
在这里插入图片描述
这三条命令显然是在设置git了,git在Ubuntu上使用前都要先设置name和email,这在博文https://blog.youkuaiyun.com/wenhao_ir/article/details/144325141中也有体现。
关键是第3条命令不知道是什么意思:

$ git config --list

第三条命令 $ git config --list 的作用是列出当前 Git 配置文件中的所有配置项及其值。执行这个命令后,Git 会显示包括用户名、电子邮件、别名等在内的各种配置信息。它能够帮助你查看当前系统级别、全局级别或本地级别的配置项。

例如,执行该命令后,可能会看到类似以下的输出:

user.name=Your Name
user.email=your.email@example.com
core.editor=vim
...

这些信息是 Git 在操作时所使用的设置。如果你不确定当前的 Git 配置或者想确认修改是否生效,使用这个命令可以很方便地查看。
所以其实第三条命令是不需要的,直接运行下面两条命令就可以了:

git config --global user.name "suwenhao"
git config --global user.email "2487872782@qq.com"

请添加图片描述
由此我们可以看出,Ubuntu系统中一般情况下默认都是有安装好git的,只是使用前需要设置下name和email。

然后继续依次执行下面的命令:

cd ~
mkdir imx-yocto-bsp

在这里插入图片描述

cd ~/imx-yocto-bsp
repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.47-2.2.0.xml

结果报错了:
在这里插入图片描述
说明这个源应该是无效了~解决方法就是去官网获取BSP的最新文档,然而最新文档对应的内核是L6.1.36:
在这里插入图片描述
那就直接用百问网当时下载好的往上传了。

可以进一步用下面的命令测试下源是否无效:

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

在这里插入图片描述
我这台服务器是美国硅谷的服务,不存在什么被墙的问题,所以真的只能用百问网当时下载好的BSP往上传了。

将百问网之前下载好的BSP文件传到Ubuntu服务器中

由于上一步中发现NXP提供的git源 https://source.codeaurora.org/external/imx/imx-manifest/ 已失效,所以只能用百问网之前已经下载好的BSP。

如果git源 https://source.codeaurora.org/external/imx/imx-manifest没有失效,那么将获得下面这个文件:

imx-yocto-bsp.tar.gz

在这里插入图片描述
把它从百度网盘下载下来然后传到服务器上:

文件imx-yocto-bsp.tar.gz的百度网盘下载地址:
https://pan.baidu.com/s/11DcdobasC0hPArtGW_q9-A?pwd=sc59

这里不妨利用SCP命令来传,详情见 https://blog.youkuaiyun.com/wenhao_ir/article/details/134295710

将百问网提供的BSP文件imx-yocto-bsp.tar.gz的放到E盘的upload目录下:
在这里插入图片描述
在Windows的命令行中运行下面的命令上传imx-yocto-bsp.tar.gz

scp -P 22 -o "StrictHostKeyChecking no" -r E:\upload\imx-yocto-bsp.tar.gz root@149.28.205.249:/home/suwenhao/

当然这里如果安装了宝塔可直接通过宝塔上传。
在这里插入图片描述
注意:上面截图中我的目标目录为/root,而不是/home/suwenhao/,那是因为这张截图是之前在root用户下进行操作时进行的截图。
在这里插入图片描述
注意:上面截图中我的目标目录为/root,而不是/home/suwenhao/,那是因为这张截图是之前在root用户下进行操作时进行的截图。
上传完成:
在这里插入图片描述

上传在编译构建中会自动下载的依赖文件

将上一步得到的imx-yocto-bsp.tar.gz解压出来:
在这里插入图片描述
在这里插入图片描述

具体的文件名如下:

suwenhao@BSP-01:~/imx-yocto-bsp$ ls
imx-setup-release.sh  README  README-IMXBSP  setup-environment  sources

然后把编译构建中会自动下载的编译所需的文件的压缩文件imx-yocto-zeus_downloads.tar.gz上传到刚解压BSP得到的目录/home/suwenhao/imx-yocto-bsp中【至于为什么要传到这个目录,请往后搜索关键词“${BSPDIR}/downloads/”】,由于这个文件挺大的,有13.28GB大小,所以为了保险起见,不用宝塔传,而用SCP传。

把文件imx-yocto-zeus_downloads.tar.gz放到本地Windows系统中的目录:E:\upload下:

在这里插入图片描述
在Windows的命令行中运行下面的命令执行上传操作:

scp -P 22 -o "StrictHostKeyChecking no" -r E:\upload\imx-yocto-zeus_downloads.tar.gz root@149.28.205.249:/home/suwenhao/imx-yocto-bsp/

注意:上面截图中我的目标目录为/root/imx-yocto-bsp/,而不是/home/suwenhao/imx-yocto-bsp/,那是因为这张截图是之前在root用户下进行操作时进行的截图。

这么快的速度的情况下也需要1个小时零11分钟…
等待了一个多小时终于传完了:
在这里插入图片描述
注意:上面截图中我的目标目录为/root/imx-yocto-bsp/,而不是/home/suwenhao/imx-yocto-bsp/,那是因为这张截图是之前在root用户下进行操作时进行的截图。
!可见耗时1个小时08分。
在这里插入图片描述
然后解压出来,这个解压要花点时间,耐心等待一会儿…
在这里插入图片描述
解压完之后目录/home/suwenhao/imx-yocto-bsp的文件列表如下:
在这里插入图片描述
解压出来的downloads的文件列表如下:
在这里插入图片描述
大概浏览了,其内容有工具,比如cmake、json,也有源代码,比如Linux的源代码,还有各种库,那内容是相当丰富,可见这个FSL Yocto Project Community BSP的依赖那是相当得多呀。

此时咱们的磁盘空间还剩余121GB,刚好能满足建议的磁盘空间。
在这里插入图片描述
在这里插入图片描述

构建配置(这是重点)

构建配置概述

接下来进行构建配置,这里需要细读官方说明文档,那就一段一段地仔细地读吧。

5.1 Build configurations
i.MX provides a script, imx-setup-release.sh, that simplifies the setup for i.MX machines. To use the script, the name of the
specific machine to be built for needs to be specified as well as the desired graphical backend. The script sets up a directory and
the configuration files for the specified machine and backend.
In the meta-imx layer, i.MX provides new or updated machine configurations that overlay the meta-freescale machine
configurations. These files are copied into the meta-freescale/conf/machine directory by the imx-setup-release.sh script.
The following are i.MX machine configuration files that can be selected. Check either the release notes or the machine directory
for the latest additions.
在这里插入图片描述

这段话说明了如何通过Yocto项目的配置脚本来简化i.MX硬件平台的构建过程。具体解释如下:

  1. imx-setup-release.sh脚本

    • 这个脚本是NXP为简化i.MX开发板构建过程提供的工具。通过这个脚本,你可以轻松地设置构建环境,特别是对于使用Yocto项目的开发。
    • 你需要指定两个参数:
      • 机器名specific machine):即你要为哪个i.MX硬件平台构建操作系统映像。比如,在这个文档中,MCIMX6ULL-EVK就是一个机器的例子,它代表了i.MX6ULL评估板(EVK)。
      • 图形后台graphical backend):这表示你选择的图形系统(比如X11或者Wayland)作为目标板上的系统的显示后端。关于图形后台的详细介绍见 https://blog.youkuaiyun.com/wenhao_ir/article/details/145578517?
  2. meta-imx层和meta-freescale层

    • Yocto项目使用分层架构,meta-imxmeta-freescale是两个常见的层(Layer)。
    • meta-freescale是Freescale(现为NXP)提供的Yocto层,其中包含了多个平台的支持配置。
    • meta-imx是NXP为i.MX系列处理器提供的Yocto层,它会覆盖或扩展meta-freescale中的配置。也就是说,meta-imx层会根据i.MX处理器的特殊需求提供新的或更新的机器配置。
  3. 机器配置文件

    • 机器配置文件位于meta-freescale/conf/machine目录中。这些文件包含了特定硬件平台的配置信息,比如内核配置、驱动程序设置、启动脚本等。
    • imx-setup-release.sh脚本会将i.MX相关的机器配置文件复制到meta-freescale目录中,确保你的构建环境中能够找到正确的硬件平台配置。
    • meta-freescale/conf/machine目录的截图如下:
      在这里插入图片描述
  4. 更新和选择机器配置

    • 你可以选择支持的i.MX硬件平台的配置文件。文档提到,可以参考发布说明(release notes)或者查看machine目录来了解支持的最新机器配置。

小结:
这段话的核心是说明了如何通过imx-setup-release.sh脚本设置Yocto项目的构建环境,并选择适合的i.MX硬件平台配置。通过正确的机器配置文件,你可以为不同的i.MX开发板(例如i.MX6ULL)生成相应的系统镜像。

机器名列表

在这里插入图片描述
在这里插入图片描述
表中的imx6ull14x14evk是我们要进行构建的机器名(machine name),我为什么知道?因为百问网的PDF里说的我们就是要构建这个,哈哈。

发行版(distro)的配置说明

官方文档i.MX_Yocto_Project_User's_Guide.pdf中的相关说明如下:

Each build folder must be configured in such way that they only use one distro. Each time the variable DISTRO_FEATURES
is changed, a clean build folder is needed. Each graphical backend Frame Buffer, Wayland, and XWayland each have a distro
configuration. If no DISTRO file is specified, the XWayland distro is set up as default. Distro configurations are saved in the
local.conf file in the DISTRO setting and are displayed when the bitbake is running. In past releases, we used the poky distro
and customized versions and providers in our layer.conf but a custom distro is a better solution. When the default poky distro is
used, the default community configuration is used. As an i.MX release, we prefer to have a set of configurations that NXP supports
and has been testing.
Here are the list of DISTRO configurations. Note that fsl-imx-fb is not supported on i.MX 8 and fsl-imx-x11 is not
supported anymore.
• fsl-imx-wayland - Wayland weston graphics.
• fsl-imx-xwayland - Wayland graphics and X11. X11 applications using EGL are not supported.
• fsl-imx-fb - Frame Buffer graphics - no X11 or Wayland. Frame Buffer is not supported on i.MX 8.

在这里插入图片描述
这段话的核心内容是关于如何在Yocto项目中配置和使用发行版(distro),特别是在构建过程中如何选择不同的图形后台以及如何配置发行版。下面是对这段话的详细解释:

  1. 每个构建目录只能使用一个发行版(Distro)

    • 在Yocto项目中,每个**构建目录(build folder)**必须配置为只使用一个发行版(distro)。意思是你不能在同一个构建目录中同时使用多个发行版配置。每次更改发行版的设置时,都需要重新创建一个干净的构建目录。关于构建目录的详细说明见我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145579361
    • DISTRO_FEATURES:这个变量用于定义构建系统的特性(如图形支持、硬件支持等),每次更改它时都需要重新开始构建,通常意味着需要清空并重新构建整个目录。
  2. 图形后台与发行版配置的关系

    • Frame Buffer、Wayland、XWayland:这些是不同的图形后台,每个图形后台都有自己的发行版配置。例如:
      • fsl-imx-wayland:配置为使用Wayland(Weston)图形系统。这适用于需要现代图形系统支持的设备。
      • fsl-imx-xwayland:配置为使用Wayland和X11。它允许Wayland图形系统下运行X11应用程序,但不能使用X11的EGL渲染。
      • fsl-imx-fb:使用FrameBuffer进行图形显示,完全不使用X11或Wayland。这适合资源较少的设备,或者不需要复杂图形界面的场景。值得注意的是,FrameBuffer在i.MX 8平台上不受支持。
  3. 默认发行版配置

    • 默认发行版(XWayland):如果没有明确指定DISTRO文件,系统将默认使用fsl-imx-xwayland作为发行版。这是为了方便用户,不需要每次都手动指定发行版,默认就会使用支持Wayland和X11的配置。
  4. Distro配置存储和显示

    • 发行版的配置会保存在Yocto构建目录中的**local.conf**文件中的DISTRO变量中。每次在构建过程中,bitbake会读取这个配置并显示出来,确保构建系统使用的是正确的发行版设置。
    • 过去版本中,Yocto项目默认使用的是poky发行版,并通过layer.conf文件进行自定义。然而,使用**自定义发行版(custom distro)**更为推荐,因为这样可以避免频繁修改local.conf来设置版本和提供者,且自定义发行版能够更好地满足特定需求。
  5. 自定义发行版

    • 用户可以基于现有的发行版配置文件(如fsl-imx-waylandfsl-imx-xwaylandfsl-imx-fb)创建自己的自定义发行版。这使得用户可以定制自己的构建环境,无需修改local.conf文件来选择偏好的版本和提供者。自定义发行版配置提供了更灵活的定制选项。
  6. 总结

    • Distro配置:决定了构建环境的整体特性,尤其是图形系统(Wayland、X11、Framebuffer)的支持。
    • 每个构建目录只能有一个发行版配置,因此每次更改发行版时,需要清理并重新构建。
    • Yocto支持多种发行版配置,用户可以根据需求选择合适的图形后台,并可以根据现有配置创建自定义的发行版。

这段话的要点:

  • 在Yocto中,每个构建目录只能选择一个发行版。
  • 发行版决定了构建系统的图形支持,如Wayland、X11、Framebuffer等。
  • 用户可以自定义发行版配置,而不必每次修改local.conf
  • 默认情况下,如果不指定,fsl-imx-xwayland将作为默认发行版进行构建。

这段话的主要目的是解释如何选择和使用不同的发行版配置,以及如何在Yocto项目中进行图形系统的定制。

配置脚本imx-setup-release.sh的使用说明

官方文档i.MX_Yocto_Project_User's_Guide.pdf中的相关说明如下:

The syntax for the imx-setup-release.sh script is shown below:
$ DISTRO= MACHINE= source imx-setup-release.sh -b
DISTRO= is the distro, which configures the build environment and it is stored in meta-imx/meta-sdk/
conf/distro.
MACHINE= is the machine name which points to the configuration file in conf/machine in
meta-freescale and meta-imx.
-b specifies the name of the build directory created by the imx-setup-release.sh script.
When the script is run, it prompts the user to accept the EULA. Once the EULA is accepted, the acceptance is stored in
local.conf inside each build folder and the EULA acceptance query is no longer displayed for that build folder.
After the script runs, the working directory is the one just created by the script, specified with the -b option. A conf folder is created
containing the files bblayers.conf and local.conf.
NXP Semiconductors
Image Build
i.MX Yocto Project User’s Guide, Rev. L5.4.47_2.2.0, 30 September 2020
User’s Guide 7 / 22
The /conf/bblayers.conf file contains all the metalayers used in the i.MX Yocto Project release.
The local.conf file contains the machine and distro specifications:
MACHINE ??= ‘imx7ulpevk’
DISTRO ?= ‘fsl-imx-xwayland’
ACCEPT_FSL_EULA = “1”
The MACHINE configuration can be changed by editing this file, if necessary.
ACCEPT_FSL_EULA in the local.conf file indicates that you have accepted the conditions of the EULA.
In the meta-imx layer, consolidated machine configurations (imx6qpdlsolox.conf and imx6ul7d.conf) are provided for i.MX 6
and i.MX 7 machines. i.MX uses these to build a common image with all the device trees in one image for testing. Do not use these
machines for anything other than testing.
在这里插入图片描述
在这里插入图片描述

这段话主要解释了如何使用imx-setup-release.sh脚本来配置Yocto构建环境,创建一个新的构建目录,并配置相关的机器和发行版。这里涉及了多个关键概念和步骤,下面逐一详细解释:

  1. imx-setup-release.sh脚本的语法

    $ DISTRO=<distro name> MACHINE=<machine name> source imx-setup-release.sh -b <build dir>
    
    • DISTRO=:指定要使用的发行版(distro)配置文件。该配置文件定义了构建环境的特性,如支持的图形系统、硬件支持等。例如,fsl-imx-xwayland表示使用Wayland和X11图形系统。
    • MACHINE=:指定要为其构建的机器配置文件。机器配置文件定义了目标硬件平台的架构、处理器类型等。例如,imx7ulpevk表示选择基于i.MX7平台的开发板配置。
    • -b :指定构建目录(build directory)。这是imx-setup-release.sh脚本创建的目录,用来存放构建过程中的所有文件和结果。此目录将包含必要的配置文件,如bblayers.conflocal.conf

    这条命令的作用是启动imx-setup-release.sh脚本,并为特定的发行版和机器配置创建一个新的构建目录。

  2. EULA(最终用户许可协议)

    • 在运行imx-setup-release.sh脚本时,用户需要接受NXP的EULA(最终用户许可协议)。接受EULA后,local.conf文件中会记录这一接受信息,以后再次构建时不会再提示用户接受EULA。
    • ACCEPT_FSL_EULA = “1”:在local.conf文件中,这一行表示你已经接受了NXP的EULA,不会在之后的构建过程中再次提示。
  3. 生成的文件和目录结构

    • 当脚本运行后,会在指定的构建目录中创建一个**conf**文件夹,里面包含两个重要文件:
      • bblayers.conf:该文件列出了Yocto构建过程中使用的所有metalayers(即在Yocto中使用的不同层)。这些层提供了驱动、工具、功能等,是Yocto项目的构建基础。
      • local.conf:该文件包含了机器和发行版的配置选项,例如指定的机器和发行版,以及一些其他的构建选项(如是否接受EULA)。

    示例local.conf内容

    MACHINE ??= 'imx7ulpevk'
    DISTRO ?= 'fsl-imx-xwayland'
    ACCEPT_FSL_EULA = "1"
    
    • MACHINE ??= 'imx7ulpevk':指定了使用的机器配置(此处为i.MX7开发板配置)。
    • DISTRO ?= 'fsl-imx-xwayland':指定了使用的发行版配置(此处为fsl-imx-xwayland,即使用Wayland和X11图形系统)。
    • ACCEPT_FSL_EULA = "1":表示已经接受了NXP的EULA。
  4. 机器配置和自定义配置

    • i.MX 6和i.MX 7的联合配置:在meta-imx层中,提供了适用于i.MX6和i.MX7的一些联合机器配置文件(例如imx6qpdlsolox.confimx6ul7d.conf)。这些配置文件可以用来构建一个包含多个设备树的通用镜像,主要用于测试。
    • 这些配置仅限于测试用途,并不适用于生产环境。
  5. 如何自定义构建环境

    • imx-setup-release.sh脚本提供了一种简便的方式来设置Yocto构建环境。通过修改local.conf文件中的配置,你可以定制构建环境,包括选择不同的机器配置、发行版配置等。
    • 如果需要使用其他的机器配置或发行版,可以手动修改local.conf文件中的MACHINEDISTRO变量,或者在运行脚本时通过命令行参数进行指定。
  6. 总结

    • imx-setup-release.sh脚本的作用是为指定的机器和发行版配置一个干净的构建环境,并在指定目录下创建相关的配置文件。
    • 通过接受EULA,配置机器和发行版,用户可以为不同的硬件平台和需求定制Yocto构建环境。
    • 生成的local.confbblayers.conf文件是构建过程的核心配置文件,定义了构建所使用的层和配置。

这段话的核心目的是帮助用户理解如何通过imx-setup-release.sh脚本配置Yocto构建环境,设置机器配置和发行版,并通过local.conf文件管理和定制构建选项。

使用配置脚本imx-setup-release.sh进行构建配置

通过上面的说明和介绍,我们知道了imx-setup-release.sh脚本的语法:

$ DISTRO=<distro name> MACHINE=<machine name> source imx-setup-release.sh -b <build dir>

据此,我们可以写出使用配置脚本imx-setup-release.sh进行配置构建的命令。

不过首先要检查下目录/home/suwenhao/imx-yocto-bsp的所有者是不是suwenhao,运行下面这条命令查看:

ls -ld /home/suwenhao/imx-yocto-bsp

如果不是suwenhao这个用户拥有,比如下面这样是用户名ubuntu的用户拥有:
在这里插入图片描述
那就运行下面的命令更改下目录的所有者:

先切换回root用户:

exit

在这里插入图片描述
然后运行下面的命令:

sudo chown -R suwenhao:suwenhao /home/suwenhao/imx-yocto-bsp

在这里插入图片描述
然后再切回suwenhao用户:

su - suwenhao

此时再用命令:

ls -ld /home/suwenhao/imx-yocto-bsp

看下所有者:
在这里插入图片描述
发现这个目录属于用户suwenhao了。
在这里插入图片描述

然后就可利用脚本imx-setup-release.sh进行配置构建了,命令如下:

cd /home/suwenhao/imx-yocto-bsp
DISTRO=fsl-imx-fb MACHINE=imx6ull14x14evk source ./imx-setup-release.sh -b build-imx-fb

从这条命令中,我们知道发行版本我们的选择是DISTRO,机器名我们选择的是imx6ull14x14evk,构建目录的名字为build-imx-fb。发行版本、机器名、构建目录的概念上面都已经详细介绍了哈,只是要注意构建目录我是在上面的目录“发行版(distro)的配置说明”中介绍的。

命令执行过程中,我们需要按不断地按空格键阅读EULA(最终用户许可协议):
在这里插入图片描述
最后需要同意EULA(最终用户许可协议):
在这里插入图片描述
然后得到了下面的运行结果:
在这里插入图片描述

从这个运行结果我们可以看出,下一步就是运行命令:

bitbake <target>

来生成我们所需要的系统镜像等文件,关于这一个在后面的目录中来介绍。

注意:这里有个小细节,执行完脚本imx-setup-release.sh后目录从/home/suwenhao/imx-yocto-bsp 切换到/home/suwenhao/imx-yocto-bsp/build-imx-fb了,这说明命令:bitbake <target>是在目录/home/suwenhao/imx-yocto-bsp/build-imx-fb下执行。

这个运行结果还展示了我们配置的机器名(MACHINE)、SDKMACHINE、DISTRO(发行版本)。

现在我们去看下Build Folder(构建目录)build-imx-fb生成没有。
在这里插入图片描述
可见,构建目录build-imx-fb是生成了,看下它内部的结构:
在这里插入图片描述
在这里插入图片描述

我们看下文件local.conf的内容:
在这里插入图片描述
从中可以看到有我们设置的MACHINEDISTRO的信息。
而且还有构建过程中下载依赖的目录路径,如下:

DL_DIR ?= "${BSPDIR}/downloads/"

这也是为什么之前我们把文件imx-yocto-bsp.tar.gz上传并解压到目录/root/imx-yocto-bsp的原因。

U-boot的配置(非必需-在咱们这里使用默认配置)

如果不设置U-boot的配置,默认情况下,U-Boot构建将使用SD卡引导方式(即SD boot)。而我们这里正是用SD卡引导方式【注意SD卡引导方式不是eMMC方式,不要搞混了】,所以这里不用配置。

U-Boot configurations are defined in the main machine configuration file. The configuration is specified by using the
UBOOT_CONFIG settings. This requires setting UBOOT_CONFIG in local.conf. Otherwise, the U-Boot build uses SD boot
by default.
These can be built separately by using the following commands (change MACHINE to the correct target). Multiple U-Boot
configurations can be built with one command by putting spaces between U-Boot configurations.
The following are the U-Boot configurations for each boards. i.MX 6 and i.MX 7 boards support SD without OP-TEE and
with OP-TEE
• uboot_config_imx8mpevk=“sd fspi ecc”
• uboot_config_imx8mnevk=“sd fspi”
• uboot_config_imx8mmevk=“sd fspi”
• uboot_config_imx8mqevk=“sd”
• uboot_config_imx8dxlevk=“sd fspi”
• uboot_conifg_imx8dxmek=“sd fspi”
• uboot_config_imx8qxpc0mek=“sd fspi”
• uboot_config_imx8qxpmek=“sd fspi”
• uboot_config_imx8qmmek=“sd fspi”
• uboot_config_imx6qsabresd=“sd sata sd-optee”
• uboot_config_imx6qsabreauto=“sd sata eimnor spinor nand sd-optee”
• uboot_config_imx6dlsabresd=“sd epdc sd-optee”
• uboot_config_imx6dlsabreauto=“sd eimnor spinor nand sd-optee”
• uboot_config_imx6solosabresd=“sd sd-optee”
• uboot_config_imx6solosabreauto=“sd eimnor spinor nand sd-optee”
• uboot_config_imx6sxsabresd=“sd emmc qspi2 m4fastup sd-optee”
• uboot_config_imx6sxsabreauto=“sd qspi1 nand sd-optee”
• uboot_config_imx6qpsabreauto=“sd sata eimnor spinor nand sd-optee”
• uboot_config_imx6qpsabresd=“sd sata sd-optee”
• uboot_config_imx6sllevk=“sd epdc sd-optee”
• uboot_config_imx6ulevk=“sd emmc qspi1 sd-optee”
• uboot_config_imx6ul9x9evk=“sd qspi1 sd-optee”
• uboot_config_imx6ull14x14evk=“sd emmc qspi1 nand sd-optee”
• uboot_config_imx6ull9x9evk=“sd qspi1 sd-optee”
• uboot_config_imx6ulz14x14evk=“sd emmc qspi1 nand sd-optee”
• uboot_config_imx7dsabresd=“sd epdc qspi1 nand sd-optee”
• uboot_config_imx7ulpevk=“sd emmc sd-optee”
To build with any U-Boot configuration, perform the following steps.
With just one U-Boot configuration:
$ echo “UBOOT_CONFIG = “eimnor”” >> conf/local.conf
With multiple U-Boot configurations:
$ echo “UBOOT_CONFIG = “sd eimnor”” >> conf/local.conf
$ MACHINE= bitbake -c deploy u-boot-imx

在这里插入图片描述
在这里插入图片描述
这段话主要讲解了如何配置和构建i.MX6ULL平台上的U-Boot引导加载程序,特别是在Yocto构建环境中设置U-Boot配置。具体的步骤和相关配置文件的作用如下:

  1. U-Boot配置的定义

    • U-Boot配置在主机器配置文件中定义:在Yocto的构建过程中,U-Boot的配置是通过UBOOT_CONFIG来指定的。每个目标板(如i.MX6ULL平台)可以有不同的U-Boot配置。
    • 如果不设置UBOOT_CONFIG,默认情况下,U-Boot构建将使用SD卡引导方式(即SD boot)。
  2. 设置U-Boot配置

    • local.conf文件中设置UBOOT_CONFIG变量来指定U-Boot的配置。例如:
      • 单个配置:如果只使用一个U-Boot配置,可以在local.conf文件中写入如下配置:
        echo "UBOOT_CONFIG = \"eimnor\"" >> conf/local.conf
        
        这表示设置U-Boot配置为eimnor
      • 多个配置:如果需要同时使用多个U-Boot配置,可以将它们用空格分开,在local.conf文件中进行设置:
        echo "UBOOT_CONFIG = \"sd eimnor\"" >> conf/local.conf
        
        这表示选择sdeimnor这两个配置。
  3. 支持的U-Boot配置

    • 文中列出了多个适用于i.MX系列开发板的U-Boot配置。这些配置主要是不同引导方式的组合,包括SD卡、SATA、eMMC、QSPI、NAND和OP-TEE等。例如:
      • uboot_config_imx6qsabresd="sd sata sd-optee":这是针对i.MX6 SABRE板(imx6qsabresd)的配置,支持SD卡、SATA接口以及OP-TEE(一个硬件隔离的安全执行环境)。
      • uboot_config_imx6ull14x14evk="sd emmc qspi1 nand sd-optee":这是针对i.MX6ULL 14x14 EVK开发板的配置,支持SD卡、eMMC、QSPI、NAND和OP-TEE。

    这些配置选项指示了U-Boot如何与不同的硬件接口和引导方式进行交互,具体配置会根据不同的板子和硬件需求有所不同。

  4. 构建U-Boot

    • 设置好UBOOT_CONFIG后,可以使用Yocto的bitbake工具来构建U-Boot引导加载程序。
    • 构建步骤
      • 构建单个U-Boot配置
        运行以下命令来构建指定配置的U-Boot:
        MACHINE=<machine name> bitbake -c deploy u-boot-imx
        
        其中,<machine name>需要替换为目标板的机器名称,例如imx6ull14x14evk
      • 构建多个U-Boot配置
        如果你在local.conf中设置了多个U-Boot配置,可以在构建时同时应用多个配置。Yocto会根据配置列表编译相应的U-Boot。
  5. 总结

    • U-Boot配置:通过UBOOT_CONFIG设置,指定U-Boot的引导方式和支持的硬件接口。支持多种引导方式(如SD卡、eMMC、NAND等)和安全执行环境(如OP-TEE)。
    • 构建U-Boot:设置好UBOOT_CONFIG后,可以使用bitbake构建U-Boot,生成相应的引导镜像。
    • 配置举例:文中列举了不同板子(如i.MX6、i.MX7系列)的U-Boot配置,用户可以根据自己的硬件平台选择合适的配置。

通过这种配置和构建方式,Yocto可以灵活地为不同的i.MX硬件平台生成定制的U-Boot引导加载程序,满足各种硬件需求。

选择自己想生成的镜像并开始执行构建

官方文档i.MX_Yocto_Project_User's_Guide.pdf中的相关说明如下:
在这里插入图片描述
这张截图来自NXP的FSL Yocto Project Community BSP使用说明,列出了不同的Yocto项目镜像(image)以及它们的用途和对应的Yocto层。具体解释如下:

  1. core-image-minimal:这是一个小型的镜像,只允许设备启动,适用于需要最小化功能的系统,对应的Yocto层是Poky

  2. core-image-base:这是一个仅提供控制台的镜像,支持目标设备硬件,适合用于开发和测试,对应的Yocto层是Poky

  3. core-image-sato:该镜像包含Sato环境,Sato是一个针对移动设备的界面和视觉风格,支持Pimlico应用程序(如终端、文本编辑器和文件管理器),也由Poky层提供。

  4. imx-image-core:这是一个针对i.MX平台的镜像,包含i.MX的测试应用程序,主要用于Wayland的后端测试,对应的Yocto层是meta-imx/meta-sdk

  5. fsl-image-machine-test:这是FSL社区为i.MX平台提供的核心镜像,只有控制台环境,没有GUI,对应的Yocto层是meta-freescale-distro

  6. imx-image-multimedia:该镜像构建了一个带GUI但没有Qt内容的i.MX镜像,适用于多媒体应用,对应的Yocto层是meta-imx/meta-sdk

  7. imx-image-full:这是一个完整的镜像,基于Qt 5并具有机器学习功能。它支持i.MX SoC硬件图形功能,但不支持i.MX 6UltraLite和i.MX 6SL等芯片,对应的Yocto层是meta-imx/meta-sdk

这些镜像是基于Yocto项目进行构建的,可以根据开发需求选择不同的镜像来进行测试或开发。

根据百问网的教程,我们这里选择第6个imx-image-multimedia。但是我觉得开发板出厂时应该选的是第7个,因为确实里面带Qt啊。

然后在目录/home/suwenhao/imx-yocto-bsp/build-imx-fb下执行bitbake命令即可开始构建,bitbake命令的格式和命令说明如下:
在这里插入图片描述

接下来我们开始准备执行构建命令。

首先咱们得用Vultr提供的VNC控制台进行操作,因为这个构建过程需要几天才能完成,必须要一个可靠的不中断的控制台才可以。

在这里插入图片描述
在这里插入图片描述
填密码和命令的时候通过下图中的剪贴板来填:
在这里插入图片描述
首先切换到用户suwenhao

su - suwenhao

在这里插入图片描述
本来在上面执行脚本imx-setup-release.sh后,就已经设置好了相关的环境变量,但是因为重新打开了终端(shell),所以环境变量失效了,所以这里可以把配置文件删除,然后重新运行下脚本imx-setup-release.sh
在这里插入图片描述

首先进入目录 imx-yocto-bsp

cd /home/suwenhao/imx-yocto-bsp

然后就可利用脚本imx-setup-release.sh进行配置构建了,命令如下:

DISTRO=fsl-imx-fb MACHINE=imx6ull14x14evk source ./imx-setup-release.sh -b build-imx-fb

命令执行过程中,我们需要按不断地按空格键阅读EULA(最终用户许可协议):
在这里插入图片描述
最后需要同意EULA(最终用户许可协议):
在这里插入图片描述
然后得到了下面的运行结果:
在这里插入图片描述
可见目录也自动切换到/home/suwenhao/imx-yocto-bsp/build-imx-fb中了。

然后运行下面的命令开始构建:

bitbake imx-image-multimedia

在这里插入图片描述
据说这个构建需要几天才能完成…那就慢慢等吧~
在这里插入图片描述
然后刚开始运行就出现警告了,为了能清晰地看到输出信息并复制输出信息,我又切回了SecureCRT来运行一次,警告如下:
在这里插入图片描述

WARNING: Host distribution “ubuntu-20.04” has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.

这句话的意思如下:
这个警告信息的意思是:你正在使用的 主机操作系统(Host distribution) 是 Ubuntu 20.04,而该版本的 Yocto 构建系统 没有专门验证过在 Ubuntu 20.04 上运行。因此,尽管 Yocto 很可能在 Ubuntu 20.04 上可以正常运行,但因为没有经过正式验证,可能会出现意料之外的错误或不兼容的情况。

不过这个警告可以忽略,因为我们也不知道官方在哪个版本上验证过呀,官方对系统的要求前面已经说过了,如下:
在这里插入图片描述
可见,只要18.04以上就行嘛。

当然,很快,就传来严重错误而不得不终止构建,具体情况如下:
当然,很快,就传来严重错误而不得不终止构建,具体情况如下:
在这里插入图片描述

fatal: unable to access ‘https://source.codeaurora.org/external/imxsupport/nxp-demo-experience/’: Could not resolve host: source.codeaurora.org

可见,还是和从git上下载代码时一样的问题,即相关的源已经无法连接了,我们再次用curl命令来测试一下:

curl https://source.codeaurora.org/

在这里插入图片描述
这里要说明下,为什么明明我已经把编译过程中需要下载的文件都上传上去了,仍然需要去连接下载源?这是因为它连接好后才会去检测是否已经下载好了文件,如果下载好了,就跳过,没下载好,再下载。

所以现在就没办法了,那就只好用百问网提供的编译好的结果了。

假如这里一切顺利,成功构建编译的话,会有下面的输出:
在这里插入图片描述
并且在目录/home/suwenhao/imx-yocto-bsp/build-imx-fb/tmp/deploy/images/imx6ull14x14evk下会有下面这此文件:
在这里插入图片描述
可见里面有设备树文件、根文件系统、u-boot、内核镜像文件(zImage)。有这些文件,整个嵌入式系统就可以启动了。

接下来,我们把生成的镜像写到SD卡中。

镜像写到SD卡

镜像文件的说明

这个步骤中我们把百问网提供的FSL Yocto Project Community BSP构建结果中的镜像文件imx-image-full-imx6ull14x14evk-20201209093926.rootfs.wic烧写到SD卡,然后利用SD卡启动整个Linux系统。
注意:文件imx-image-full-imx6ull14x14evk-20201209093926.rootfs.wic并不是根文件系统,它实际上是一个包含Bootloader、内核、设备树、根文件的镜像文件,后面的20201209093926.rootfs只是作为根文件的版本标记,它其实是构建时间的时间戳。
但是文件imx-image-full-imx6ull14x14evk-20201209093926.rootfs.tar.bz2就只是根文件系统,通过两个文件的大小对比我们可以明显看出:
在这里插入图片描述
从上图中我们可以看出,因为文件imx-image-full-imx6ull14x14evk-20201209093926.rootfs.wic是完整镜像文件,所以大小为1.24GB。而文件imx-image-full-imx6ull14x14evk-20201209093926.rootfs.tar.bz2因为只是根文件系统,所以只有195.73MB。
文件imx-image-full-imx6ull14x14evk-20201209093926.rootfs.tar.bz2是一个压缩文件,它并不是镜像文件,解压之后如下图所示:
在这里插入图片描述

为什么是写到SD卡,而不是eMMC中

还有个问题,为什么是写到SD卡,而不是eMMC中?因为写到SD卡是最简单的呀,直接SD卡插到读卡器中,然后插到系统为Windows的PC主机上,就可以用相关的工具写了,其它的都需要板子上本身写入了相关的程序或工具才行。
并且当我们把这个镜像写到SD卡,并以SD卡启动开发板后,我们就可以利用这个镜像将我们真正要写到板子中的镜像写到eMMC存储器中了。
注意:这个镜像文件imx-image-full-imx6ull14x14evk-20201209093926.rootfs.wic在百问网提供的开发板上运行肯定有很多错误,很多硬件是无法正常初始化的,但这个不重要,重要的是我们后面会利用这个镜像将真正合格的镜像写到eMMC中。相当于镜像写到SD卡只是我们最终写入合格镜像的一个中间跳板步骤。

镜像写到SD卡中的具体方法

具体的写入方法我另写一篇博文,博文链接:https://blog.youkuaiyun.com/wenhao_ir/article/details/145619082

利用SD卡中的镜像启动系统并观察分析串口终端日志输出信息

PC上弹出U盘:
在这里插入图片描述
然后取出SD卡,插入到开发板上(注意:插入前请确认开发板开关处于关闭状态。)插入的方向如下图所示:
在这里插入图片描述
然后设置板子的启动方式为SD卡启动方式:
在这里插入图片描述
打开串口终端,按照博文(https://blog.youkuaiyun.com/wenhao_ir/article/details/130058229)设置下串口的颜色。【后来证实修改无用,在启动队段的日志信息不会显示出各种颜色】

再设置下串口终端保存多少信息,由500改为20000:
在这里插入图片描述

然后打开开发板的电源开关,通过串口观察启动 log 信息。
具体的启动log 信息记录到另一篇博文中,链接 https://blog.youkuaiyun.com/wenhao_ir/article/details/145641229

从日志输出中,我们可以确定的是在u-boot阶段,网卡无法正常初始化。
在这里插入图片描述
当然LCD也无法正常显示。

在内核启动阶段LCD无法正常显示,触摸屏也无法正常使用。

确定正常的是:SD卡正常,USB正常,串口输出正常…

表示USB正常的截图如下:
在这里插入图片描述
确认哪些硬件资源有问题后,我们就可以去找到FSL Yocto Project Community BSP中的u-boot源码和内核源码来进行修改适配。
不过这里有个问题,那就是教程中提供的日志表明能启动系统:
在这里插入图片描述
但是我的板子只能启动到下面这里:
在这里插入图片描述
我猜测原因是后面出厂的板子和之前不一样吧。

后续任务及相关博文

接下来的任务如下:
①找到FSL Yocto Project Community BSP中用到的u-boot源码并进行修改适配咱们的板子,相关的博文链接为:https://blog.youkuaiyun.com/wenhao_ir/article/details/145662136

②找到FSL Yocto Project Community BSP中用到Linux内核源码并进行修改适配咱们的板子,相关的博文链接为:(还没写好,写好了放过来…)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊虹AI笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值