首页 > 编程知识 正文

sd卡分区恢复,sd卡分区助手

时间:2023-05-04 07:43:05 阅读:206803 作者:2239

一、前言

最近在omapl138平台移植完uboot和linux内核后,对内核挂载根文件系统的这个过程一直是云里雾里,再加上对文件系统没有深入的理解,就更云里雾里了,因为omapl138支持MMC启动,所以先通过使用linux下fdisk工具对SD卡进行分区,然后分配uboot、kernel和根文件系统的位置,加深理解。

 

二、准备工作

想想Windows下的的C、D..盘,其物理磁盘实为一张物理磁盘,只不过我们使用分区工具把一张物理磁盘在操作系统之上分出了CDE盘,其目的也是为了方便管理,如C盘放操作系统,D盘存放游戏,E盘..。

 

在嵌入式系统中也是一样,一张SD卡也需要存放不同的数据,bootloader、kernel、环境变量、rootfs等。

我是这样规划SD卡资源分配的:

0~2047扇区:             uboot_spl和uboot

2048~10240扇区:      kernel

10241~7995391扇区   rootfs(ext3)

 

 

首先将SD卡插入SD卡槽(笔记本自带),linux下执行

cat /proc/partitions

查看mtd分区,可知mmcblk0即为SD卡,接下来将使用fdisk对SD卡进行分区

 

三、fdisk对SD卡分区

 

执行 fdisk /dev/mmcblk0

M回车查看command

输入 n

P

1

咦,为何2048扇区以前的扇区号不能被fdisk分区呢?这是个历史原因:bios中启动方式  legacy被efi启动代替而褪去,(没有完全死掉),EFI引导模式需要特殊的引导系统,它使用efi系统去引导,最早要为efi引导代码留出1Mb的空间,现代的分区工具 fdisk 随着也这样做了  

输入起始扇区和结束扇区,完成了添加第一个分区,该分区占用的空间为SD卡第2048~10240扇区共4M,用来存放kernel image。继续按照上述步骤添加第二个分区,添加完成后执行w保存退出fdisk。

 

再次查看dev下的设备节点,犹记的在使用fdisk分区前,dev目录下是没有mmcblkp1和mmcblkp2的,这就说明我们刚才的分区成功了,不信再执行一次

cat /proc/partitions

可以看出mmcblk、mmcblkp1、mmcblkp2的主设备号均为179,次设备号分别为1、2、3。

四、烧录uboot、kernel 、rootfs 烧录spl uboot

dd if=u-boot-spl.ais of=/dev/mmcblk0 seek=10

dd if=u-boot.img of=/dev/mmcblk0 seek=181

 

将u-boot-spl.ais烧录到SD卡第10扇区,u-boot.img烧录至第181扇区

 

制作ext3文件系统

 

Linux内核支持多种文件系统,想象一下我们的U盘格式化时是否有选择文件系统这一项,是的,windows系统之所以识别出U盘中存储的文件,是因为windows支持U盘上的文件系统,加入你把U盘格式化成一块砖头,windows就识别不出来了,只能先将其格式化成windows可识别的文件系统后,再重新将文件拷入U盘,继续使用。

同理,没有格式化的SD卡就是一块砖,没有文件系统,内核是无法挂载进行文件操作的,故我们需要先将mmcblkp2格式化为ext3文件系统,然后将根目录下需要的一切文件拷贝进去,即完成了根文件系统的制作。

 

 

mount -t ext3 /dev/mmcblk0p2 /opt/

cp /study/QemuLearn/rootfs/* /opt/ -rf

umount /opt/

 

至此,一张可以启动的SD卡制作完毕

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。