在玩STM32MP157C-DK2,这个板子只能用SD卡作存储介质,uboot、kernel、rootfs都是放在SD卡里面,对烧录过软件的SD卡里面的数据很感兴趣,这里从不同的方式查看SD卡里面的文件/数据。我正在用着个SD卡是16G的。烧录的系统是ST官方的Starter Package.

在window中用WinHex查看

把烧录了固件的SD卡通过读卡器插到Win7,由于window不支持SD卡中的文件系统,不能通过文件管理器打开查看SD卡,在我的电脑上会弹出如下对话框:


但是可以用WinHex打开,打开后如下:

从上图中可以看到,SD卡被分为了9个区。其中4、5、6、7有文件系统,使用了Ext4格式。


在Linux中通过文件管理器查看

把有固件的SD卡用读卡器接到Linux PC,会有4个磁盘,如下:

正好与win7中用winHex打开,看到的4个Ext4格式的分区对应,

4个分区中的文件为:

GPT

1.启动流程

从SD卡启动的流程:

  1. bootrom 从SD读取二进制数据的FSBL,也就是uboot spl,没有文件系统,
  2. FSBL再从SD卡读取SSBL,uboot部分,也是没有文件系统
  3. FSBL是在DRAM跑的,可是实现比较复杂的应用,所以可以支持文件系统,所以FSBL从SD卡中的分区表读取其他的启动信息根内核,启动内核

那怎么从SD卡中定位FSBL、SSBL?

2.磁盘分区

这个跟磁盘分区有关,STM32MP157用的是GPT分区,在SD卡的前几个分区有SD卡的分区信息,从这些信息可以知道哪些信息存放在哪里,GPT分区结构如下:

GPT分区的分区表:

LBA 0

保护性MBR(Protective MBR),在磁盘的第一个扇区(LBA 0),Protective MBR 的数据格式如下:

STM32MP SD卡中保护性MBR为:

00 
00 00 00 
ee 
00 00 00 
01 00 00 00 
ff cb da 01 

其中0xee值标注了该分区为GPT分区


LBA 1

GPT头,下图是STM32MPU1 SD卡中的LBA 1中的数据:

为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。(GPT数据结构在磁盘上存储两次:开始和结束各一次。)

3 分区表项

分区表的格式如下:

参考: