SD卡磁盘信息
2025-08-04
25
0
通过WINHEX分析SD卡的信息:
- 00~1FF:前512字节为MBR
- 200~3FF:全部为00
- 400~:bootloader数据
- FAT32
- EXT3
64字节的分区信息分为4组,每组16字节,其字节如下:
struct
{
UCHAR bootFlag;//80表示可引导,00表示普通 分区
UCHAR StartCH1;
UCHAR StartCH2;
UCHAR StartCh3;
UCHAR PartType;//0C:FAT32,07:NTFS/exFAT,0x83:LINUX原生文件系统,0xEE:GPT保护分区。
UCHAR EndCH1;
UCHAR EndCh2;
UCHAR EndCh3;
ULONG StartLBA;//512字节
ULONG LengthLBA;
}
BOOT分区
从0x400开始十六进制写入BOOTLOEADER数据
FAT32分区
- 一个LBA为512字节
- 800H * 200H = 1M 800H=2048
- 20000H * 200H = 64M
该分区标识为0x80表示一个可引起分区,故会从分区加载系统内核zImage和需要的设备树文件。
bootloader启动后,会自动加载其存储设备中的引起分区。就和BIOS加载硬盘中的引导分区一样。
EXT3
- 020800h=133120
- 03b51c00
EMMC分区信息
核心板EMMC设备分区如下:
Disk /dev/mmcblk1: 7.3 GiB, 7818182656 bytes, 15269888 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x42f6af2a
Device Boot Start End Sectors Size Id Type
/dev/mmcblk1p1 * 2048 67583 65536 32M c W95 FAT32 (LBA)
/dev/mmcblk1p2 67584 15269887 15202304 7.3G 83 Linux
打印其分区信息
root@ATK-IMX6U:/run/media/mmcblk1p2# dd if=/dev/mmcblk1 bs=1k skip=0 count=4 | hexdump -C
4+0 records in
4+0 records out
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 00 00 00 00 00 00 00 00 2a af f6 42 00 00 80 20 |........*..B... |
000001c0 21 00 0c 34 30 04 00 08 00 00 00 00 01 00 00 34 |!..40..........4|
000001d0 31 04 83 81 cb b6 00 08 01 00 00 f8 e7 00 00 00 |1...............|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001000
4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000377667 s, 10.8 MB/s
可以看到,第一个FAT32分区即存储zImage的设备树的信息如下:
- 起始LBA:00 08 00 00 0x800 * 0x200 = 1MB
- 长度LBA:00 00 01 00 0x010000 * 0x200 = 32M
另外根据命令行
dd if=/dev/zero of=/dev/mmcblk1 bs=1k seek=768 conv=fsync count=8
可知,其uboot参数信息存储于768K处
root@ATK-IMX6U:/run/media/mmcblk1p2# dd if=/dev/mmcblk1 bs=1k skip=768 count=4 | hexdump -C
4+0 records in
4+0 records out
4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000432333 s, 9.5 MB/s
00000000 41 e6 a5 41 62 61 75 64 72 61 74 65 3d 31 31 35 |A..Abaudrate=115|
00000010 32 30 30 00 62 6f 61 72 64 5f 6e 61 6d 65 3d 45 |200.board_name=E|
00000020 56 4b 00 62 6f 61 72 64 5f 72 65 76 3d 31 34 58 |VK.board_rev=14X|
00000030 31 34 00 62 6f 6f 74 5f 66 64 74 3d 74 72 79 00 |14.boot_fdt=try.|
00000040 62 6f 6f 74 63 6d 64 3d 72 75 6e 20 66 69 6e 64 |bootcmd=run find|
00000050 66 64 74 3b 6d 6d 63 20 64 65 76 20 24 7b 6d 6d |fdt;mmc dev ${mm|
00000060 63 64 65 76 7d 3b 6d 6d 63 20 64 65 76 20 24 7b |cdev};mmc dev ${|
00000070 6d 6d 63 64 65 76 7d 3b 20 69 66 20 6d 6d 63 20 |mmcdev}; if mmc |
00000080 72 65 73 63 61 6e 3b 20 74 68 65 6e 20 69 66 20 |rescan; then if |
eMMC 存储空间分为 多个硬件分区:
分区 | 用途 | 访问方式 |
---|---|---|
User Data Area (UDA) | 存放主文件系统(如 ext4/FAT) | /dev/mmcblk1 |
Boot0/Boot1 | 存放 Bootloader(如 U-Boot) | /dev/mmcblk1boot0, /dev/mmcblk1boot1 |
RPMB | 安全存储(加密密钥、指纹等) | 需特殊授权访问 |
GPx (General Purpose) | 用户自定义分区 | 可选 |
所以一个/dev/mmcblk1boot0和 /dev/mmcblk1boot1不需像SD卡一样要在/dev/mmcblk1上分区,只需要启用即可。