EPT分区表
对,你没有看错是EPT,不是GPT,也不是MBR分区表!
什么是EPT,目前根本没有EPT分区表,EPT是我自定义的一种分区表格式。
EPT是介于MBR和GPT之间的一种分区表格式,比MBR支持更多的分区,比GPT更少的开销。
一个MBR只能记录4个分区,局限比较大;GPT设计得“过于”复杂,在单片机等小系统中使用不太方便,特别是GUID的引入,一个表项数据太长了。
于是我在嵌入式小系统项目中就自定义了一种分区格式,叫EPT!
EPT(E=Embedded P=Partition T=Table)只是我个人定义的规范,写在这里也是为了方便我以后查询,没有别的目的,各位看官不要深扒。
EPT储存方式:
从磁盘(或FLASH)的第1个扇区做为主EPT数据储存区,第2个扇区做为备份EPT。
EPT数据结构:
EPT包括表头与表项,每项均占32字节,目的是为了数据对齐。
表头储存在0-31字节,32字节以后为表项,每个表项均占32字节,且连续储存。
字节顺序为小端格式,如32位字0x12345678,按字节储存为:78 56 34 12。
EPT表头结构:
struct ept_hdr
{
uint32_t magic;//标记=0x00545045,"EPT\0"
uint32_t blksize; //扇区/块大小
uint32_t crc32;//所有表项的CRC32校验,确保完整性,CRC-32-IEEE 802.3标准
uint8_t revd[20]; //保留字节
};
EPT表项结构:
struct ept_item
{
char name[16]; //分区名称
uint32_t start; //起始扇区
uint32_t size; //分区大小
uint8_t revd[8]; //保留字节,以后可以用作分区类型标识
};
示例:
示例说明:
扇区大小:512字节
名称 起始扇区 扇区数量 起始地址 分区大小
boot 0x0100 0x0800 0x020000 0x100000 1MB
logo 0x0900 0x0800 0x120000 0x100000 1MB
kernel 0x1100 0x4000 0x220000 0x800000 8MB
ramdisk 0x5100 0x4000 0xA20000 0x800000 8MB