sd卡怎么分区(SD卡分区的步骤和工具推荐)

芯片需要支持SD卡这种启动方式。
准备好u-boot.imx,dtb,zImage,rootfs压缩包

使用fdisk命令对sd卡分区

输入fdisk /dev/mmcblk0.按照提示输入相关选项进行操作。

sd卡怎么分区(SD卡分区的步骤和工具推荐)

可以看到我这张SD卡的相关信息,总容量为15931539456字节,31116288个sectors,即一个sector为512字节。

创建第一个分区

sd卡怎么分区(SD卡分区的步骤和工具推荐)

输入n,添加一个新分区,这里提示输入分区号,范围1 ~ 4. 然后输入1,提示我们选择第一个柱面(一个柱面的大小是32KB)。 这里我选择32 ~(32+2048)作为第一个分区作boot分区(用来烧写dtb和kernel分区)。即32KB * 2048 = 64M大小。之所以从32开始,是把前1M(32K*32=1M)空间留给uboot,uboot是裸分区

创建第二个分区

sd卡怎么分区(SD卡分区的步骤和工具推荐)

同样地,创建第二个分区,从2081~486192都划分给第二个分区。 以下是我设置的分区。

分区名分区号大小boot164M文件系统分区2剩余空间

sd卡怎么分区(SD卡分区的步骤和工具推荐)

设置p1为boot分区

sd卡怎么分区(SD卡分区的步骤和工具推荐)
sd卡怎么分区(SD卡分区的步骤和工具推荐)
sd卡怎么分区(SD卡分区的步骤和工具推荐)

使用t选项,选择第一个分区,然后选择c,把分区system id类型设置为fat。然后使用a,选择第一个分区为boot类型。

sd卡怎么分区(SD卡分区的步骤和工具推荐)

可以看到p1后面boot那列多了个*。

格式化p1 p2

创建完分区之后,还需要对分区进行格式化。把p1的fstype格式化为fat,p2的fstype格式化为ext3分区。mke2fs可以用-t选项指定为ext3或者ext4。

mkfs.vfat -F 32 -n “boot” /dev/mmcblk0p1 mke2fs -t ext4 -F -L “rootfs” /dev/mmcblk0p2

烧录uboot.imx

dd if=u-boot.imx of=/dev/mmcblk0 bs=1024 seek=1 conv=fsync

通过dd命令烧录uboot.imx到SD卡。这里需要使用seek跳过前1K,这个跟这款芯片有关。

sd卡怎么分区(SD卡分区的步骤和工具推荐)

做到这一步,已经可以从SD启动u-boot了,不过里面还没有kernel和根文件系统。

烧录kernel

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

至此,就可以从SD卡启动系统了。

关于根文件系统打包

压缩

sudo tar -cvzf rootfs.tar.gz * sudo tar -cvjf rootfs.tar.bz2 *

解压

tar -vxf /mnt/rootfs.tar.gz -C /tmp/rootfs/ –strip-components 1 tar -vxf /mnt/rootfs.tar.bz2 -C /tmp/rootfs/

做成shell脚本一键烧录

使用方法:sd_burn.sh /dev/mmcblk0

#!/bin/sh #execute执行语句成功与否打印 execute () { $* >/dev/null if[ $? -ne 0 ];then echo echo “错误: 执行 $*” echo exit 1 fi } device=$1 dfos_dtb=imx6ull-14×14-evk.dtb uboot=u-boot.imx rootfs_img=rootfs.tar.bz2 #rootfs_img=rootfs.tar.gz #执行格式化$device execute “dd if=/dev/zero of=$device bs=1024 count=1024″ #cat << END | fdisk -H 255 -S 63 $device cat << END | fdisk $devicen p 1 32 2080 n p 2 2081 486192 t 1 c a 1 w END PARTITION1=${device}p1 PARTITION2=${device}p2 #第一个分区创建为Fat32格式 echo “格式化${device}p1 …” if [ -b ${PARTITION1} ]; then echo ${PARTITION1} …” mkfs.vfat -F 32 -n “boot” /dev/mmcblk0p1 else echo “error: no ${PARTITION1} fi #第二个分区创建为ext4格式 echo “格式化${device}p2 …” if [ -b ${PARITION2} ]; then echo ${PARTITION2} …”/mnt/mke2fs -F -L“rootfs” /dev/mmcblk0p2 else echo “错误: /dev下找不到 SD卡 rootfs分区” fi echo “正在烧写${Uboot}${device} execute “dd if=/mnt/${uboot} of=$device bs=1024 seek=1 conv=fsync” sync echo “烧写${Uboot}${device}完成!” echo “正在准备**…” echo “正在**设备树与内核到${PARTITION1},请稍候…” execute “mkdir -p /tmp/kernel” execute “mount ${PARTITION1} /tmp/kernel” execute “cp -r /mnt/${dfos_dtb} /tmp/kernel” execute “cp -r /mnt/zImage /tmp/kernel”syncecho “**设备树与内核到${device}p1完成!” echo “卸载${PARTITION1} execute “umount /tmp/kernel” sleep 1 #解压文件系统到文件系统分区 #挂载文件系统分区 execute “mkdir -p /tmp/rootfs” execute “mount ${PARTITION2} /tmp/rootfs” echo “正在解压文件系统到${PARTITION2} ,请稍候…” #execute “tar -vxf /mnt/${rootfs_img} -C /tmp/rootfs/ –strip-components 1” execute “tar -vxf /mnt/${rootfs_img} -C /tmp/rootfs/” sync echo “解压文件系统到${PARTITION2}完成!” echo “卸载${PARTITION2} execute “umount /tmp/rootfs” execute “rm -rf /tmp/rootfs” sync echo “SD卡启动系统烧写完成!”

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2305938578@qq.com 举报,一经查实,本站将立刻删除。
(0)
上一篇 2023年 12月 10日
下一篇 2023年 12月 10日

相关推荐

发表回复

登录后才能评论