下载 MYS-6ULX 相关开发资源:http://down.myir-tech.com/MYS-6ULX/
MYiR 会不定期更新资源,通常下载前面两个就可以了,前者包含四个目录:01-Document、02-Images、03-Tools 和 04-Source,后者是打包好的 Yocto 软件包,使用它可以加快构建速度。
进入 04-Source 目录,并将其中的 fsl-release-yocto.tar.gz,MYiR-iMX-Linux.tar.gz,MYiR-iMX-uboot.tar.gz 解压缩到本地。并把 Yocto-downloads.tar.xz 解压缩为 fsl-release-bsp。整个工作空间的目录结构是这样的:
~/workspace_hd/IoT/MYS-6ULX-IOT/04-Source
|
|__ fsl-release-yocto
|__ fsl-setup-release.sh
|__ sources
|__ downloads -> ../fsl-release-bsp/downloads
|__ ......
|__ fsl-release-bsp
|__ downloads
|__ ......
|__ bash-4.3.30.tar.gz
|__ busybox-1.24.1.tar.bz2
|__ linux-4.1.tar.xz
|__ ......
|__ MYiR-iMX-Linux(commit ceddaea8e4941d173dfa61b62d6d09c207f5582)
|__ MYiR-iMX-uboot(commit 4ade113b07bf233a2c120eca1558567643751044)
注意:我在 fsl-release-yocto 创建了软链接 downloads,指向 ../fsl-release-bsp/downloads;同时在家目录创建了软链接 MYiR-iMX-Linux 和 MYiR-iMX-uboot,分别指向 04-Source 的 MYiR-iMX-Linux 和 MYiR-iMX-uboot。
我们的开发主机是 Ubuntu 16.04 64bit 发行版,下载并解压 MYS-6ULX 开发资源包和 Yocto 第三方软件包。
为了顺利编译 Linux,我们还需要为开发主机安装一些必备软件包:
$ sudo apt-get install build-essential git-core libncurses5-dev \
flex bison texinfo zip unzip zlib1g-dev gettext u-boot-tools \
g++ xz-utils mtd-utils gawk diffstat gcc-multilib python git \
make gcc g++ diffstat bzip2 gawk chrpath wget cpio
MYiR 为我们提供了两个编译器,存放于 03-Tools/Toolchain 目录,其中一个是 Linaro 提供的,另一个是由 Yocto 构建的,为了和文件系统统一,建议使用 Yocto 提供的编译工具链。
- Linaro 交叉编译器:gcc version 4.9.3 20141031 (prerelease) (Linaro GCC 2014.11)
- Yocto 交叉编译器:gcc version 5.3.0 (GCC)
Yocto 提供的工具链有两种,一种是底层开发的 meta-toolchain,另一种是用于应用开发的工具链。前者和 Linaro 类似,后者包含应用开发中的相关库,可以直接使用 pkg-config 工具来解决头文件或库文件的依赖关系。
MYS-6ULX 的资源包中有提供两种 Yocto 交叉编译工具链:
- 不包含 Qt5 的应用工具链:myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
- 包含 Qt5 相关库的应用工具链:myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
- 底层开发的 meta-toolchain:myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
可以看到,MYiR 提供的 Yocto 编译器是 SDK 工具包的方式,我们需要安装SDK包后才能使用。安装方法如下:
- 以普通用户权限执行对应的 shell 脚本;
- 运行中会提示安装路径,默认在 /opt 目录,如果安装多个工具链,注意要指定不同目录;
- 接着会提示输入用户密码以获取写入目录的权限;
- 安装完毕,使用“source”或“.”命令加载工具链环境到当前终端。
安装完成后,当需要在终端进行交叉编译时,只需要执行以下命令即可配置编译环境:
$ source /opt/myir-imx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
或者
$ source /opt/myir-imx-fb-meta/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
注意:如果通过 bitbake 在 Yocto Project 中构建 Linux 系统,则不需要手动执行上面的命令配置编译环境。
我们接下来会通过 Yocto 构建 Linux 系统,在开始之前,先对 Yocto Project 作个简单的介绍:
Yocto Project 提供了一个开源的、高质量的基础设备和工具,以帮助开发人员创建自己的定制 Linux 发行版,用于任何硬件架构及跨多个细分市场。Yocto Project 旨在为开发人员提供一个良好的开端。它还有其他一些项目,包括 Poky 构建系统、Autobuilder 自动构建和测试系统及嵌入式 GLIBC(EGLIBC)C 库。
对于那些熟悉 Buildroot 发布环境的开发者而言,Yocto 是另一个框架,支持更多的功能,如更多的存储包等。换言之,Yocto 更加全面。
通过 Yocto Project,设计师可以在 MYS-6ULX-IOT 平台上定制嵌入式 Linux 发行版——使设计师能聚焦于产品本身,而不是创建定制发行版带来的复杂性。
如果是第一次接触 Yocto,可能会对其中有一些名词和概念感到陌生,比如 bitbake、metadata、recipes、layer 等等。
假如用烹饪一桌酒席来形容构建 Linux 发行版,那么 Yocto 就是饭店名,Poky 就是厨房(以及提供作为参考的菜的搭配套餐),Metadata 就是烹饪资源(.bb/.bbappend 表示配方/配上上的贴士,.conf 表示厨房里的管事的小组长),Layers 就是菜谱的分类(如川菜谱、粤菜谱),Bitbake 就是厨师,Output 就是得到的一桌酒席。
切换到 04-Source/fsl-release-yocto 目录,执行如下命令:
$ DISTRO=myir-imx-fb MACHINE=mys6ull14x14 source fsl-setup-release.sh -b build-myir
MYiR 已经为我们做了很多工作,我们只需要指定发行版(DISTRO)和设备(MACHINE),并指定工作目录 build-myir 即可(缺省为 build)。以上命令会创建工作目录 build-myir 及相关配置文件,之后会在此目录下构建镜像。
执行脚本后会先要求阅读并同意版权声明后才会进入构建过程,所以第一次构建需要连接互联网,以便通过 EULA 验证。
build-myir/conf 目录下是当前构建的配置文件。在上面的初始化中,会构建适合于 mys6ull14x14 的镜像,也可以在 local.conf 文件中修改 MACHINE 变量来构建适合 mys6ull14x14 的镜像。Yocto 支持在同一个构建任务下构建多个设备。
注意:如果打开一个新的终端应该执行的是 $ source setup-environment build-myir
,而不需要指定 DISTRO 和 MACHINE。
之后在 build-myir 目录执行以下命令开始构建:
$ bitbake core-image-minimal
这里构建的 target 可以是 core-image-minimal、core-image-base、core-image-sato、fsl-image-qt5 等等,甚至是 meta-toolchain 或者一个 recipe。
Yocto 第一次构建需要很长时间,取决于计算机的 CPU 核心数和硬件读写速度。Yocto 建议使用八核和 SSD 硬盘以加快构建速度。第一次构建完成后会生成缓存,后面修改的构建,时间会减少很多。为了节省时间,我们这里构建的是 minimal 版本的文件系统,在 i5 四核 64 bit Ubuntu 上编译了大约三个小时。
构建完成后会在 tmp/deploy/images/mys6ull14x14/ 目录下生成不同的文件。生成的文件中,有一些是链接文件,包括 uboot、kernel、dtb、rootfs。我把其中的 u-boot.imx、zImage、zImage-mys-imx6ull-14x14-evk-gpmi-weim.dtb 和 core-image-minimal-mys6ull14x14.tar.bz2 拷贝到 Windows,通过 MfgTool 工具烧录到 MYS-6ULX-IOT 开发板即可。
烧录刚刚构建的 core-image-minimal,连接串口并打开 minicom,上电启动可以查看一些版本信息,确认烧录成功。
u-boot 信息:
U-Boot 2016.03-mys-6ulx+g4ade113 (Jun 05 2018 - 22:32:21 +0800)
kernel 信息
# uname -a
Linux mys6ull14x14 4.1.15-1.2.0+gcecddae #1 SMP PREEMPT Tue Jun 5 22:11:14 CST 2018 armv7l GNU/Linux
# cat /proc/version
Linux version 4.1.15-1.2.0+gcecddae (rudy@OptiPlex-7050) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Tue Jun 5 22:11:14 CST 2018
# cat /etc/issue
Freescale i.MX Release Distro 4.1.15-2.0.1 \n \l
# cat /etc/version
20180605133253
# cat /etc/timestamp
20180605143853