首先要了解开发板是否支持sd启动,如果系统不支持sd卡启动就放弃这种方法
首先,插入sd卡到Linux虚拟机中,打开命令行,输入ls /dev/sd*来打印出你的sd卡路径。
这里我的为sdb
然后fdisk /dev/sdb 来对sd卡进行操作,按照提示输入相关选项进行操作。
使用n创建一个分区,然后按p,这里选择将第一个分区作为u-boot的分区,给u-boot镜像留1M的空间,所以新创建的分区用来放zImage和dtb,这里给他们留10M空间,操作方式如下,下图为创建一个分区并设置分区大小为1M。
同理,在创建一个新的分区用来放文件系统,这里文件系统分区大小为zImage分区地址+1 -- sd卡最大地址范围。
分配完空间后,设置p1为u-boot分区
这里选择c W95 FAT32 (LBA),把分区system id类型设置为fat。然后使用a,选择第一个分区为boot类型。
最后出现的效果如下:
创建完分区之后,还需要对分区进行格式化。把p1的fstype格式化为fat,p2的fstype格式化为ext3分区。mke2fs可以用-t选项指定为ext3或者ext4。
mkfs.vfat -F 32 -n "boot" /dev/sdb1
mke2fs -t ext4 -F -L "rootfs" /dev/sdb2
烧录u-boot镜像
dd if=u-boot.imx of=/dev/mmcblk0 bs=1024 seek=1 conv=fsync
通过dd命令烧录uboot.imx到SD卡。这里需要使用seek跳过前1K,这个跟这款芯片有关。
到这里就可以用sd卡启动u-boot了
烧录内核镜像,这里使用挂载的方式进行烧录,其实也可以直接粘贴到对应的盘里。烧录内核镜像时要注意内核支持ext4文件系统
mkdir -p /tmp/kernel
mount /dev/mmcblk0p1 /tmp/kernel
cp -r /mnt/dfos.dtb /tmp/kernel
cp -r /mnt/zImage /tmp/kernel
umount /tmp/kernel
烧录文件系统,同理
mkdir -p /tmp/rootfs
mount /dev/mmcblk0p2 /tmp/rootfs
tar -vxf /mnt/rootfs.tar.bz2 -C /tmp/rootfs/
umount /tmp/rootfs