i.MX Yocto Project User‘s Guide

i.MX Yocto Project User's Guide 

本文为博主翻译官方文章的其中一篇,如果需要Yocto官方其它资料的翻译版,可私信。在构建中遇到问题亦可私信交流!

1概述

本文档描述了如何通过使用Yocto项目构建系统,为i.MX的板卡构建镜像文件。它描述了i.MX相关的层和i.MX特定的使用方法。

Yocto项目是一个开源合作项目embedded Linux OS开发。欲了解更多有关Yocto项目,请查看Yocto项目网址:www.yoctoproject.org/。有几个文件是关于Yocto项目的网页,详细描述了如何使用系统。使用基本的Yocto项目而不使用i.MX发布layer,请按照Yocto项目快速启动文档,www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html

FSL Yocto项目社区是NXP之外的一个开发社区。在Yocto项目环境中为i.MX板提供支持。i.MX加入Yocto项目社区,并提供了一个基于Yocto项目框架的版本。一些特定的使用可以在社区网站上获得。该文档是社区BSP文档的扩展。

用于构建镜像的文件是分层存储的。层包含不同类型的定制和来自不同的来源。层中的一些文件叫做配方。Yocto项目配方中包含的机制检索源代码,构建并打包组件。下面的列表显示了此版本中使用的层

 i.MX release layer
 • meta-imx
 • meta-bsp - updates for meta-freescale, poky, and meta-openembedded 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.
 • meta-qt5: provides Qt5.
 • meta-timesys: provides Vigiles tools for monitoring and notification of BSP vulnerabilities (CVEs).

本文档中对层的引用适用于除meta imx之外的Yocto项目中的所有层。i.MX板的配置是在meta-imx和meta-freescale层中。这包括U-Boot、Linux内核和特定参考板细节。

i.MX提供了一个称为i.MX BSP 发行版的追加层,名为meta-imx,用于将新的i.MX版本集成到FSL Yocto项目社区BSP。

meta-imx层旨在为Yocto项目中现有的meta-freescale和meta-freescale发行版发布更新和新的Yocto项目配方和机器配置。

i.MX BSP发布层的内容是配方和机器配置。

在许多测试案例中,其他层实现配方或包含文件,i.MX发布层通过添加到当前配方或包含组件并使用补丁或源位置更新来提供对配方的更新。大多数i.MX发布层配方都非常小,因为它们使用社区提供的内容并更新每个新版本所需的内容其他层中不可用的包版本。

i.MX BSP发布层还提供了镜像配方,其中包括启动系统映像所需的所有组件,方便用户使用。组件可以单独构建,也可以通过一个镜像配方来构建,它将所有映像中所需的组件集成到一个构建过程中。可以通过i.MX公共git服务器访问i.MX内核和U-Boot版本。但是,有几个组件以包的形式在i.MX镜像上发布。基于包的配方从i.MX镜像(而不是git位置)中提取文件并生成所需的包。

扫描二维码关注公众号,回复: 12453381 查看本文章

1.1 End user licence agreement

在Freescale Yocto项目社区BSP的安装环境过程中,会显示NXP最终用户许可协议(EULA)。要继续使用i.MX专有软件,用户必须同意本许可证的条件。协议条款允许从i.MX镜像中解压包中构建Yocto项目。

注意

在安装过程中请仔细阅读此许可协议,因为一旦接受,i.MX Yocto项目环境中的进一步工作与此已接受的协议相关。

1.2 References

i. MX在软件中支持多个系列。以下是列出的系列和系列相关SOC。i.MX Linux®发行说明描述了当前版本中支持的SoC。过早的版本可能不支持。

• i.MX 6 Family: 6QuadPlus, 6Quad, 6DualLite, 6SoloX, 6SLL, 6UltraLite, 6ULL, 6ULZ • i.MX 7 Family: 7Dual, 7ULP • i.MX 8 Family: 8QuadMax • i.MX 8M Family: 8M Plus, 8M Quad, 8M Mini, 8M Nano • i.MX 8X Family: 8QuadXPlus, 8DXL, 8DualX

本版本包括以下参考和附加信息。

• i.MX Linux ® Release Notes (IMXLXRN) - Provides the release information. • i.MX Linux ® User's Guide (IMXLUG) - Contains the information on installing U-Boot and Linux OS and using i.MX-specific features. • i.MX Yocto Project User's Guide (IMXLXYOCTOUG) - Describes the board support package for NXP developmentsystems using Yocto Project to set up host, install tool chain, and build source code to create images. • i.MX Reference Manual (IMXLXRM) - Contains the information on Linux drivers for i.MX. • i.MX Graphics User's Guide (IMXGRAPHICUG) - Describes the graphics features. • i.MX Porting Guide (IMXXBSPPG) - Contains the instructions on porting the BSP to a new board. • i.MX VPU Application Programming Interface Linux ® Reference Manual (IMXVPUAPI) - Provides the reference information on the VPU API on i.MX 6 VPU. 快速开始指南包含了板上的基本信息和设置。他们在NXP的网站上。 • SABRE Platform Quick Start Guide (IMX6QSDPQSG) • SABRE Board Quick Start Guide (IMX6QSDBQSG) • i.MX 6UltraLite EVK Quick Start Guide (IMX6ULTRALITEQSG) • i.MX 6ULL EVK Quick Start Guide (IMX6ULLQSG) • SABRE Automotive Infotainment Quick Start Guide (IMX6SABREINFOQSG) • i.MX 7Dual SABRE-SD Quick Start Guide (SABRESDBIMX7DUALQSG) • i.MX 8M Quad Evaluation Kit Quick Start Guide (IMX8MQUADEVKQSG) • i.MX 8M Mini Evaluation Kit Quick Start Guide (8MMINIEVKQSG) • i.MX 8M Nano Evaluation Kit Quick Start Guide (8MNANOEVKQSG) • i.MX 8QuadXPlus Multisensory Enablement Kit Quick Start Guide (IMX8QUADXPLUSQSG) • i.MX 8QuadMax Multisensory Enablement Kit Quick Start Guide (IMX8QUADMAXQSG) • i.MX 8M Plus Evaluation Kit Quick Start Guide (IMX8MPLUSQSG) • i.MX 8DXL Multisensory Enablement Kit Quick Start Guide (IMX8DXLUSQSG)

在NXP官网上可获得以下文档: • i.MX 6 information is at nxp.com/iMX6series • i.MX SABRE information is at nxp.com/imxSABRE • i.MX 6UltraLite information is at nxp.com/iMX6UL • i.MX 6ULL information is at nxp.com/iMX6ULL • i.MX 7Dual information is at nxp.com/iMX7D • i.MX 7ULP information is at nxp.com/imx7ulp • i.MX 8 information is at nxp.com/imx8 • i.MX 6ULZ information is at nxp.com/imx6ulz

2 Features

i.MX Yocto项目发布层具有以下特点: • Linux kernel recipe

•内核配方位于recipes-kernel文件夹中,从i.MX git服务器下载的源代码中集成了一个i.MX内核。这是由项目中的配方自动完成的。

L5.4.24_2.1.0是为Yocto项目发布的Linux内核。 • U-Boot recipe

•U-Boot配方位于recipes-bsp文件夹中,从i.MX git服务器下载的源代码中集成了一个i.MX uboot-imx。

•针对i.MX 6、i.MX 7、i.MX 8设备的i.MX版本L5.4.24_2.1.0使用更新的v2020.04 i.MX U-Boot版本。这个版本还没有针对所有i.MX硬件进行更新。

•i.MX Yocto项目社区BSP使用U-Boot -fslc是主流的,但这只被U-Boot支持,而L5.4.24内核不支持。

•i.MX Yocto项目社区BSP经常更新U-Boot版本,所以随着新的U-Boot版本被集成到meta-freescale 层,以及来自i.MX U-Boot -imx版本的更新被集成到主流版本,上述信息可能会发生变化。 • Graphics recipes

•图形配方位于recipes- Graphics文件夹中。

•图形配方集成i.MX图形包发布。对于有GPU的i.MX板,imx-gpu-viv食谱为每个发行版框架缓冲区(FB)、XWayland、Wayland打包图形组件后端,和Weston合成(Weston)。只有i.MX 6和i.MX 7支持帧缓冲。

•Xorg-driver集成了xserver-xorg。

• i.MX package recipes

imx-lib、imx-test和firmware-imx位于recipes-bsp中,从i.MX镜像中提取并构建和打包到镜像配方中。

Multimedia recipes

多媒体配方存在于recipes-multimedia。配方包括imx-codec、imx-parser和imx-gst1.0插件,它们从i.MX镜像中提取并构建并打包到镜像配方中。为受限制的编解码器提供了一些配方。在i.MX镜像中没有这些的软件包。这些包可以单独使用。联系你的i.MX营销代表获得这些

• Core recipes

一些规则的配方,比如udev,提供了要部署在系统中的更新的i.MX规则。这些配方通常是策略的更新,仅用于定制。版本只在需要时提供更新。

• Demo recipes

演示配方位于元sdk目录中。这一层包含图像配方和定制配方,如触摸校准,或演示应用程序配方。

3 Host Setup

要在Linux主机上获得Yocto项目预期的目的,必须安装下面描述的包和实用程序。一个重要的考虑因素是主机所需的硬盘空间。例如,当在运行Ubuntu的机器,所需的最小硬盘空间大约是50 GB。建议至少120GB提供,这足以将所有后端编译在一起。推荐的最低Ubuntu版本是18.04或更高。Ubuntu 18.04 或者最新版的Ubuntu 支持Chromium V74,它需要将ulimit(打开的文件数量)增加到4098(可通过ulimit -n 4096 临时配置)。如果不使用Chromium ,Ubuntu 16.04就可以工作。16.04之前的早期版本可能会导致Yocto项目构建设置失败,因为它要求python版本只能从Ubuntu 12.04开始。更多信息请参见Yocto项目参考手册信息。

Ubuntu 16.04用户在为SDL构建过程中对错误进行了注释。要修正local.conf中的注释,可以在下面几行中添加#字符

 #PACKAGECONFIG_append_pn-qemu-native = " sdl"
 #PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"

3.1 Host packages

Yocto项目构建需要为Yocto项目下批量的构建安装一些包。去到Yocto项目快速启动,并检查必须为您的构建机器安装的包。

基本Yocto项目需安装的一些包是:

 $ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
 ​
 build-essential chrpath socat cpio python python3-pip python3-pexpect \
 ​
 python3- gitpython3 -jinja2 libegl1-mesa libsdl1.2-dev
 ​
 \pylint3 xterm

配置工具使用构建机器上的默认grep版本。如果有不同版本的grep

你的路径,它可能会导致构建失败。一种解决方法是将特殊版本重命名为不包含“grep”的内容。

3.2 Setting up the repo utility

Repo是一个构建在Git之上的工具,它使得管理包含多个存储库的项目变得更加容易,不需要在同一服务器上。Repo很好地补充了Yocto项目的分层特性,使用户可以更容易地向BSP添加自己的层。要安装“repo”实用程序,请执行以下步骤:

  1. 创建一个bin目录,在你的home目录下(用户目录)。

     $ 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
  1. 增加如下行代码到 ~/.bashrc ,以确保 ~/bin 目录在你的PATH变量里。

     export PATH=~/bin:$PATH

安装repo命令的另一个选择是使用Ubuntu包管理系统。命令是:

 1. Install to  /usr/bin/repo .
 2. Eliminates the need to create a  ~/bin directory.
 3. Eliminates the need to update  .bashrc .
     The repo Ubuntu package is available in 16.04 and later Ubuntu releases. See https://packages.ubuntu.com/

4 Yocto Project Setup

请参考如下命令,以确保git正确的设置。

 $ git config --global user.name "Your Name"
 $ git config --global user.email "Your Email"
 $ git config --list

i.MX Yocto Project BSP发行目录包含一个sources目录,其中包含用于构建一个或多个构建目录的方法,以及一组用于设置环境的脚本。

用于构建该项目的配方来自社区和i.MX。Yocto项目layers被下载到sources 目录。将设置用于构建项目的菜谱。下面的示例展示了如何下载i.MX Yocto项目社区BSP配方层。对于本例,将为项目创建一个名为imx-yocto-bsp的目录。任何名字都可以代替这个(imx-yocto-bsp)。

$ 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.24-2.1.0.xml
$ repo sync

注意: https://source.codeaurora.org/external/imx/imx-manifest/tree/?h=imx-linux-zeus 由一个列表显示该发新版本支持的所有清单文件。当这个过程完成时,源代码将被检出到imx-yocto-bsp/sources目录中。

可以使用命令repo sync定期执行repo同步,以更新到最新的代码。

如果在repo初始化过程中出现错误,请尝试删除.repo目录并再次运行repo初始化命令。在命令行输入repo init可以配置最新的补丁。

5 Image Build

这个里提供了详细的镜像构建过程的信息。

5.1 Build configurations

i.MX提供了脚本文件 imx-setup-release.sh,这个文件可以很简答的配置 i.MX的机器。

使用该脚本可以提供需构建的指定的机器以及后面所需的设置。该脚本为指定的机器设置了一个目录和配置文件。在meta-imx层, i.MX提供了一个新的或者升级的机器配置去覆盖meta-freescale中的机器配置。通过imx-setup-release.sh脚本文件将配置文件拷贝到meta-freescale/conf/machine目录中。下面是可以选择的i.MX机器配置文件。检查发布说明或机器目录以获得最新添加的内容。

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

每个构建目录必须配置为只使用一个发行版。每次更改变量DISTRO_FEATURES时,都需要一个空的构建文件夹。每个图形后端帧缓冲区、Wayland和XWayland都有一个发行版配置。如果没有指定发行版文件,xwayland发行版将被设置为默认版本。发行版配置保存在发行版设置中的local.conf中,并在bitbake运行时显示。在过去的版本中,我们在 layer.conf中提供了poky发行版和自定义版本,但是定制发行版是更好的解决方案。当使用默认的poky发行版时,使用默认的社区配置。作为一个i.MX发行版,我们希望有一组NXP的配置支持并一直在测试。下面是发行版配置的列表。注意,在i.MX 8上不支持fsl-imx-fb,并且不再支持fsl-imx-x11。

• 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.

欢迎用户基于其中一个版本创建他们自己的发行版文件来定制他们的环境,而无需更新local.conf来设置首选版本和提供程序。下面显示了imx-setup-release.sh脚本的语法。

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

DISTRO= <distro configuration name>发行版本的名字 ,配置构建环境并储存在 meta-imx/meta-sdk/conf/distro。 MACHINE= <machine configuration name>需要配置的机器的名字,在meta-freescale和meta-imx中指向conf/machine中的配置文件的机器名称。 -b <build di> 构建的目录, 指定由imx-setup-release.sh脚本创建的构建目录的名称。

当脚本运行时,它提示用户接受EULA。一旦接受EULA,接受将存储在每个构建文件夹的local.conf中,并且不再为该构建文件夹显示EULA接受查询。

脚本运行后,工作目录就是脚本刚刚创建的目录,用-b选项指定。创建一个包含bbler.conf和local.conf文件的conf文件夹。

这个<build dir>/conf/ bbler.conf文件包含了在i.MX Yocto项目版本中使用的所有metalayers。

conf文件包含机器和发行版规范:

MACHINE ??= 'imx7ulpevk'

DISTRO ?= 'fsl-imx-xwayland'

ACCEPT_FSL_EULA = "1"

如果需要,可以通过编辑此文件来更改机器配置。

conf文件中的ACCEPT_FSL_EULA表示您已经接受了EULA的条件。

在meta-imx层,为i.MX6和i.MX 7机器提供了统一的机器配(imx6qpdlsolox.conf和imx6ul7 .conf)。i.MX使用它们构建一个通用镜像,将所有设备树放在一个镜像中进行测试。除了测试之外,不要使用这些机器进行任何其他操作。

5.2 Choosing an i.MX Yocto project image

Yocto项目提供了一些可以在不同层上使用的镜像。Poky提供了一些镜像,meta-freescale和meta-freescale发行版提供了其他的镜像,而meta-imx层提供了附加的镜像配方。下表列出了各种关键镜像、它们的内容以及提供镜像配方的层。

Table 1. i.MX Yocto project images

Image name Target Provided by layer
core-image-minimal A small image that only allows a device to boot. Poky
core-image-base A console-only image that fully supports the target device hardware. Poky
core-image-sato An image with Sato, a mobile environment and visual style for mobile devices. The image supports a Sato theme and uses Pimlico applications. It contains a terminal, an editor and a file manager. Poky
imx-image-core An i.MX image with i.MX test applications to be used for Wayland backends. This image is used by our daily core testing. meta-imx/meta-sdk
fsl-image-machine-test An FSL Community i.MX core image with console environment - no GUI interface. meta-freescale-distro
imx-image-multimedia An FSL Community i.MX core image with console environment - no GUI interface. meta-imx/meta-sdk
imx-image-full Builds an opensource Qt 5 image with Machine Learning features. These images are only supported for i.MX SoCwith hardware graphics. They are not supported on the i.MX 6UltraLite, i.MX 6UltraLiteLite, i.MX 6SLL, and i.MX 7Dual. meta-imx/meta-sdk

5.3 Building an image

Yocto项目构建使用bitbake命令。例如,bitbake<component>构建命名组件。 每个组件构建都有多个任务,例如获取、配置、编译、打包和部署到目标rootfs。bitbake镜像构建按每个任务的依赖性顺序收集镜像和构建所需的所有组件。第一个构建的是工具链以及构建所需的工具。

以下命令是有关如何生成镜像的示例:

$ bitbake imx-image-multimedia

5.4 Bitbake options

用于构建镜像的bitbake命令是

bitbake<image name>

追加参数可用于下面描述的特定活动。Bitbake为开发单个组件提供了各种有用的选项。要使用bitbake参数运行,命令如下所示:

  bitbake<parameter><component>     

<component>是所需的生成包。下表提供了一些bitbake选项。

Table 2. Bitbake options

Bitbake paramater Description
-c fetch Fetches if the downloads state is not marked as done.
-c cleanall Cleans the entire component build directory. All the changes in the build directory are lost. The rootfs and state of the component are also cleared. The component is also removed from the download directory.
-c deploy Deploys an image or component to the rootfs.
-k Continues building components even if a build break occurs.
-c compile -f It is not recommended that the source code under the tmp directory is changed directly,but if it is, the Yocto Project might not rebuild it unless this option is used. Use this option to force a recompile after the image is deployed
-g Lists a dependency tree for an image or component.
-DDD Turns on debug 3 levels deep. Each D adds another level of debug.

5.5 U-Boot configuration

U-Boot配置在主机配置文件中定义。配置是使用UBOOT_CONFIG设置指定的。这需要在local.conf中设置UBOOT_CONFIG。否则,U-Boot构建默认使用SD 启动。可以使用以下命令(将MACHINE更改为合适的目标)分别构建它们。

Table 3. U-Boot configuration

U-Boot type Build setup Build command
U-Boot EIM-NOR $ echo "UBOOT_CONFIG = "eimnor"" >>conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot SPI- NOR $ echo "UBOOT_CONFIG = "spinor"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot NAND $ echo "UBOOT_CONFIG = "nand"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot SATA $ echo "UBOOT_CONFIG = "sata"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot Arm ® Cortex ® -M4 core $ echo "UBOOT_CONFIG = "m4fastup"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot QSPI1 $ echo "UBOOT_CONFIG = "qspi1"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot QSPI2 $ echo "UBOOT_CONFIG = "qspi2"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot eMMC $ echo "UBOOT_CONFIG = "emmc"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot M4 fastup $ echo "UBOOT_CONFIG = "m4fastup"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot EPDC $ echo "UBOOT_CONFIG = "epdc"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx
U-Boot FSPI $ echo "UBOOT_CONFIG = "fspi"" >> conf/local.conf $ MACHINE=<machine name> bitbake -c deploy u-boot-imx

5.6 Build scenarios

下面是各种配置的构建设置场景。

设置清单并使用以下命令填充Yocto项目层源代码:

$ 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.24-2.1.0.xml
$ repo sync

下面几节给出了一些具体的例子。使用自定义命令替换成指定机器的名字。

5.6.1 Frame Buffer image on i.MX 6QuadPlus SABRE-AI

$ DISTRO=fsl-imx-fb MACHINE=imx6qpsabreauto source imx-setup-release.sh –b build-fb
$ bitbake imx-image-multimedia

构建了一个具有帧缓冲后端多媒体镜像。

5.6.2 XWayland image on i.MX 8QuadXPlus MEK

$ DISTRO=fsl-imx-xwayland MACHINE=imx8qxpmek source imx-setup-release.sh -b build-xwayland
$ bitbake imx-image-full

构建了一个带有Qt 5和机器学习特性的XWayland镜像。要在不使用Qt 5和机器学习的情况下进行构建,可以使用imx-image-multimedia。

5.6.3 Wayland image on i.MX 8M Quad EVK

$ DISTRO=fsl-imx-wayland MACHINE=imx8mqevk source imx-setup-release.sh -b build-wayland
$ bitbake imx-image-multimedia

构建了一个Weston Wayland镜像,带多媒体不支持Qt 5。

5.6.4 Restarting a build environment

如果在建立了构建目录之后打开了一个新的终端窗口或者重新启动了机器,只需使用设置环境脚本设置环境变量并再次运行构建命令。不需要使用完整的imx-setup-release.sh脚本构建。

$ source setup-environment <build-dir>

5.6.5 Chromium Browser on XWayland, and Wayland

Yocto项目社区有针对带有GPU硬件的i.MX SoC的Wayland版本的chromium浏览器的chromium配方。注意,NXP不支持或测试来自社区的补丁。本节描述如何将Chromium集成到rootfs中,并启用WebGL的硬件加速。Chromium浏览器需要在imx-setup-release.sh脚本中自动添加了其他层,比如meta-browser。在XWayland或Wayland的local.conf中,向镜像中添加Chromium

注意:不支持X11。

CORE_IMAGE_EXTRA_INSTALL += "chromium-ozone-wayland"

5.6.6 Qt 5 and QtWebEngine browsers

Qt 5拥有商业和开源许可证。在Yocto项目中构建时,开放源码许可证是默认的。请务必理解这些许可之间的差异,并进行适当的选择。在开源许可证上开始自定义Qt 5开发之后,它不能与商业许可证一起使用。与法律代表一起,了解这些许可之间的差异。

有四种Qt 5浏览器可用。QtWebEngine浏览器可在以下网页找到:

• /usr/share/qt5/examples/webenginewidgets/StyleSheetbrowser • /usr/share/qt5/examples/webenginewidgets/Simplebrowser • /usr/share/qt5/examples/webenginewidgets/Cookiebrowser • /usr/share/qt5/examples/webengine/quicknanobrowser

那三种浏览器都可以通过转到上面的目录并运行在那里找到的可执行文件来运行。触摸屏可以通过添加参数-插件evdevtouch:/dev/input/event0到可执行文件来启用。

./quicknanobrowser -plugin evdevtouch:/dev/input/event0

QtWebengine将只工作在SoC与GPU图形硬件上的i.MX 6, i.MX 7和i.MX 8。 要在镜像中包含Qtwebengine,请将以下内容放到local.conf或镜像菜谱中。

IMAGE_INSTALL_append = "packagegroup-qt5-webengine"

5.6.7 NXP ® eIQ TM machine learning

meta-ml层集成了NXP eIQ机器学习,它以前是作为一个单独的meta-imx-machine学习层发布的,现在已经集成到标准的BSP镜像中(imx-image-full)。注意,许多特性都需要Qt 5。如果使用imx-image-full以外的其他配置,请在local.conf中放置以下文件:

IMAGE_INSTALL_append = "packagegroup-imx-ml"

5.6.8 Systemd

Systemd作为默认初始化管理器启用。要禁用systemd作为缺省值,请在fs -imx-preferred-env.inc文件中注释掉systemd部分。

5.6.9 Multilib enablement

对于i.MX 8,可以使用multilib配置支持在64位操作系统上构建32位应用程序。Multilib提供了使用不同目标优化或体系结构格式构建库的能力,并将这些库组合到一个系统镜像中。通过在local.conf文件中添加Multilib、DEFAULTTUNE和IMAGE_INSTALL声明来启用Multilib。

多库声明通常是lib32或lib64,需要在multilib_global_variant变量中定义,如下所示。

MULTILIBS = "multilib:lib32"

DEFAULTTUNE必须是此可选库类型的AVAILTUNES值之一,如下所示。

DEFAULTTUNE_virtclass-multilib-lib32 = "armv7athf-neon"

IMAGE_INSTALL将被添加到映像中,这是特定应用程序所需的32位库,如下所示:

IMAGE_INSTALL_append += "lib32-bash"

对于i.MX 8上的情况,构建32位应用程序支持需要在local.conf中使用以下语句。这个配置指定一个64位机器作为主机器类型,并添加了multilib:lib32,其中的库使用“armv7athf-neon”调优进行编译,然后在所有映像中包含lib32-包。

MACHINE = imx8mqevk

#Define multilib target

require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "armv7athf-neon"

#Add the multilib packages to the image

IMAGE_INSTALL_append = "lib32-glibc lib32-libgcc lib32-libstdc++"

5.6.10 OP-TEE enablement

OP-TEE需要三个组件:optee-os、optee-client和optee-test。此外,内核和U-Boot都有配置。opte -os在引导加载程序中,而OP-TEE client和test在rootfs中。

在此版本中默认启用OP-TEE。要禁用OP-TEE,请转到meta-imx/meta-bsp/conf/layer.conf文件,注释掉OP-TEE的DISTRO_FEATURES_append并取消注释删除的行。OP-TEE is enabled by default in this release. To disable OP-TEE, go to the meta-imx/meta-bsp/conf/layer.conf file and comment out the DISTRO_FEATURES_append for OP-TEE and uncomment the removed line.

5.6.11 Building Xen

Xen项目在i.MX 8QuadMax/QuadXPlus板上得到支持,提供的服务允许多个操作系统在具有硬件虚拟化功能的同一硬件上执行。要启用Xen构建,请在local.conf中添加以下命令行:

DISTRO_FEATURES_append = " xen"

要引导两个Yocto操作系统,需要在SD卡上创建三个分区(不少于16 GB)。第一个分区是FAT,用于保存Xen、镜像和imx8qm-mek-dom0.dtb。第二个和第三个分区用于保存Yocto rootfs。

在U-Boot阶段:

• To boot from the SD card, run  xenmmcboot .
• To boot from the network, run  xennetboot .

For how to use Xen, see the i.MX Linux® User's Guide (IMXLUG). For detailed Xen xl usage, see https://xenbits.xen.org/docs/unstable/man/xl.cfg.5.html.

5.6.12 Building Jailhouse

Jailhouse是一个基于Linux操作系统的静态分区管理程序。它支持i.MX 8M Plus, i.MX 8M Nano, i.MX 8M Quad EVK, i.MX 8M Mini EVK板。

要启用Jailhouse ,请在local.conf中添加以下代码:

DISTRO_FEATURES_append = " jailhouse"

在U-Boot中,运行' run jh_netboot '或' run jh_mmcboot '。它加载专用的DTB供Jailhouse使用。以i.MX 8M Quad为例,Linux操作系统启动后:

#insmod jailhouse.ko
#./jailhouse enable imx8mq.cell

For more details about Jailhouse on i.MX 8, see the i.MX Linux® User's Guide (IMXLUG).

5.6.13 Liri Desktop

Liri Yocto项目层集成了桌面解决方案。但是有一些限制,目前只工作在支持DRM视频显示支持的设备,如MX8,它使用2D渲染显示,所以一些i.MX 8设备,如i.MX 8M Mini,没有2D GPU加速将会降低性能。

要集成使用liri清单。按照i.MX Liri自述上的说明操作

注意

删除meta-imx-liri中的weston udev规则将改变xwayland上imx-image-full的行为,因为weston将不会在引导时出现

5.6.14 Package Management

Yocto项目的默认包管理是rpm。i.MX发行版现在启用了debian作为包管理。通过将PACKAGE_CLASSES设置为package_rpm添加到local.conf中(或者创建一个不带debian包提要的自定义发行版),可以很容易地关闭这个功能。PACKAGE_CLASSES = "package_rpm",追加了debian软件包提要,sources.list可以添加/etc/apt,链接到Debian的包提要中。这允许用户安装镜像中没有提供的包,而不必将它们添加到yocto映像中。由于这个包提要不是由i.MX Yocto构建过程生成的,因此不能保证每个包都能使用正确的依赖项,但它允许提供更简单的工具。复杂且对特定版本有更多依赖的软件可能与外部包提要有问题。

6 Image Deployment

完整的文件系统镜像被部署到<build directory>/tmp/deploy/images。在大多数情况下,镜像特定于环境设置中设置的机器。每个映像构建都根据机器配置文件中定义的IMAGE_FSTYPES创建一个U-Boot、一个内核和一个镜像类型。大多数机器配置都提供SD卡镜像和一个rootfs image(.tar)。SD卡映像包含一个适合引导相应硬件的分区映像(带有U-Boot、kernel、rootfs等)。

6.1 Flashing an SD card image

SD卡映像文件.wic包含一个适合引导相应硬件的分区镜像(带有U-Boot、kernel、rootfs等)。要刷新SD卡镜像,请运行以下命令:

$ bunzip2 -dk -f <image_name>.wic.bz2

$ sudo dd if=<image_name>.wic of=/dev/sd<partition> bs=1M conv=fsync

有关闪存的更多信息,请参阅i.MX Linux®用户指南(IMXLUG)中的“准备启动SD/MMC卡”一节。对于NXP eIQ机器学习应用程序,需要额外的空闲磁盘空间(大约1 GB)。它的定义是在Yocto构建过程之前将IMAGE_ROOTFS_EXTRA_SPACE变量添加到local.conf文件中。

7 Customization

有三种场景可以在i.MX Linux OS上构建和定制:

•建立i.MX Yocto项目BSP,并在i.MX参考板上验证。本文档中的说明详细描述了这种方法。

•使用内核和U-Boot自定义内核和创建自定义板和设备树。有关如何构建SDK以及如何在Yocto项目构建环境之外设置用于构建内核和U-Boot的主机的详细信息,请参阅i.MX用户指南(IMXLUG)中的4.5.12章如何在独立环境中构建U-Boot和内核。

•通过创建自定义的Yocto项目层,定制一个添加或删除为i.MX Linux发行版提供的BSP打包的发行版。i.MX提供了多个演示示例,在Code Aurora论坛的i.MX git存储库上使用AGL、Genivi、IOT网关和XBMC在i.MX BSP发行版上展示了一个自定义层。本文档的其余部分提供了创建自定义发行版和板配置的说明。

7.1 Creating a custom DISTRO

自定义发行版可以配置自定义生成环境。发布的发行版文件fsl-imx-x11、fsl imx wayland、fsl imx xwayland和fsl imx fb都显示了specific graphical backends的配置。发行版还可以用于配置其他参数,如kernel、uboot和gstreamer。i.MX发行版文件设置为创建测试i.MX Linux操作系统BSP所需的自定义构建环境释放。它建议每个客户创建自己的发行版文件,并使用该文件为其生成环境设置提供程序、版本和自定义配置。发行版是通过复制现有发行版文件或包含一个追加了额外更改的poky.conf文件,或包含了一个使用i.MX发行版并将其作为起点的发行版。

7.2 Creating a custom board configuration

正在开发参考板的供应商可能想要将他们的板添加到FSL社区BSP中。有了FSL社区BSP支持的新机器,就可以很容易地与社区共享源代码,并允许从社区获得反馈。Yocto项目使得为一个新的基于i.MX的板构建和共享BSP变得很容易。当Linux OS内核和引导加载程序正在工作并针对该机器进行测试时,应该启动upstreaming process。一个稳定的Linux内核和引导加载程序(例如,U-Boot)的机器配置文件是非常重要的。

另一个重要的步骤是确定新机器的维护人员。维护人员负责保持主板上的一组主要包的工作。机器维护人员应该更新内核和引导加载程序,并为该机器测试用户空间包。有关机器维护者角色的更多信息,请参见FSL Community BSP Release Notes 2.4。

1.根据需要定制内核配置文件。内核配置文件在arch/arm/configs,供应商中的位置内核配方应该自定义通过内核菜谱加载的版本。

2.根据需要定制U-Boot。请参阅i.MX BSP移植指南(IMXBSPPG)以获得有关这方面的详细信息。

3.指派专人担任董事会维护者。这个人根据需要更新文件,确保系统可一直构建。有关更多信息,请参见FSL Community BSP Release Notes 2.4文档。

4.按照Yocto项目社区说明中的描述设置Yocto项目构建,如下所示。使用社区主分支。

a.根据您的主机Linux操作系统发行版从Yocto Project Quick Start 下载所需的主机包。

b.使用命令下载repo:

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

c.创建一个目录来保存所有内容。可以使用任何目录名。本文档使用的是fsl-community-bsp。

$mkdir fsl-community-bsp

d. $ cd fsl-community-bsp

e.用存储库的主分支初始化repo。

$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b master

f.获取将要用于建造的配方。

$ repo sync

g.设置环境:

$ source setup-environment build

5.在fsl-community-bsp/sources/meta-freescale-3rdparty/conf/machine中选择一个类似的机器文件并复制它,使用它代表您的板的名称。用有关您的板的信息编辑新的板文件。至少更改名称和描述。添加MACHINE_FEATURE。参考www.yoctoproject.org/docs/2.1/ref-manual/ref-manual.htm#ref-features-machine

6.在最新的社区主分支中测试您的更改,确保一切正常运行。至少使用core-image-minimal进行验证。

$bitbake core-image-minimal

7.准备补丁。请遵循www.openembedded.org/wiki/Styleguide和git.yoctoproject.org/cgit/cgit.cgi/meta-freescale/tree/README。

8.在第三方meta-freescale-3rdparty。向上游发送补丁到[email protected]

7.3 Monitoring security vulnerabilities in your BSP

监视BSP中的安全漏洞

监控常见的漏洞和暴露(CVE)可以从Timesys完成NXP启用警戒工具。Vigiles是一个漏洞监控和管理工具,提供目标镜像构建时Yocto CVE分析。它通过收集关于Yocto项目BSP中使用的软件的元数据,并将其与CVE数据库进行比较,CVE数据库集成了来自各种来源的CVE信息,包括NIST、Ubuntu和其他。

返回检测到的漏洞的高级概述,和影响cve的完整详细分析,它们的严重性和可用的修复程序可以在线查看。

要在线访问报告,请通过以下链接注册您的NXP Vigiles帐户:

https://www.timesys.com/register-nxp-vigiles/

关于设置和执行Vigiles的附加信息可以在这里找到:

https://github.com/TimesysGit/meta-timesys

https://www.nxp.com/vigiles

7.3.1 Configuration

把meta-timesys追加你BSP构建目录下conf/bblayers.conf配置文件中。

使用如下格式进行meta-timesys的追加

BBLAYERS += "${BSPDIR}/sources/meta-timesys"

在conf/local.conf中追加vigiles来继承变量:

INHERIT += "vigiles"

7.3.2 Execution

一旦将meta-timesys添加到您的构建中,Vigiles就会在每次使用Yocto构建Linux BSP时执行一次安全漏洞扫描。不需要其他命令。每次构建完成后,漏洞扫描信息存储在imx-yocto-bsp/<build dir>/vigiles目录中。

您可以通过以下方式查看安全扫描的详细信息:

• Command line (summary) • Online (details)

只需打开标题为<image name>-report.txt的文件,其中包括链接到详细的在线报告。

附录A 常见问题

A.1 Quick Start

本节总结如何在Linux机器上设置Yocto项目并构建映像。详细的扩展在上面的章节中有详细的解释。 Install the repo utility: $ sudo apt-get install repo To get the BSP you need to have "repo" installed. This only needs to be done once.

为了获得BSP你必须进行 "repo"的安装,这个过程仅需执行一次。

$: mkdir ~/bin $: curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $: chmod a+x ~/bin/repo $: PATH=${PATH}:~/bin 下载BSP Yocto Project 的环境。

在repo init的-b选项中使用所需版本的正确名称。这对于每个版本都需要执行一次,并为第一步中创建的目录设置分发版。可以运行repo同步将源下的配方更新为最新版本。 $: 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.24-2.1.0.xml $: repo sync

注意: https://source.codeaurora.org/external/imx/imx-manifest/tree/?h=imx-linux-zeus

该网址列出了这个发行版所支持的清单。

不支持特定后端MX8 Framebuffer的设置。仅对MX6和MX7 SoC使用这些。

Setup for FB

$: DISTRO=fsl-imx-fb MACHINE=<machine name> source imx-setup-release.sh -b build-fb

Setup for Wayland

$: DISTRO=fsl-imx-wayland MACHINE=<machine name> source imx-setup-release.sh -b build-wayland

Setup for XWayland

$: DISTRO=fsl-imx-xwayland MACHINE=<machine name> source imx-setup-release.sh -b build-xwayland

Build For All Backends 构建不含QT的镜像 $: bitbake imx-image-multimedia 构建成带QT5并且具有机器学习特性的镜像 $: bitbake imx-image-full

A.2 Local configuration tuning 优化本地配置

Yocto项目的构建在时间和磁盘使用方面可能会占用大量的构建资源,特别是在多个构建目录中构建时。有一些方法可以对此进行优化,例如,使用共享的sstate缓存(缓存构建的状态)和下载目录(保存下载的包)。这些可以设置在local.conf文件的任何位置,添加如

DL_DIR="/opt/freescale/yocto/imx/download"
SSTATE_DIR="/opt/freescale/yocto/imx/sstate-cache"

目录需要已经存在并具有适当的权限。当设置多个构建目录时,共享的sstate会有所帮助,每个构建目录都使用共享缓存来最小化构建时间。共享的下载目录减少了获取时间。如果没有这些设置,Yocto将默认投射到sstate缓存和下载的构建目录中。

在DL_DIR目录下下载的每个包都用<package name>.done 标记。如果网络在获取包时出现问题,您可以手动将包的备份版本复制到DL_DIR目录,并用touch命令创建<package_name>.done文件。然后运行bitbake命令:bitbake <component>。

有关更多信息,请参见Yocto项目参考手册。

A.3 Recipes 配方

每个组件都是使用配方构建的。对于新组件,必须创建配方以指向源(SRC_URI)并指定补丁(如果适用的话)。Yocto项目环境从配方中SRC_URI指定位置的makefile构建。当从自动工具建立构建时,配方应该继承autotools和pkgconfig。

makefile必须允许交叉编译工具覆盖CC,才能用Yocto项目构建包。

有些组件有配方,但需要额外的补丁或更新。这可以通过使用bbappend配方来完成。这将追加到关于已更新源的现有配方的详细信息。例如,包含新补丁的bbappend配方应该包含以下内容:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += file://<patch name>.patch

FILESEXTRAPATHS_prepend告诉Yocto项目在列出的目录中查找SRC_URI中列出的补丁。

请注意

如果没有拾取bbappend配方,请查看工作文件夹下的fetch log file (log.do_fetch) ,以检查是否包含相关的补丁。有时使用的是配方的git版本,而不是bbappend文件中的版本。

A.4 How to select additional packages 如何选择追加的包

如果为该包提供了一个配方,则可以向镜像追加其他包。社区提供的菜谱可在layers.openembedded.org/上找到。您可以通过搜索查看应用程序是否已经有Yocto项目菜谱,并找到从哪里下载它。

A.4.1 Updating an image

镜像是一组包和环境配置。

镜像文件(如imx-image-multimedia.bb)定义了文件系统内部的包。在根文件系统、内核、模块和U-Boot二进制文件在build/tmp/deploy/images/<machine name>中可用。

请注意

您可以构建包而不将其包含在镜像中,但是如果希望在rootfs上自动安装包,则必须重新构建镜像。

A.4.2 Package group

包组是可以包含在任何映像中的一组包。 包组可以包含一组包。例如,一个多媒体任务可以根据机器来确定是否构建了VPU包,这样就可以对BSP所支持的每一块板子自动选择多媒体包,而镜像中只包含多媒体包。

可以通过在<build dir>/local.conf中添加以下行来安装其他包。

CORE_IMAGE_EXTRA_INSTALL += "<package_name1 package_name2>"

有许多包组。它们位于名为“packagegroup”或“packagegroups”的子目录中。

A.4.3 Preferred version

首选版本用于指定要为特定组件使用的配方的首选版本。组件可能在不同的层中有多个配方,并且首选版本指向要使用的特定版本。在meta-imx层,即layer.conf中,为所有菜谱设置了首选版本,以便为生产环境提供静态系统。这些首选的版本设置用于正式的i.MX发行版,但对未来的开发不是必需的。当以前的版本可能会导致关于应该使用哪个配方的混乱时,首选版本也有帮助。例如,以前的imx-test和imx-lib使用了一年一个月的版本控制,现在已经改成了<kernel-version>版本控制。如果没有首选版本,可能会选择较旧的版本。通常会选择具有git版本的配方,除非设置了首选版本。PREFERRED_VERSION< component&gt _< soc family>= " & lt; version> "

例如,imx-lib应该是:PREFERRED_VERSION_imx-lib_mx6 = ""

有关使用首选版本的更多信息,请参阅Yocto项目手册。

A.4.4 Preferred provider

首选提供程序用于指定特定组件的首选提供程序。一个组件可以有多个提供者。例如,Linux内核可以由i.MX或kernel.org提供,首选提供者声明要使用的提供者。 例如,U-Boot由社区通过denx.de和i.MX提供。社区提供程序由u- boot-fslc指定。i.MX提供程序由u-boot-imx指定。要声明首选提供程序,请在local.conf中追加以下内容:

PREFERRED_PROVIDER_<component>_<soc family> = "<provider>"
PREFERRED_PROVIDER_u-boot_mx6 = "u-boot-imx"

A.4.5 SoC family

SoC系列记录了应用于特定系统芯片集的一类更改。在每个机器配置文件中,都将机器与特定的SoC家族一起列出。例如,i.MX6DualLite sabr - sd被列在i.MX6和i.MX6DualLite SoC家族中。i.MX 6Solo sabr -auto被列在i.MX 6和i.MX 6Solo SoC家族中。有些更改可以针对local.conf中的特定SoC家族来覆盖机器配置文件中的更改。下面是对mx6dlsabresd内核设置进行更改的示例。

KERNEL_DEVICETREE_mx6dl = " imx6dl-sabresd.dts "

当进行只针对某一类硬件的更改时,SoC系列是有用的。例如,i.MX 28 EVK没有视频处理单元(VPU),所以VPU的所有设置都应该使用i.MX 5或i.MX 6来特定于正确的芯片类别。

A.4.6 Bitbake logs

Bitbake在tmp/work/<architecture>/<component>/temp目录中记录构建和打包过程

如果组件无法获取包,则在log.do_fetch文件中显示错误的日志。

如果组件编译失败,则在log.do_compile文件中显示错误的日志。

有时候,组件没有按预期部署。检查构建组件目录下的目录(tmp/work/<architecture>/<component>)。检查每个配方的包、包分割和sysroot*目录,看看文件是否放在那里(在复制到部署目录之前,它们处于暂存状态)。

A.4.7 How to add a mechanism for CVE monitoring and notification

CVE跟踪机制可以从GITHUB获取。导航到imx-yocto-bsp/sources目录。发出以下命令:git克隆https://github.com/TimesysGit/meta-timesys.git -b zeus该命令将下载一个额外的metalayer ,metalayer 提供用于生成镜像清单的脚本,用于安全监控和通知,是NXP和Timesys的Vigiles产品提供的一部分。请遵循7.3节关于如何使用解决方案。访问完整的CVE报告需要LinuxLink许可密钥。如果在开发环境中没有这个,Vigiles将继续以演示模式执行,只生成摘要报告。在LinuxLink上登录您的Vigiles帐户(或者创建一个,如果您还没有:https://www.timesys.com/register-nxp-vigiles /),访问您的首选项并生成一个新的密钥。将密钥文件下载到您的开发环境。使用以下语句指定密钥文件在Yocto s conf/local.conf文件中的位置:

VIGILES_KEY_FILE = "/tools/timesys/linuxlink_key

附录B 参考

有关引导开关的详细信息,请参阅i.MX Linux®用户指南(IMXLUG)中的“如何引导i.MX板”一节。 •关于如何使用U-Boot下载镜像,请参阅i.MX Linux®中的“使用U-Boot下载图像”一节

用户指南(IMXLUG)。 •关于如何设置SD/MMC卡,请参阅i.MX Linux®用户的“准备启动SD/MMC卡”一节

猜你喜欢

转载自blog.csdn.net/u013921164/article/details/110945699
今日推荐