在项目开发时,有时需要单独修改存储介质(nand emmc)中的 bootloader、kernel image、rootfs,本文以 imx6ull平台为例,介绍了UUU 单独烧写 nand 中的 rootfs 的方法,读者可以以此举一反三,实现其他 imx 系列平台,单独烧写Bootloader、kernel image、rootfs 到 emmc 或者 nand flash。
一、 操作步骤如下
(1)uuu 默认的 nand 烧写脚本 example_kernel_nand.uuu 有如下图内容片段
因此,我们需要准备烧录的镜像文件并修改名称如下:
u-boot → _flash_fw.bin u-boot → _flash.bin kernel → _Image dtb → _board.dtb initramfs → __initramfs.cpio.gz.uboot rootfs → _rootfs.tar.bz2 optee → _tee |
文件的命名完全依赖于烧录时脚本的使用,可根据自己的习惯来修改,只需在脚本中保证名称对应即可。
其中 __initramfs.cpio.gz.uboot 文件可以由 yocto 工程获取,或者 NXP 官方镜像释放包里找到。其他文件
yocto,standalone 两种方式均可编译得到。
(2)将步骤一中的镜像放置在与 uuu 烧录工具同一个文件夹下。
(3)以烧录 rootfs 为例,脚本编写如下(example_kernel_nand.uuu 去除 bootloader kernel image 烧写部分):
uuu_version 1.2.39
SDP: boot -f _flash_fw.bin
FB: ucmd setenv fastboot_buffer ${loadaddr} FB: download -f _Image FB: ucmd setenv fastboot_buffer ${fdt_addr} FB: download -f _board.dtb FB: ucmd setenv fastboot_buffer ${initrd_addr} FB: download -f _initramfs.cpio.gz.uboot FB: ucmd setenv bootargs ${bootargs} ${mtdparts} #FB: ucmd setenv bootargs console=ttymxc3,115200 ${mtdparts} FB: acmd ${kboot} ${loadaddr} ${initrd_addr} ${fdt_addr}
FBK: ucmd cat /proc/mtd FBK: ucmd cat /proc/mtd | while read dev size erase name; do mtd=${dev:3}; mtd=${mtd%:}; name=${name%\"}; name=${name#\"}; echo export $name=$mtd >> /tmp/mtd.sh; done;
FBK: ucmd chmod 777 /tmp/mtd.sh
FBK: ucmd mount -t debugfs debugfs /sys/kernel/debug |
# burn rootfs FBK: ucmd source /tmp/mtd.sh; flash_erase /dev/mtd${nandrootfs} 0 0 FBK: ucmd source /tmp/mtd.sh; ubiattach /dev/ubi_ctrl -m ${nandrootfs} FBK: ucmd source /tmp/mtd.sh; ubimkvol /dev/ubi0 -Nnandrootfs -m FBK: ucmd source /tmp/mtd.sh; mkdir -p /mnt/mtd FBK: ucmd source /tmp/mtd.sh; mount -t ubifs ubi0:nandrootfs /mnt/mtd FBK: acmd export EXTRACT_UNSAFE_SYMLINKS=1; tar -jx -C /mnt/mtd FBK: ucp _rootfs.tar.bz2 t:- FBK: sync FBK: ucmd umount /mnt/mtd
FBK: done |
(4)执行烧录命令:
$ sudo ./uuu example_kernel_nand_rootfs.uuu |
二、烧录结果
烧录结果成功显示如下:
参考文献:
UUU.PDF
评论