3.3.1 Yocto构建Linux系统
本节适合需要对文件系统进行深度定制的开发者,希望从Yocto构建出符合MYS-6ULX系列开发板的文件系统,同时基于它的定制需求。初次体验使用或无特殊需要的开发者可以直接使用MYS-6ULX已经提供的文件系统。
由于Yocto构建前需要下载文件系统中所有软件包到本地,为了快速构建,MYS-6ULX已经把相关的软件打包好,可以直接解压使用,减少重复下载的时间。
这里提供了两种方式使用Yocto:
- 使用由MYS-6ULX资源包中的Yocto和相关文件
- 从NXP官网下载Yocto
初次使用Yocto的用户,推荐使用第一种方式。
注意:构建Yocto不需要加载工具链环境变量,请创建新shell或打开新的终端窗口。
MYS-6ULX提供的Yocto
解压Yocto源码包,同时解压Yocto-downloads.tar.xz软件包至Yocto目录下。Yocto-downloads.tar.xz是把MYS-6ULX构建中用到的第三方软件包打包,免除用户再次下载。
注意:由于Yocto-downloads.tar.xz文件较大,无法与MYS-6ULX打包在同一文件内,请访问网页下载: http://down.myir-tech.com/MYS-6ULX/。
cd $DEV_ROOT
tar xvf 04-Source/fsl-release-yocto.tar.xz
tar xvf 04-Source/Yocto-downloads.tar.xz -C fsl-release-bsp
cd fsl-release-bsp
还需要将Linux内核和U-Boot代码放在用户家目录下,方便开发和Yocto编译。
cd $DEV_ROOT
tar xvf $DEV_ROOT/04-Source/linux-4.1.15.tar.gz -C ~/
tar xvf $DEV_ROOT/04-Source/uboot.tar.gz -C ~/
NXP官方提供的Yocto
Yocto下的项目比较多,为了便于管理使用与Android相同的代码管理工具repo。通过repo下载代码前,需要配置好git的用户名和邮箱地址。然后使用repo的命令从NXP官方仓库下载代码
- 设置repo
mkdir -p ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo \
> ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
- 设置Yocto
git config --global user.name "Your Name"
git config --global user.email "Your email address"
cd $DEV_ROOT
mkdir fsl-release-bsp
cd fsl-replease-bsp
repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git \
-b imx-4.1-krogoth
repo sync
同步完成后,需要把meta-myir-imx6ulx拷贝到fsl-release-bsp/source目录下。同时,在后面的初始化构建目录后,还需要在conf/bblayers.conf中添加BBLAYERS += " ${BSPDIR}/sources/meta-myir-imx6ulx "到最后行。
也需要将Linux内核和U-Boot代码放在用户家目录下,方便开发和Yocto编译。
tar xvf $DEV_ROOT/04-Source/MYiR-iMX-Linux.tar.gz -C ~/
tar xvf $DEV_ROOT/04-Source/MYiR-iMX-uboot.tar.bz -C ~/
初始化Yocto构建目录
使用NXP提供的fsl-setup-release.sh脚本,会创建一个工作空间,然后在此空间下构建镜像。执行脚本后会先要求阅读并同意版权声明后才会进入构盡过目录。同时,脚本会默认创建并进入build目录。如果需要特定目录名称,可以使用-b参数,如"-b myir"。 这里的MACHINE参数有两种设备,"mys6ull14x14"对应于MYS-6ULX-IoT和"mys6ul14x14"对应于MYS-6ULX-IND版本。
DISTRO=myir-imx-fb MACHINE=mys6ul14x14 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目录下是当前构建的配置文件。上面在初始化时,构建适合"mys6ul14x14"的镜像,也可以在local.conf文件中修改MACHINE变量来构建适合"mys6ull14x14"的镜像。Yocto支持在同一个构建任务下构建多个设备。
构建GUI Qt5版的系统
第一次构建时,会需要很长时间,请耐心等待。
bitbake fsl-image-qt5
构建非GUI版的系统
第二次构建时,如果是同设备,不需要修改其它文件,直接编译即可。
bitbake core-image-base
Image名称 | 描述 | 用途 |
---|---|---|
core-image-minimal | minimal版本的文件系统 | 用于MYS-6ULX的升级或更新系统 |
core-image-base | base版本的终端更多功能的镜像 | 通用的文件系统 |
fsl-image-qt5 | 构建基于Qt5的镜像 | 带Qt5的通用文件系统 |
构建文件系统完成后,会在输出目录下有manifest文件,这个文件里包含了对应文件系统中已安装的软件包。
Yocto第一次构建会需要很长时间,取决于计算机的CPU核心数和硬件读写速度。Yocto建议可以使用八核和SSD硬盘可以加速构建速度。第一次构建完成后会生成缓存,后面修改的构建,时间会减少很多。
檭建完成后在会"tmp/deploy/images/mys6ul14x14/"或"tmp/deploy/images/mys6ull14x14/"目录下生成不同的文件,以下是构建后的一个例子:
ls -lh tmp/deploy/images/mys6ul14x14/
total 1.8G
-rw-r--r-- 1 kevinchen kevinchen 56M Apr 16 23:05
core-image-minimal-mys6ul14x14-20170416150516.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 2.1K Apr 16 23:05
core-image-minimal-mys6ul14x14-20170416150516.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 72M Apr 16 23:05
core-image-minimal-mys6ul14x14-20170416150516.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 11M Apr 16 23:05
core-image-minimal-mys6ul14x14-20170416150516.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 7.3M Apr 16 23:05
core-image-minimal-mys6ul14x14-20170416150516.rootfs.tar.xz
lrwxrwxrwx 1 kevinchen kevinchen 57 Apr 16 23:05
core-image-minimal-mys6ul14x14.ext4 -> core-image-minimal-
mys6ul14x14-20170416150516.rootfs.ext4
lrwxrwxrwx 1 kevinchen kevinchen 61 Apr 16 23:05
core-image-minimal-mys6ul14x14.manifest -> core-image-minimal-
mys6ul14x14-20170416150516.rootfs.manifest
lrwxrwxrwx 1 kevinchen kevinchen 59 Apr 16 23:05
core-image-minimal-mys6ul14x14.sdcard -> core-image-minimal-
mys6ul14x14-20170416150516.rootfs.sdcard
lrwxrwxrwx 1 kevinchen kevinchen 60 Apr 16 23:05
core-image-minimal-mys6ul14x14.tar.bz2 -> core-image-minimal-
mys6ul14x14-20170416150516.rootfs.tar.bz2
lrwxrwxrwx 1 kevinchen kevinchen 59 Apr 16 23:05
core-image-minimal-mys6ul14x14.tar.xz -> core-image-minimal-
mys6ul14x14-20170416150516.rootfs.tar.xz
-rw-r--r-- 1 kevinchen kevinchen 780M Apr 16 23:08
fsl-image-qt5-mys6ul14x14-20170416150603.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 35K Apr 16 23:08
fsl-image-qt5-mys6ul14x14-20170416150603.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 796M Apr 16 23:08
fsl-image-qt5-mys6ul14x14-20170416150603.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 166M Apr 16 23:08
fsl-image-qt5-mys6ul14x14-20170416150603.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 105M Apr 16 23:09
fsl-image-qt5-mys6ul14x14-20170416150603.rootfs.tar.xz
lrwxrwxrwx 1 kevinchen kevinchen 52 Apr 16 23:08
fsl-image-qt5-mys6ul14x14.ext4 -> fsl-image-qt5-
mys6ul14x14-20170416150603.rootfs.ext4
lrwxrwxrwx 1 kevinchen kevinchen 56 Apr 16 23:08
fsl-image-qt5-mys6ul14x14.manifest -> fsl-image-qt5-
mys6ul14x14-20170416150603.rootfs.manifest
lrwxrwxrwx 1 kevinchen kevinchen 54 Apr 16 23:09
fsl-image-qt5-mys6ul14x14.sdcard -> fsl-image-qt5-
mys6ul14x14-20170416150603.rootfs.sdcard
lrwxrwxrwx 1 kevinchen kevinchen 55 Apr 16 23:09
fsl-image-qt5-mys6ul14x14.tar.bz2 -> fsl-image-qt5-
mys6ul14x14-20170416150603.rootfs.tar.bz2
lrwxrwxrwx 1 kevinchen kevinchen 54 Apr 16 23:09
fsl-image-qt5-mys6ul14x14.tar.xz -> fsl-image-qt5-
mys6ul14x14-20170416150603.rootfs.tar.xz
-rw-r--r-- 2 kevinchen kevinchen 657K Apr 16 23:04
modules--4.1.15-r0-mys6ul14x14-20170416150349.tgz
lrwxrwxrwx 1 kevinchen kevinchen 49 Apr 16 23:04
modules-mys6ul14x14.tgz -> modules--4.1.15-r0-
mys6ul14x14-20170416150349.tgz
-rw-r--r-- 2 kevinchen kevinchen 294 Apr 16 23:07
README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
-rwxr-xr-x 2 kevinchen kevinchen 375K Apr 16 22:53
u-boot-emmc-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Apr 16 22:53
u-boot.imx -> u-boot-emmc-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Apr 16 22:53
u-boot.imx-emmc -> u-boot-emmc-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Apr 16 22:53
u-boot.imx-nand -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 24 Apr 16 22:53
u-boot.imx-sd -> u-boot-sd-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Apr 16 22:53
u-boot-mys6ul14x14.imx -> u-boot-emmc-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Apr 16 22:53
u-boot-mys6ul14x14.imx-emmc -> u-boot-emmc-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Apr 16 22:53
u-boot-mys6ul14x14.imx-nand -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 24 Apr 16 22:53
u-boot-mys6ul14x14.imx-sd -> u-boot-sd-2016.03-r0.imx
-rwxr-xr-x 2 kevinchen kevinchen 427K Apr 16 22:53
u-boot-nand-2016.03-r0.imx
-rwxr-xr-x 2 kevinchen kevinchen 375K Apr 16 22:53
u-boot-sd-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 48 Apr 16 23:04
zImage -> zImage--4.1.15-r0-mys6ul14x14-20170416150349.bin
-rw-r--r-- 2 kevinchen kevinchen 6.5M Apr 16 23:04
zImage--4.1.15-r0-mys6ul14x14-20170416150349.bin
-rw-r--r-- 2 kevinchen kevinchen 36K Apr 16 23:04
zImage--4.1.15-r0-mys-imx6ul-14x14-evk-20170416150349.dtb
-rw-r--r-- 2 kevinchen kevinchen 37K Apr 16 23:04
zImage--4.1.15-r0-mys-imx6ul-14x14-evk-emmc-20170416150349.dtb
-rw-r--r-- 2 kevinchen kevinchen 37K Apr 16 23:04 zImage
--4.1.15-r0-mys-imx6ul-14x14-evk-gpmi-weim-20170416150349.dtb
lrwxrwxrwx 1 kevinchen kevinchen 48 Apr 16 23:04 zImage-
mys6ul14x14.bin -> zImage--4.1.15-r0-mys6ul14x14-
20170416150349.bin
lrwxrwxrwx 1 kevinchen kevinchen 57 Apr 16 23:04 zImage-
mys-imx6ul-14x14-evk.dtb -> zImage--4.1.15-r0-mys-
imx6ul-14x14-evk-20170416150349.dtb
lrwxrwxrwx 1 kevinchen kevinchen 62 Apr 16 23:04 zImage-
mys-imx6ul-14x14-evk-emmc.dtb -> zImage--4.1.15-r0-mys-
imx6ul-14x14-evk-emmc-20170416150349.dtb
lrwxrwxrwx 1 kevinchen kevinchen 67 Apr 16 23:04 zImage-
mys-imx6ul-14x14-evk-gpmi-weim.dtb -> zImage--4.1.15-r0-
mys-imx6ul-14x14-evk-gpmi-weim-20170416150349.dtb
生成的文件中,有一些是链接文件,下面是不同文件的用途:
文件名 | 用途 |
---|---|
*.rootfs.manifest | 文件系统内的软件列表 |
*.rootfs.ext4 | 打包成ext4格式的文件系统 |
*.rootfs.sdcard | 可直接写入SD卡,从SD卡启动的镜像 |
*.rootfs.tar.bz2 | 打包成tar.bz2格式的文件系统 |
*.rootfs.tar.xz | 打包成tar.xz格式的文件系统 |
u-boot-emmc-2016.03-r0.imx | 适合从eMMC启动的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》。