IMX6Q yocto工程

  • Post author:
  • Post category:其他


1简介

1.1 yocto工程介绍



摘抄自维基百科:



https://zh.wikipedia.org/wiki/Yocto%E8%A8%88%E5%8A%83



Yocto计划

(英语:Yocto Project™),一个

自由软件

项目计划,由

Linux基金会

于2010年宣布,这个计划的目标在于创造出可以提供

嵌入式


linux发行版

的软件工具,以改善软件发展流程。2011年3月,这个计划与

OpenEmbedded

计划结合,以OpenEmbedded-Core计划作为计划的另一个名称。

它提供跨平台工具、元数据以及流程以利于快速和可复制的开发Linux嵌入式系统。

Yocto项目主要由三个组件组成:

BitBake:读取配置档与处方档(recipes)并运行,配置与建置所指定的应用程序或者系统文件映像档。

OpenEmbedded-Core:由基础layers所组成,并为处方档(recipes),layers与classes的集合:这些要素都是在OpenEmbedded系统中共享使用的。

Poky:是一个参考系统。是许多案子与工具的集合,用来让用户延伸出新的发行版(Distribution)。

1.2 IMX工程介绍

很多大厂都加进如yocto工程,NXP也不例外。

优点是

在这里用户可以快速简洁地构建自己的系统,玩过linux的朋友都知道移植软件是一件十分痛苦的事,小的软件倒还好,如像OpenCV等一些依赖库较多的软件,各式各样的错误往往会让我们移植到崩溃。而yocto工程让移植变得相对无脑,我们无需再手动移植,因为常见只需要在配置文件中添加对应软件名称,yocto会自行根据工程里的配置自动下载,配置,编译,安装,并压缩成文件系统。

缺点是

你需要准备一个大一点的硬盘(编译完可能要100G+)和大内存(8G内存再加上了18G的交换分区),最好CPU的性能也要好点(当然,如果不嫌弃编译慢也可以),除了上述之外,yocto需要下载很多的软件包因为国内网络环境原因会下得很慢,甚至有可能下载不下来。

在此选择搭建IMX6Q环境构建Linux4.19.35系统镜像,跑起来的资源占用大概如下图所示。

2参考文档


NXP:

i.MX_Yocto_Project_User’s_Guide


,Rev. L4.19.35_1.1.0, 11/2019

3环境搭建

建议搭建docker容器去编译该工程(docker相关使用可以看小程序“Docker从入门到实践”),防止该工程影响当前使用的环境,当然直接搭建也是可以的。

在此使用的编译环境为Ubuntu,要求的版本为18.04或者更新的版本。

具体安装操作可以查看参考文档中的yocto文档。

3.1安装需要的工具

apt-get update
apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

apt-get update \
    && apt-get -y dist-upgrade \
    && apt-get -y upgrade

basicPkgs='vim htop tree dnsutils zip sed cvs subversion openjdk-8-jdk make gcc g++ autoconf automake curl python2.7 python-dev python-pysqlite2 python-minimal python3-dev python3-pip python3-sphinx libfreetype6-dev libjpeg8-dev texlive-fonts-recommended texlive-latex-extra zlib1g-dev fonts-liberation cpio libgl1-mesa-dev libglu1-mesa-dev xterm tmux libncurses5-dev libncursesw5-dev libssl-dev bison libbison-dev bc lzop libgtk-3-dev graphviz net-tools '

dependPkgs='gawk wget git git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev'

apt-get -y install $dependPkgs $basicPkgs \
apt-get autoremove

3.2安装repo

3.2设置个人信息和同步下载源码

注:其中imx-yocto-bsp是工程所在目录;如果报错可以ctrl+c退出,重新repo sync

4编译工程

4.1设置环境

i.MX提供了一个脚本fsl-setup-release.sh,它简化了i.MX机器的设置。 使用脚本,指定要为之构建的特定机器的名称以及所需的图形后端。

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


DISTRO选项:



fsl-imx-x11

– X11 graphics are not supported on i.MX 8.



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.


MACHINE选项:

• imx6qpsabreauto

• imx6qpsabresd

• imx6ulevk

• imx6ulz14x14evk

• imx6ull14x14evk

• imx6ull9x9evk

• imx6dlsabreauto

• imx6dlsabresd

• imx6qsabreauto

• imx6qsabresd

• imx6slevk

• imx6solosabreauto

• imx6solosabresd

• imx6sxsabresd

• imx6sxsabreauto

• imx6sllevk

• imx7dsabresd

• imx7ulpevk

• imx8qmmek

• imx8qxpmek

• imx8mqevk

• imx8mmevk

• imx8mnevk

由于我使用的CPU是IMX6Q,在此选择的MACHINE为imx6qsabresd,选择常用的图形后端fsl-imx-fb,当然你也可以选择fsl-imx-x11,选择X11开机时会有一个类似桌面的gui界面。我的命令如下:

DISTRO=fsl-imx-fb MACHINE=imx6qsabresd source fsl-setup-release.sh -b 6q_fb

执行此命令后,一路同意,就会进入我设置的编译目录6q_fb。

这是我们要重点关注的两个配置文件在当前目录中的conf/local.conf以及conf/bblayers.conf

local.conf是配置工程信息相当于Linux中Make menuconfig,在这里我们可以在原有的配置一些我们需要的软件或者库之类的东西。如我们常见的Linux文件系统启动方式为systemV,如果我们需要配置其为systemd,则可以添加如下:

MACHINE ??= 'imx6qsabresd'
DISTRO ?= 'fsl-imx-fb'
PACKAGE_CLASSES ?= 'package_rpm'
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS ??= "\
    STOPTASKS,${TMPDIR},1G,100K \
    STOPTASKS,${DL_DIR},1G,100K \
    STOPTASKS,${SSTATE_DIR},1G,100K \
    STOPTASKS,/tmp,100M,100K \
    ABORT,${TMPDIR},100M,1K \
    ABORT,${DL_DIR},100M,1K \
    ABORT,${SSTATE_DIR},100M,1K \
    ABORT,/tmp,10M,1K"
PACKAGECONFIG_append_pn-qemu-system-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
CONF_VERSION = "1"

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

# systemd
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"

又比如我们需要添加一些常见的软件,我们可以如下操作。

CORE_IMAGE_EXTRA_INSTALL_append = " vim ntp tree"

当然,像里面的“CORE_IMAGE_EXTRA_INSTALL_append”这些变量的具体定义,如何使用,大家可以去买《嵌入式系统开发:基于Yocto Project》或者查看其它相关博客也会有挺多介绍的。而像变量右边的如“vim”等软件名又该去哪里找呢?有一个

openembedded

的网站可以查找。

另外一个是bblayers.conf相当于Linux中的Kconfig决定哪些目录需要去编译,如果碰到有哪些软件的源目录不在工程source目录下,此时在source目录下去git clone相应的文件夹。然后,在bblayers.conf里面添加该目录。

5编译

编译命令如下所示:

bitbake <parameter> <component>


component选项:


parameter选项(可不选):

在此,我选择的镜像为imx-image-full,命令如下:

bitbake imx-image-full

然后,漫长的等待之后,编译完之后会在6q_fb/tmp/deploy/images/imx6q-sabresd下生成bz压缩格式的文件系统。

编译sdk,命令如下:

bitbake imx-image-full -c populate-sdk

然后在6q_fb/tmp/deploy下生成sh格式的交叉编译链。

imx6 yocto工程基本操作大概是这样,可能有遗漏哈。



版权声明:本文为Jocker_xie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。