一. 简介
本文我们就来学习,如何将我们编译的 uboot,zImage(内核镜像),xxx.dtb设备树文件,还有制作的根文件系统,这四个文件烧写到开发板中,最后 开发板能正常启动。
本文这里使用 NXP(恩智浦)官方提供的 MfgTool烧写工具,烧写我们自己的文件。
二. 使用MfgTool烧录前准备的文件
本文使用 NXP(恩智浦)官方提供的 MfgTool烧写工具烧写系统。
具体使用 mfgtools-without-rootfs.tar.gz 烧写工具,即带文件系统的这个烧写工具。
我这里所使用的 ALPHA开发板是 nand-Flash版的,所以,这里所要烧录的 uboot,zImage,与设备树文件都必须是针对 nand-Flash版的。而 根文件系统rootfs没有 EMMC或 Nand-Flash的区分,无非就是 EMMC容量大一些(比 nand-Flash版开发板),根文件系统中也可以添加比 Nand-Flash版开发板多一些的其他文件或程序。
需要准备烧写的文件:
(1) 自己移植编译出来的 uboot 可执行文件: u-boot.imx 。
(2) 自己移植编译出来的 zImage 镜像文件和开发板对应的 .dtb( 设备树 ) ,对于 I.MX6U
ALPHA 开发板来说就是 imx6ull-alientek-emmc.dtb 。
(3) 自己构建的根文件系统 rootfs ,这里我们需要对 rootfs 进行打包。
1. uboot 文件
uboot使用 之前我们一直使用的 NXP 官方提供的 uboot源码编译,因为之前一直使用正点原子的 MfgTool烧录工具烧录的根文件系统,同时,也为了开发板通过 tftp服务可以从 ubuntu中加载 zImage和设备树文件,所以,uboot源码更改了 nand-Flash版对应的 bootargs参数值。
这里需要将 bootargs参数更回到 NXP官方提供的值。
打开 include/configs/mx6ull_alientek-nand.h文件,找到nand-Flash对应的 bootargs参数设置代码,如下代码:
#if defined(CONFIG_SYS_BOOT_NAND)
#define CONFIG_EXTRA_ENV_SETTINGS \
CONFIG_MFG_ENV_SETTINGS \
"panel=TFT43AB\0" \
"fdt_addr=0x83000000\0" \
"fdt_high=0xffffffff\0" \
"console=ttymxc0\0" \
"ipaddr=192.168.1.50\0" \
"ethaddr=b8:ae:1d:01:00:00\0" \
"gatewayip=192.168.1.1\0" \
"serverip=192.168.1.66\0" \
"netmask=255.255.255.0\0" \
"bootargs=console=ttymxc0,115200 ubi.mtd=5 " \
"root=ubi0:rootfs rootfstype=ubifs " \
CONFIG_BOOTARGS_CMA_SIZE \
"mtdparts=gpmi-nand:4m(u-boot),128k(env),1m(logo),1m(dtb),8m(kernel),-(rootfs)\0"\
"bootcmd=tftp 0x80800000 zImage;"\
"tftp ${fdt_addr} imx6ull-alientek-nand.dtb;"\
"bootz 0x80800000 - ${fdt_addr}\0"
else
.........................................
将上面的代码更改为如下:
#if defined(CONFIG_SYS_BOOT_NAND)
#define CONFIG_EXTRA_ENV_SETTINGS \
CONFIG_MFG_ENV_SETTINGS \
"panel=TFT43AB\0" \
"fdt_addr=0x83000000\0" \
"fdt_high=0xffffffff\0" \
"console=ttymxc0\0" \
"bootargs=console=ttymxc0,115200 ubi.mtd=4 " \
"root=ubi0:rootfs rootfstype=ubifs " \
CONFIG_BOOTARGS_CMA_SIZE \
"mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs)\0"\
"bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
"nand read ${fdt_addr} 0x5000000 0x100000;"\
"bootz ${loadaddr} - ${fdt_addr}\0"
#else
.......................................
重新编译 uboot源码,生成的 u-boot.imx 文件备用。
2. 内核镜像 zImage 和 .dtb设备树文件
Linux内核镜像文件 zImage 与设备树文件 也是 NXP官方的 Kernel源码编译生成的,是前面我们在 NXP官方 kernel源码的基础上做改动,最终编译出的 nand-Flash版的 zImage和 设备树文件 imx6ull-alientek-nand.dtb 。
zImage所在目录: linux-imx-rel_imx_4.1.15_2.1.0_ga/arch/arm/boot
imx6ull-alientek-nand.dtb 所在目录:/linux-imx-rel_imx_4.1.15_2.1.0_ga/arch/arm/boot/dts
这两个文件 留待备用。
3. 自制的根文件系统rootfs
要烧录开发板上的 根文件系统,使用前面我制作的 rootfs。我所制作的 根文件系统rootfs 在 ubuntu系统下的 /linux/nfs_File 目录下。
这里我们需要对 rootfs 进行打包,进入到 Ubuntu 中的 rootfs 目录中,然后使用 tar 命令对其进行打包,命令如下:
wangtian@wangtian-virtual-machine:~/linux/nfs_File$ cd rootfs/
wangtian@wangtian-virtual-machine:~/linux/nfs_File/rootfs$ tar -cvjf rootfs.tar.bz2 *
完成以后会在 rootfs 目录下生成一个名为 rootfs.tar.bz2 的压缩包:
wangtian@wangtian-virtual-machine:~/linux/nfs_File/rootfs$ ls
中文测试 dev hello lib mnt root sbin tmp
bin etc hello.c linuxrc proc rootfs.tar.bz2 sys usr
wangtian@wangtian-virtual-machine:~/linux/nfs_File/rootfs$
三. 更改待烧录文件名
因为使用 NXP官方提供的 MfgTool工具进行烧写,我所使用的开发板是 Nand-Flash版,所以,需要确认NXP的 MfgTool工具内部对应的 Nand-Flash版开发板所对应烧写的四个文件是什么?即是哪个uboot文件,哪个内核镜像 zImage,哪个设备树文件以及哪个根文件系统。
注意:要烧写我自制的 系统,就需要将自制的四个文件替换掉 MfgTool工具中对应 Nand-Flash版的四个文件!!!
1. 确认 Nand-Flash版开发板对应的文件
主要替换下面两个文件夹下的文件:
L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/firmware
L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/files
firmware 文件夹下替换三种文件:Uboot,zImage,xxx.dtb 设备树文件
files文件夹下替换四种文件:Uboot,zImage,xxx.dtb 设备树文件,文件系统rootfs
自制的文件准备好以后,还不能直接进行烧写,必须对其进行重命名,否则的话 ucl2.xml 是识别不 出来的,前面讲解 ucl2.xml 语法的时候已经说过了,将自制的文件分别改名为如下名字:即使左边一列文件名改为右边一列名字:
|---------------------------|----------------------------------------|
| 自制文件的名字 | 重命名 |
| u-boot.imx | u-boot-imx6ull14x14evk_nand.imx |
| zImage | zImage |
| imx6ull-alientek-emmc.dtb | zImage-imx6ull-14x14-evk-gpmi-weim.dtb |
| rootfs.tar.bz2 | rootfs_nogpu.tar.bz2 |
注意:上面 NXP 官方对应 Nand-FLash版开发板的文件名,可以通过 MfgTool工具中结合 .vbs文件(mfgtool2-yocto-mx-evk-nand.vbs)与 ucl2文件可以确定。
自制的文件如下:
将以上四个文件改名后如下:
改名后文件分别替换 :
firmware 文件夹下替换三种文件:u-boot-imx6ull14x14evk_nand.imx,zImage,zImage-imx6ull-14x14-evk-gpmi-weim.dtb 设备树文件
files文件夹下替换四种文件:Uboot,zImage,xxx.dtb 设备树文u-boot-imx6ull14x14evk_nand.imx,zImage,zImage-imx6ull-14x14-evk-gpmi-weim.dtb 设备树文件,文件系统rootfs_nogpu.tar.bz2
下一篇文章,学习使用 NXP官方提供的 MfgTool工具烧写我自制的文件。