将自编译的镜像名称改为如下
| u-boot-imx6ull14x14evk_nand.imx |
| zImage |
| zImage-imx6ull-14x14-evk-gpmi-weim.dtb |
| rootfs_nogpu.tar.bz2 |
Profiles\Linux\OS Firmware\files目录下替换表格内的文件
Profiles\Linux\OS Firmware\firmware目录下只替换u-boot-imx6ull14x14evk_nand.imx
点击:mfgtool2-yocto-mx-evk-nand.vbs
下载分两个阶段
第一阶段:下载firmware目录下的uboot、内核、设备树到开发板的DRAM中
第二阶段:跳转到DRAM中内核执行,将files目录下的uboot、内核、设备树、文件系统下载到nand flash中
存在两种错误情况:
1)将firmware目录下的uboot、内核、设备树全部替换成自编译的镜像,由于自编译的内核镜像可能未开启USB大容量存储功能,导致第二阶段无法执行,串口输出UTP: Waiting for device to appear后下载即停止了。这种情况下解决方法就是重新配置自己的内核并编译,配置如下
- -> Device Drivers
- -> USB support (USB_SUPPORT [=y])
- -> Support for Host-side USB (USB [=y])
- -> General setup
- ->Initial RAM filesystem and RAM disk (initramfs/initrd) support
- -> Device Drivers
- -> USB support (USB_SUPPORT [=y])
- -> USB Gadget Support (USB_GADGET [=y])
- ->
- USB Gadget Drivers ( [=m])
- ->[X]Mass Storage Gadget (USB_MASS_STORAGE [=m]
- ->
- UTP over Storage Gadget
2)不替换firmware目录下文件,也即在第一阶段下载到DRAM中的uboot、内核、设备树全部是NXP原厂的,NXP原厂的内核开启USB大容量存储功能,可以完成第二阶段的下载。下载完成后,设置开发板为从NAND启动,重启开发板,uboot可运行,但内核和设备树均读取不了。这里的错误原因是NXP原厂的uboot对nand的分区和自编译的uboot对nand的分区不同。
NXP原厂的uboot对nand的分区
"boot" 64M "kernel" 16M "dtb" 16M "rootfs" 剩余
而自编译的uboot对nand的分区为
"boot" 64M "kernel" 32M "dtb" 16M "rootfs" 剩余
NXP原厂的uboot对nand的分区是files目录下文件写入nand flash的地址,自编译的uboot对nand的分区是开发板从nand启动时从nand flash读取镜像的地址,两个地址分布不一样。uboot都是在nand的起始地址,所以开发板从nand启动时uboot可以运行,但是kernel和设备树地址不同,显然开发板从nand启动时,按自编译的uboot对nand的分区,无法读取内核和设备树。
解决方法就是firmware目录下uboot替换成自编译的u-boot-imx6ull14x14evk_nand.imx,或者更改自编译的uboot中nand分区,改为和nxp原厂分区一样。