I.MX6开发板目前支持从TF卡和eMMC启动,启动时,由于各个不同的启动文件对路径有不同的要求,例如uboot文件要求位于启动设备的某个块,dtb文件要求在FAT分区上,文件系统要求在Linux分区上,基于此,我们目前采用将映像制作成img文件的方式,这样可以更简单完成对启动卡的制作。
关于如何制作img,方法如下:
1. 准备我司提供的img文件,假设文件名:EVK-SM9300.img(注意img所在目录的目录名不能有中文)
2. 准备一张MicroSD卡,用读卡器连接至电脑,假设被识别为H盘
3. 运行Win32DiskImager.exe
4. 选择需要烧写的映像文件:EVK-SM9300.img和移动设备
5. 点击“Write”按钮,img文件将被写至MicroSD卡。
6. 根据需求修改对应的文件:
1)Uboot的修改方法:在Linux下执行以下命令将新的u-boot.imx
sudodd if=u-boot.imx of=/dev/sdx bs=512 seek=2 conv=fsync
其中/dev/sdx为MicroSD设备名,请根据实际进行修改
2)Dtb和zImage文件的修改:将文件拷贝至MicroSD卡的FAT分区
3)文件系统的修改:在Lnux下挂载MicroSD卡的第二分区,根据需求修改文件
7. 新建一个文本文档a.txt,然后重命名为a.img
8. 确保MicroSD卡被读卡器连接至电脑
9. 再次运行Win32DiskImager.exe,选择a.img和MicroSD卡的盘符(如H盘),然后单击“Read”按钮,当提示完成时,即成功生成新的img文件a.img
在Ubuntu下制作img文件
1. 执行以下命令安装一些制作img时需要用到的工具
sudo apt-get install util-linux kpartx dosfstools e2fsprogsgddrescue qemu-utils
2. 执行以下指令创建一个新的img文件,大小请根据需求,但请注意img越大,之后烧写的时间会越久,假设img为500MB
Sudo qemu-img create bbb.img 500M
3. 执行以下指令为空的img文件创建两个分区,第一个分区为“W95 FAT16,大小为48MB,第二分区为Linux
sudo sfdisk --in-order --Linux --unit M a.img << EOF
1,48,0xE,*
,,,-
EOF
4. 执行以下指令
sudo kpartx -av bbb.img
系统将输出以下提示信息
add map loop0p1 (252:0): 0 98304 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 923648 linear /dev/loop0100352
可以发现设备被命名为loop0
5. 执行以下指令对a.img的两个分区进行格式化
sudo mkfs.vfat -F 16 /dev/mapper/loop0p1 -n boot
sudo mkfs.ext4 /dev/mapper/loop0p2 -L rootfs
6. 执行以下指将uboot写入img
sudo dd if=u-boot.imx of=/dev/mapper/loop0 bs=512 seek=2 conv=fsync
7. 执行以下指令挂载a.img的两个分区
mkdir -p tmpmnt/boot
mkdir -ptmpmnt/rootfs
sudo mount /dev/mapper/loop0p1 tmpmnt/boot/
sudo mount /dev/mapper/loop0p2 tmpmnt/rootfs/
8. 将zImage、dtb和uEnv.txt文件拷贝至第一个分区
9. 将rootfs放到第二分区
10. 执行以下命令完成a.img的制作
sudo umount tmpmnt/boot/
sudo umounttmpmnt/rootfs/
sudo kpartx -dvbbb.img