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

【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/mmcblk0p1mke2fs -t ext4 -F -L “rootfs” /dev/mmcblk0p2
烧录uboot.imxdd 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和根文件系统 。
烧录kernelmkdir -p /tmp/kernelmount /dev/mmcblk0p1 /tmp/kernelcp -r /mnt/dfos.dtb /tmp/kernelcp -r /mnt/zImage /tmp/kernelumount /tmp/kernel
烧录根文件系统mkdir -p /tmp/rootfsmount /dev/mmcblk0p2 /tmp/rootfstar -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 1tar -vxf /mnt/rootfs.tar.bz2 -C /tmp/rootfs/
做成shell脚本一键烧录使用方法:sd_burn.sh /dev/mmcblk0
#!/bin/sh#execute执行语句成功与否打印execute (){$* >/dev/nullif[ $? -ne 0 ];thenechoecho “错误: 执行 $*”echoexit 1fi}device=$1dfos_dtb=imx6ull-14×14-evk.dtbuboot=u-boot.imxrootfs_img=rootfs.tar.bz2#rootfs_img=rootfs.tar.gz#执行格式化$deviceexecute “dd if=/dev/zero of=$device bs=1024 count=1024″#cat << END | fdisk -H 255 -S 63 $devicecat << END | fdisk $devicenp1322080np22081486192t1ca1wENDPARTITION1=${device}p1PARTITION2=${device}p2#第一个分区创建为Fat32格式echo “格式化${device}p1 …”if [ -b ${PARTITION1} ]; thenecho “${PARTITION1} …”mkfs.vfat -F 32 -n “boot” /dev/mmcblk0p1elseecho “error: no ${PARTITION1}“fi#第二个分区创建为ext4格式echo “格式化${device}p2 …”if [ -b ${PARITION2} ]; thenecho “${PARTITION2} …”/mnt/mke2fs -F -L“rootfs” /dev/mmcblk0p2elseecho “错误: /dev下找不到 SD卡 rootfs分区”fiecho “正在烧写${Uboot}到${device}“execute “dd if=/mnt/${uboot} of=$device bs=1024 seek=1 conv=fsync”syncecho “烧写${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/”syncecho “解压文件系统到${PARTITION2}完成!”echo “卸载${PARTITION2}“execute “umount /tmp/rootfs”execute “rm -rf /tmp/rootfs”syncecho “SD卡启动系统烧写完成!”