硬件:米尔i.MX6UL开发板MYD-Y6ULX
简介:MYD-Y6ULX开发板(i.MX6UL开发板)由MYC-Y6ULX核心板和底板组成,基于NXP i.MX6UL处理器或i.MX6ULL处理器可选,MYD-Y6ULX开发板(i.MX6ULL开发板)提供丰富外设硬件,板载了Mini PCIE接口(用于4G模块)及SIM卡槽、WIFI芯片及天线接口、双百兆网口、LCD液晶接口、音频接口、带隔离的CAN,RS485,RS232等。
构建方法
MYD-Y6ULX的Linux系统包含以下部件:
U-Boot: 引导程序,支持不同方式启动内核。
Linux Kernel: 适用于MYD-Y6ULX开发板的Linux 4.1.15内核,同时包含支持板载外设的驱动。
Yocto: 一个开源协作项目,提供丰富的模板、 工具和方法来支持构建出面向嵌入式产品的自定义Linux系统。
本章中用到的代码存放在资源包04-Source目录下,编译u-boot和Linux内核代码前,请先安装meta-toolchain并加载环境变量到当前shell 。
编译U-Boot
进入Bootloader目录,解压U-boot源码:
cd $DEV_ROOT/04-Source/
tar -xvf MYiR-iMX-uboot.tar.gz
cd MYiR-iMX-uboot
开始编译:
make distclean
make <config>
make
这里的是配置选项名称,不同的启动模式需使用不同的配置选项,MYD-Y6ULX开发板有两种选项:
启动模式 | 编译选项 | MYD-Y6ULX NAND Flash | myd_y6ull_14x14_nand_defconfig | MYD-Y6ULX SD Card | myd_y6ull_14x14_sd_defconfig |
u-boot SD卡方式启动时默认会先检测"boot.scr"文件,这是u-boot上的脚本镜像文件,用于临时改变启动设备顺序。 以下是从TFTP下载zImage和dtb
文件并启动的脚本例子。 使用mkimage工具"myd-y6ull-boot-mmc0-tftp.txt"文件制做成"boot.scr"文件,mkimage工具是在u-boot的tools目录下,uboot编译完成后,mkimage也会被编译出来,直接使用即可。
cat myd-y6ull-boot-mmc0-tftp.txt
setenv mmcroot '/dev/mmcblk0p2 rootwait rw rootdelay=5 mem=256M'
run mmcargs
tftpboot 0x83000000 zImage
tftpboot 0x84000000 myd-y6ull-gpmi-weim.dtb
bootz 0x83000000 - 0x84000000
./tool/mkimage -A arm -T script -O linux -d myd-y6ull-boot-mmc0-tftp.txt boot.scr
Linux Kernel
进入Kernel目录,解压内核源码:
cd $DEV_ROOT/04-Source
tar -xvf MYiR-iMX-Linux.tar.gz
cd MYiR-iMX-Linux
开始编译:
make distclean
make myd_y6ulx_defconfig
make zImage dtbs
编译完成后在"arch/arm/boot"目录会生成内核镜像文件zImage,在"arch/arm/boot/dts"目录会生成DTB文件。
DTB文件 | 备注 | myd-y6ull-gpmi-weim.dtb | MYD-Y6ULX NAND启动方式 |
MYD-Y6ULX板上的Micro SD卡槽是连接mmc0控制器,所有的dtb文件都是默认启用mmc0控制器。
SD卡方式启动时,U-Boot默认查找的文件是myd-imx6ull-14x14-evk-gpmi-weim.dtb文件。
更新kernel后,由于版本标识改变,若驱劝是以模块方式加载,需要重新编译驱动模块:
make modules
编译后,可以安装在指定位置:
mkdir ../target-kernel
make INSTALL_MOD_PATH=../target-kernel modules_install
这样就可以把target-kernel目录打包后,解压在MYD-Y6ULX开发板的/lib目录下使用。
构建文件系统
Yocto不仅仅是一个制做文件系统工具,同时提供整套的基于Linux的开发和维护工作流程,使底层嵌入式开发者和上层应用开发者在统一的框架下
开发,解决了传统开发方式下零散和无管理的开发形态。
Yocto是一个开源的“umbrella”项目,意指它下面有很多个子项目,Yocto只是把所有的项目整合在一起,同时提供一个参考构建项目Poky,来指导开
发人员如何应用这些项目,构建出嵌入式Linux系统。 它包含Bitbake, OpenEmbedded-Core, 板级支持包,各种软件包的配置文件。 通过Poky,可以
构建出不同类需求的系统,如最小的系统core-image-minimal、 全功能命令行系统core-image-base、 带Qt5图形库的fsl-image-qt5。
MYD-Y6YKX提供了符合Yocto的配置文件,帮助开发者构建出可烧写在MYD-Y6ULX板上的Linux系统镜像。
Yocto还提供了丰富的开发文档资源,让开发者学习并定制自己的系统。 由于篇幅有限,不能完整介绍Yocto的使用方法,建议开发者先阅读以下文
档后,再开始动手构建。
Yocto Project Quick start
Bitback User Manual
Yocto Project Reference Manual
Yocto Project Development Manual
Yocto Project Complete Documentation Set
Yocto构建Linux系统
本节适合需要对文件系统进行深度定制的开发者,希望从Yocto构建出符合MYD-Y6ULX系列开发板的文件系统,同时基于它的定制需求。 初次体验
使用或无特殊需要的开发者可以直接使用MYD-Y6ULX已经提供的文件系统。
由于Yocto构建前需要下载文件系统中所有软件包到本地,为了快速构建,MYD-Y6ULX已经把相关的软件打包好,可以直接解压使用,减少重复下
载的时间。
注意:构建Yocto不需要加载工具链环境变量,请创建新shell或打开新的终端窗口。
MYD-Y6ULX提供的Yocto
解压Yocto源码包,同时解压Yocto-downloads.tar.xz软件包至Yocto目录下。 Yocto-downloads.tar.xz是把Yocto构建中用到的第三方软件包打包,免除
开发者再次下载花费的时间。
注意:由于Yocto-downloads.tar.xz文件较大,无法与MYD-Y6ULX打包在同一文件内,请访问网页下载:
文件名为Yocto-downloads.tar.xz。
cd $DEV_ROOT
tar xvf 04-Source/fsl-release-yocto.tar.xz
tar xvf 04-Source/Yocto-downloads.tar.xz -C fsl-release-bsp
还需要将Linux内核和U-Boot代码放在用户家目录下,方便开发和Yocto编译。
tar xvf 04-Source/MYiR-iMX-Linux.tar.gz -C ~/
tar xvf 04-Source/MYiR-iMX-uboot.tar.gz -C ~/
初始化Yocto构建目录
使用NXP提供的fsl-setup-release.sh脚本,会创建一个工作空间,然后在此空间下构建镜像。 执行脚本后会先要求阅读并同意版权声明后才会进入构
盡过目录。 同时,脚本会默认创建并进入build目录。 如果需要特定目录名称,可以使用-b参数,如"-b myir"。 这里的MACHINE参数为"mydy6ull14x14"。
cd fsl-release-bsp
DISTRO=myir-imx-fb MACHINE=myd-y6ull14x14 source fsl-setup-release.sh -b build
tree conf/
conf/
├── bblayers.conf
├── bblayers.conf.org
├── local.conf
├── local.conf.org
├── local.conf.sample
├── sanity_info
└──
templateconf.cfg
build/conf目录下是当前构建的配置文件。 上面在初始化后,就可以构建适合"myd-y6ull14x14"的镜像了。
构建GUI Qt5版的系统
第一次构建时,会需要很长时间,请耐心等待。
bitbake fsl-image-qt5
构建非GUI版的系统
第二次构建时,如果是同设备,不需要修改其它文件,直接编译即可。
bitbake core-image-base
Image名称 | 描述 | 用途 | core-image-minimal | minimal版本的文件系统 | 用于MYD-Y6ULX的升级或更新系统 | core-image-base | base版本的终端更多功能的镜像 | 通用的文件系统 | fsl-image-qt5 | 构建基于Qt5的镜像 | 带Qt5的通用文件系统 |
构建文件系统完成后,会在输出目录下有manifest文件,这个文件里包含了对应文件系统中已安装的软件包。
Yocto第一次构建会需要很长时间,取决于计算机的CPU核心数和硬件读写速度。 Yocto建议可以使用八核和SSD硬盘可以加速构建速度。 第一次构
建完成后会生成缓存,后面修改的构建,时间会减少很多。
檭建完成后在会"tmp/deploy/images/myd-y6ull14x14/"目录下生成不同的文件,以下是构建后的一个例子:
ls -lh tmp/deploy/images/myd-y6ull14x14/
total 1.4G
-rw-r--r-- 1 kevinchen kevinchen 64M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 4.4K Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 80M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 15M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 11M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.tar.xz
-rw-r--r-- 1 kevinchen kevinchen 64M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 4.4K Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 80M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 15M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 11M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.tar.xz
lrwxrwxrwx 1 kevinchen kevinchen 57 Oct 11 16:48 core-image-base-myd-y6ull14x14.ext4 -> core-image-base-myd-y6ull14x14-20171011084
756.rootfs.ext4
lrwxrwxrwx 1 kevinchen kevinchen 61 Oct 11 16:48 core-image-base-myd-y6ull14x14.manifest -> core-image-base-myd-y6ull14x14-2017101
1084756.rootfs.manifest
lrwxrwxrwx 1 kevinchen kevinchen 59 Oct 11 16:48 core-image-base-myd-y6ull14x14.sdcard -> core-image-base-myd-y6ull14x14-201710110
84756.rootfs.sdcard
lrwxrwxrwx 1 kevinchen kevinchen 60 Oct 11 16:48 core-image-base-myd-y6ull14x14.tar.bz2 -> core-image-base-myd-y6ull14x14-20171011
084756.rootfs.tar.bz2
lrwxrwxrwx 1 kevinchen kevinchen 59 Oct 11 16:48 core-image-base-myd-y6ull14x14.tar.xz -> core-image-base-myd-y6ull14x14-201710110
84756.rootfs.tar.xz
-rw-r--r-- 1 kevinchen kevinchen 532M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 7.3K Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 548M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 111M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 64M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.tar.xz
lrwxrwxrwx 1 kevinchen kevinchen 55 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.ext4 -> fsl-image-qt5-myd-y6ull14x14-20171011090003.
rootfs.ext4
lrwxrwxrwx 1 kevinchen kevinchen 59 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.manifest -> fsl-image-qt5-myd-y6ull14x14-20171011090
003.rootfs.manifest
lrwxrwxrwx 1 kevinchen kevinchen 57 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.sdcard -> fsl-image-qt5-myd-y6ull14x14-2017101109000
3.rootfs.sdcard
lrwxrwxrwx 1 kevinchen kevinchen 58 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.tar.bz2 -> fsl-image-qt5-myd-y6ull14x14-201710110900
03.rootfs.tar.bz2
lrwxrwxrwx 1 kevinchen kevinchen 57 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.tar.xz -> fsl-image-qt5-myd-y6ull14x14-2017101109000
3.rootfs.tar.xz
-rw-r--r-- 2 kevinchen kevinchen 1.3M Oct 11 16:47 modules--4.1.15-r0-myd-y6ull14x14-20171011084447.tgz
lrwxrwxrwx 1 kevinchen kevinchen 52 Oct 11 16:47 modules-myd-y6ull14x14.tgz -> modules--4.1.15-r0-myd-y6ull14x14-20171011084447.tg
zrw-r--r-- 2 kevinchen kevinchen 294 Oct 11 17:01 README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot.imx -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot.imx-nand -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 24 Oct 11 16:01 u-boot.imx-sd -> u-boot-sd-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot-myd-y6ull14x14.imx -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot-myd-y6ull14x14.imx-nand -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 24 Oct 11 16:01 u-boot-myd-y6ull14x14.imx-sd -> u-boot-sd-2016.03-r0.imx
-rwxr-xr-x 2 kevinchen kevinchen 395K Oct 11 16:01 u-boot-nand-2016.03-r0.imx
-rwxr-xr-x 2 kevinchen kevinchen 343K Oct 11 16:01 u-boot-sd-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 51 Oct 11 16:47 zImage -> zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin
-rw-r--r-- 2 kevinchen kevinchen 6.2M Oct 11 16:47 zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin
-rw-r--r-- 2 kevinchen kevinchen 37K Oct 11 16:47 zImage--4.1.15-r0-myd-y6ull-gpmi-weim-20171011084447.dtb
lrwxrwxrwx 1 kevinchen kevinchen 51 Oct 11 16:47 zImage-myd-y6ull14x14.bin -> zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin
lrwxrwxrwx 1 kevinchen kevinchen 56 Oct 11 16:47 zImage-myd-y6ull-gpmi-weim.dtb -> zImage--4.1.15-r0-myd-y6ull-gpmi-weim-201710110
84447.dtb
生成的文件中,有一些是链接文件,下面是不同文件的用途:
文件名 | 用途 | *.rootfs.manifest | 文件系统内的软件列表 | *.rootfs.ext4 | 打包成ext4格式的文件系统 | *.rootfs.sdcard | 可直接写入SD卡,从SD卡启动的镜像 | *.rootfs.tar.bz2 | 打包成tar.bz2格式的文件系统 | *.rootfs.tar.xz | 打包成tar.xz格式的文件系统 | u-boot-sd-2016.03-r0.imx | 适合从SD启动的u-boot镜像 | u-boot-nand-2016.03-r0.imx | 适合从NAND启动的u-boot镜像 |
Bitbake常用命令
Bitbake 参数 | 描述 | -c fetch | 从recipe中定义的地址,拉取软件到本地 | -c cleanall | 清空整个构建目录 | -c deploy | 部署镜像或软件包到目标rootfs内 | -k | 有错误发生时也继续构建 | -c compile | 重新编译镜像或软件包 |
更多Yocto使用方法,请参考NXP官方Yocto使用文档《i.MX Yocto Project User's Guide》 。
Yocto构建SDK工具
Yocto提供可构建出SDK工具的功能,用于底层或上层应用开发者使用的工具链和相关的头文件或库文件,免去用户手动制做或编译依赖库。 SDK工
具有两种,一种是适合底层开发的工具链,用于编译u-boot和linux内核代码,另外一种是应用开发工具链,附带目标系统的头文件和库文件,方便
应用开发者移植应用在目标设备上。 两种SDK工具都是shell自解压文件,执行后,默认安装在/opt目录下。
构建底层工具连
bitbake meta-toolchain
构建完成后,在"tmp/deploy/sdk"目录下有三个文件:
ls tmp/deploy/sdk/ -lh
myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest
myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest
这里有两个manifest文件,host.manifest是工具链中包含主机端的软件包的列表,target.manifest是包含目标设备端的软件包列表。
构建应用层工具链
应用层工具链是和Image名称是统一的,这里可以使用"fsl-image-qt5"和"core-iamge-base"两种参数。
bitbake -c populate_sdk <image name>
构建完成后,同样在"tmp/deploy/sdk/"目录下有六个文件:
ls tmp/deploy/sdk/ -lh
myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest
myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest
myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest
myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest
".host.manifest"文件表示工具链中包含主机端的软件包列表,".target.manifest"表示工具链中包含目标设德端的软件包列表。 "myir-imx-fb-glibcx86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"文件是构建出的fsl-image-qt5镜像对应的SDK工具链,"myir-imx-fb-glibc-x86_64-
core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"文件是构建出的core-image-base镜像对应的SDK工具链。 可以直接安装在其他Linux系
统中,开发和编译目标端设备的二进制程序。
|