eMMC分区详解

本文介绍了eMMC的不同分区及其特点,包括不可更改的BOOT1、BOOT2和RPMB分区,以及可配置的UDA和GPAP分区。同时探讨了EnhancedPartition功能如何提升存储稳定性。
部署运行你感兴趣的模型镜像


阅读:15472014-03-23 13:57
转载请注明出处,谢谢:http://blog.sina.cn/dpool/blog/s/blog_5c401a150101jcos.html?vt=4
最近总结了一下关于eMMC分区的一些资料,在此分享给大家,希望对大家在这方面的工作有所帮助:
大家一般所熟悉的分区的概念是在逻辑上将一个磁盘或存储设备分为几个区,每个区当做独立磁盘,以方便使用和管理。例如第一个磁盘的第一个分区叫做sda1,第二个磁盘的第二个分区叫做sda2;第二个磁盘的第一个分区叫做sdb1,第二个磁盘的第二个分区叫做sdb2。
大家所最为熟知的分区方式同时也是最主流的主要有两种:MBR(Master Boot Record)和GPT(GUID Partition Table)。前者应用于绝大多数使用BIOS引导的PC设备(苹果使用EFI的方式),而后者主要是针对MBR的一些缺点进行了改进同时还可以兼容MBR并且支持2TB以上的存储(MBR不支持2TB以上的存储设备)。
Android 2.x.x 版本上使用的是MBR,4.0版本以后就是使用的GPT分区方式。
注意,不管是MBR还是GPT,他们的分区都是指“逻辑上”的!!!即通过软件实现的,文件系统级别的。而我现在要说明的是eMMC本身自己的分区,即物理上的,不是通过软件就能实现的分区。
EMMC的分区有一些是AP不能修改的(如BOOT1、BOOT2和RPMB分区),有一些是可以通过特定的命令和寄存器就可以修改的(如Enhanced Partition和GPAP)。下面就来集体说明一下:
通常,从厂家出来的eMMC 主要由这几个部分组成:
1. BOOT Area Partition 1
2. BOOT Area Partition 2
3. RPMB
4. User Data Area
5. Vender private area
eMMC分区详解X

上面这5个部分中前4项是AP可以通过配置寄存器进行读写并且User Data Area还可以进行分区配置的,如上图所示;下面来对上面的5个部分做一个详细说明:
1. Boot 1 & Boot 2
这两个分区是由厂家在生产过程中配置好了的,并且其大小是不能由AP进行配置的,当然,如果你的公司够牛,量足够大,并且也有这个需求的时候可以去要求厂家重新配置此区域大小,给你专门供货。
Boot 1 和Boot 2这两个区域在存储的稳定性、可靠性及擦除次数上都远比UDA要好(至于原因请往后看),所以很多chipset上都会使用这两个区域来存放一下关键数据,如boot image,default 配置参数等等。当然不同的chipset的配置方法也不尽相同。这个可以找chipset的工程师询问。据笔者所知:以大陆市占最大的两家chipset为例,MTK使用UDA来存放boot data,而使用boot area来存放配置参数;Qualcomm则使用Boot 1 来存放boot data,boot 2 来存放配置参数。
另外,不同的eMMC版本一般对Boot area和RPMB的容量大小需求也不同,如下作一个简单的参考:
eMMC分区详解
2. RPMB
RPMB是Replay Protected Memory Block的缩写,他的存在目的是用来给系统存放一些特殊的、需要进行访问授权的数据;他的请求及回应类型如下所:
eMMC分区详解
据笔者所知,目前大陆的手机及平板厂商还没有一家使用到此区域的。
3. UDA
User Data Area就是AP及用户可以进行读写存储的区域,通常其大小为整块EMMC表示大小的93%左右,即4GB的eMMC UDA的区域只有4GB*93%=3809MB。
eMMC分区详解
之前说的BOOT1&2、RPMB和UDA区域我们都可以认为他们在物理上是独立的(当然都是存在于同一块die上)。即他们各自的物理起始地址都是0x0。这个在出厂的时候就会设置完成。下面我们就来说两种可以在物理上进行独立分区的方式:
a) GPAP
GPAP即General Purpose Area Partitions,eMMC 的spec上定义每个eMMC 最多可以通过配置寄存器来定义4个GPAP:
eMMC分区详解
eMMC分区详解
GPAP配置定义完成之后每一个GPAP的起始地址都为0x0;即可以相应地将其认为是独立的一块区域。只是在存放数据的时候会需要从新根据他的起始地址进行计算然后再存储数据。这样必然会增加一定的工作量;据笔者所知,目前大陆的手机及平板几乎没有用到这个功能。都是使用一整块的UDA,然后通过文件系统去进行逻辑上的分区使用。
我想肯定会有读者想问那这个功能到底有什么用呢?我想说eMMC是一个通过的存储设备,并不止是为手机和平板使用。当一个设备有多个CPU的时候并且他们的功能还不同时,这个时候使用GPAP这个功能就非常方便了。
b) Enhanced Partition
Enhanced Partition这也是一个在手机及平板上使用较少的功能。为什么通过配置原本的UDA就可以变成“Enhanced”的呢?既然这么有用,为什么不将整个UDA配置成为”Enhanced”的呢?别着急,我来一一作答。
我们知道eMMC只是指他的接口标准,而他真正的存储介质还是NAND Flash, 而NAND又分为SLC、MLC和TLC(详细区别请参考我之前的文章),他们的稳定性、可靠性和擦除次数又有很大区别,当然中国厂商最关心的成本也相差很大;目前市场上主流的eMMC还是以MLC的NAND 存储介质为主,而TLC的eMMC也在逐渐的增加。其中以Samsung的TLC 的emmc最为成熟市占率也最高。我们这里先以MLC的EMMC来进行介绍:
以现在市面上最先进的NAND制程20nm的MLC为例,擦除次数大概在3000~5000cycle。而SLC的擦除次数则在25000~40000cycle。很明显SLC 要比MLC性能更好,数据存储更稳定。
eMMC分区详解
eMMC分区详解
而我们这里介绍的Enhanced Partition的主要功能就是将MLC配置成为SLC。现在大家明白他为什么被称之为“Enhanced”的了!是相对于MLC(也就是default storage media)来说的。
当然,从MLC配置为SLC不是没有代价的,这个代价自然就是容量变小,会变多小呢?容量只有原来的一半!!!原本1GB的MLC通过配置成SLC就只剩下512MB了,你说谁会愿意这样去大容量地转换呢?
据笔者所知,目前使用过这个功能的就只有台湾的HTC,他们是用来存储boot data。另外,大陆也有一家大厂正在尝试使用Enhanced Partition来做为swap 虚拟内存使用。
4. Vender Private Area
在eMMC里面除了AP能操作(即可识别并且可以通过地址进行访问)的boot 1&2、RPMB和UDA之外,其实还有一小部分区域是AP看不见也不能进行操作的。这部分区域是由生产厂家预留的,他主要是用来存放这样一些内容: eMMC的FW(想知道是什么请参考我之前的文章),eMMC在boot的时候的code,FTL(Flash Transilation Layer)以及在厂家生产过程中产生的坏块等等。
PS: 不是所有厂家的eMMC都支持Enhanced Partition这个功能,但是只要这个eMMC是支持这个功能的那么他的BOOT Area和RPMB就必须就Enhanced storage media。

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

<think>嗯,用户想了解eMMC分区表的结构、配置和格式。首先,我需要回忆一下eMMC的基本知识。根据引用[2],eMMC由闪存、控制器和接口组成,支持多种分区。用户提到的分区表可能涉及eMMC的不同存储区域,比如BOOT、RPMB等。 接下来,查看用户提供的引用,特别是引用[1]和[3],里面提到eMMC分区结构包括BOOT、RPMB、General Purpose和User Data。引用[3]详细说明了各分区的用途,比如RPMB用于安全存储,需要鉴权。引用[4]则展示了海思平台上的eMMC分区配置脚本,涉及格式化与挂载步骤。 用户的问题包括分区结构、配置方法和格式。需要分点回答,结构清晰。首先解释标准分区的结构,如BOOT、RPMB等,然后说明配置方式,包括CID寄存器设置和命令行工具。最后,分区格式可能涉及EXT4等文件系统,如引用[4]中的mkfs.ext4命令。 要注意用户可能是在嵌入式系统开发中遇到分区配置问题,比如如何划分不同区域,或者处理分区挂载失败的情况。需要确保回答涵盖结构、配置步骤和常见格式,并结合引用中的实际例子,如海思的脚本,增加实用性。 另外,用户可能还关心安全分区(RPMB)的配置流程,这里需要强调签名和计数器的步骤,如引用[3]所述。同时,要提到不同厂商的支持情况,如引用[1]指出并非所有eMMC都支持Enhanced Partition,这点很重要,避免用户遇到兼容性问题。 最后,生成相关问题时,要考虑用户可能的后续疑问,比如如何调整分区大小、处理挂载失败或RPMB的具体应用场景。这些问题能帮助用户深入理解实际操作中的挑战和解决方案。</think>### eMMC分区表结构及配置详解 #### 一、eMMC分区表标准结构 根据JEDEC标准,eMMC存储空间分为以下核心分区(引用[1][3]): 1. **BOOT Area** - 用于存放启动代码,通常分为两个独立区域(Boot1/Boot2) - 支持硬件级启动保护,支持增强型分区(Enhanced Partition)的eMMC会扩展此功能 - 示例配置:$$ \text{容量}=2\text{MB} \times \text{分区数量} $$ 2. **RPMB(Replay Protected Memory Block)** - 安全存储区,需通过HMAC-SHA256签名验证访问(引用[3]) - 典型应用:存储指纹、密钥等敏感数据 - 写入流程:计数器校验 → 签名验证 → 数据写入 3. **General Purpose Partitions(GPP)** - 最多支持4个用户自定义分区(GPP1-GPP4) - 用途示例:日志存储、系统备份、OEM配置 - 容量公式:$$ \text{GPP}_n = \text{总容量} \times \text{配置百分比} $$ 4. **User Data Area(UDA)** - 主要用户数据存储区,通常包含文件系统(如EXT4) - 在Linux中对应设备节点:`/dev/mmcblk0pX`(引用[4]) #### 二、分区配置方法 1. **CID寄存器配置** - 通过`EXT_CSD`寄存器设置分区属性 - 关键参数: ```c BOOT_SIZE_MULT = 0x0000_00E0 // 启动分区容量 GP_SIZE_MULTx = [0x0000_00F0-0x0000_00FC] // GPP分区配置 ``` 2. **命令行工具配置** 海思平台示例(引用[4]): ```bash # 格式化分区 mkfs.ext4 /dev/mmcblk0p4 # 挂载配置分区 mount -t ext4 /dev/mmcblk0p4 /config ``` 3. **安全分区操作** RPMB访问需使用`mmc-utils`工具: ```bash mmc rpmb write-counter /dev/mmcblk0rpmb mmc rpmb write /dev/mmcblk0rpmb auth_key.bin 0x1 ``` #### 三、典型分区格式 | 分区类型 | 文件系统 | 访问方式 | 典型用途 | |---------|---------|---------|---------| | BOOT | RAW | 块设备 | 启动镜像 | | RPMB | 加密RAW | 安全API | 密钥存储 | | GPP | EXT4 | 块设备 | 系统日志 | | UDA | F2FS/EXT4 | 挂载点 | 用户数据 | #### 四、关键注意事项 1. 增强型分区需硬件支持(引用[1]) 2. RPMB每次写入需递增计数器(引用[3]) 3. 分区对齐建议:$$ \text{align} = 4\text{KB} \times 2^n $$ 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值