最近總結(jié)了一下關(guān)于eMMC分區(qū)的一些資料,,在此分享給大家,,希望對大家在這方面的工作有所幫助:
大家一般所熟悉的分區(qū)的概念是在邏輯上將一個磁盤或存儲設(shè)備分為幾個區(qū),,每個區(qū)當做獨立磁盤,,以方便使用和管理,。例如第一個磁盤的第一個分區(qū)叫做sda1,,第二個磁盤的第二個分區(qū)叫做sda2,;第二個磁盤的第一個分區(qū)叫做sdb1,,第二個磁盤的第二個分區(qū)叫做sdb2,。
大家所最為熟知的分區(qū)方式同時也是最主流的主要有兩種:MBR(Master Boot Record)和GPT(GUID Partition Table)。前者應(yīng)用于絕大多數(shù)使用BIOS引導(dǎo)的PC設(shè)備(蘋果使用EFI的方式),而后者主要是針對MBR的一些缺點進行了改進同時還可以兼容MBR并且支持2TB以上的存儲(MBR不支持2TB以上的存儲設(shè)備),。
Android 2.x.x 版本上使用的是MBR,,4.0版本以后就是使用的GPT分區(qū)方式。
注意,,不管是MBR還是GPT,,他們的分區(qū)都是指“邏輯上”的!??!即通過軟件實現(xiàn)的,文件系統(tǒng)級別的,。而我現(xiàn)在要說明的是eMMC本身自己的分區(qū),,即物理上的,不是通過軟件就能實現(xiàn)的分區(qū),。
EMMC的分區(qū)有一些是AP不能修改的(如BOOT1,、BOOT2和RPMB分區(qū)),有一些是可以通過特定的命令和寄存器就可以修改的(如Enhanced Partition和GPAP),。下面就來集體說明一下:
通常,,從廠家出來的eMMC 主要由這幾個部分組成:
1. BOOT Area Partition 1
2. BOOT Area Partition 2
3. RPMB
4. User Data Area
5. Vender private area
上面這5個部分中前4項是AP可以通過配置寄存器進行讀寫并且User Data Area還可以進行分區(qū)配置的,如上圖所示,;下面來對上面的5個部分做一個詳細說明:
1. Boot 1 & Boot 2
這兩個分區(qū)是由廠家在生產(chǎn)過程中配置好了的,,并且其大小是不能由AP進行配置的,當然,,如果你的公司夠牛,,量足夠大,并且也有這個需求的時候可以去要求廠家重新配置此區(qū)域大小,,給你專門供貨,。
Boot 1 和Boot 2這兩個區(qū)域在存儲的穩(wěn)定性、可靠性及擦除次數(shù)上都遠比UDA要好(至于原因請往后看),,所以很多chipset上都會使用這兩個區(qū)域來存放一下關(guān)鍵數(shù)據(jù),,如boot image,default 配置參數(shù)等等,。當然不同的chipset的配置方法也不盡相同,。這個可以找chipset的工程師詢問。據(jù)筆者所知:以大陸市占最大的兩家chipset為例,,MTK使用UDA來存放boot data,,而使用boot area來存放配置參數(shù);Qualcomm則使用Boot 1 來存放boot data,,boot 2 來存放配置參數(shù),。
另外,,不同的eMMC版本一般對Boot area和RPMB的容量大小需求也不同,如下作一個簡單的參考:
2. RPMB
RPMB是Replay Protected Memory Block的縮寫,,他的存在目的是用來給系統(tǒng)存放一些特殊的,、需要進行訪問授權(quán)的數(shù)據(jù);他的請求及回應(yīng)類型如下所:
據(jù)筆者所知,,目前大陸的手機及平板廠商還沒有一家使用到此區(qū)域的,。
3. UDA
User Data Area就是AP及用戶可以進行讀寫存儲的區(qū)域,通常其大小為整塊EMMC表示大小的93%左右,,即4GB的eMMC UDA的區(qū)域只有4GB*93%=3809MB,。
之前說的BOOT1&2、RPMB和UDA區(qū)域我們都可以認為他們在物理上是獨立的(當然都是存在于同一塊die上),。即他們各自的物理起始地址都是0x0,。這個在出廠的時候就會設(shè)置完成。下面我們就來說兩種可以在物理上進行獨立分區(qū)的方式:
a) GPAP
GPAP即General Purpose Area Partitions,,eMMC 的spec上定義每個eMMC 最多可以通過配置寄存器來定義4個GPAP:
GPAP配置定義完成之后每一個GPAP的起始地址都為0x0,;即可以相應(yīng)地將其認為是獨立的一塊區(qū)域,。只是在存放數(shù)據(jù)的時候會需要從新根據(jù)他的起始地址進行計算然后再存儲數(shù)據(jù),。這樣必然會增加一定的工作量;據(jù)筆者所知,,目前大陸的手機及平板幾乎沒有用到這個功能,。都是使用一整塊的UDA,然后通過文件系統(tǒng)去進行邏輯上的分區(qū)使用,。
我想肯定會有讀者想問那這個功能到底有什么用呢,?我想說eMMC是一個通過的存儲設(shè)備,并不止是為手機和平板使用,。當一個設(shè)備有多個CPU的時候并且他們的功能還不同時,,這個時候使用GPAP這個功能就非常方便了。
b) Enhanced Partition
Enhanced Partition這也是一個在手機及平板上使用較少的功能,。為什么通過配置原本的UDA就可以變成“Enhanced”的呢,?既然這么有用,為什么不將整個UDA配置成為”Enhanced”的呢,?別著急,,我來一一作答。
我們知道eMMC只是指他的接口標準,,而他真正的存儲介質(zhì)還是NAND Flash, 而NAND又分為SLC,、MLC和TLC(詳細區(qū)別請參考我之前的文章),他們的穩(wěn)定性,、可靠性和擦除次數(shù)又有很大區(qū)別,,當然中國廠商最關(guān)心的成本也相差很大;目前市場上主流的eMMC還是以MLC的NAND 存儲介質(zhì)為主,而TLC的eMMC也在逐漸的增加,。其中以Samsung的TLC 的emmc最為成熟市占率也最高,。我們這里先以MLC的EMMC來進行介紹:
以現(xiàn)在市面上最先進的NAND制程20nm的MLC為例,擦除次數(shù)大概在3000~5000cycle,。而SLC的擦除次數(shù)則在25000~40000cycle,。很明顯SLC 要比MLC性能更好,數(shù)據(jù)存儲更穩(wěn)定,。
而我們這里介紹的Enhanced Partition的主要功能就是將MLC配置成為SLC?,F(xiàn)在大家明白他為什么被稱之為“Enhanced”的了!是相對于MLC(也就是default storage media)來說的,。
當然,,從MLC配置為SLC不是沒有代價的,這個代價自然就是容量變小,,會變多小呢,?容量只有原來的一半!??!原本1GB的MLC通過配置成SLC就只剩下512MB了,你說誰會愿意這樣去大容量地轉(zhuǎn)換呢,?
據(jù)筆者所知,,目前使用過這個功能的就只有臺灣的HTC,他們是用來存儲boot data,。另外,,大陸也有一家大廠正在嘗試使用Enhanced Partition來做為swap 虛擬內(nèi)存使用。
4. Vender Private Area
在eMMC里面除了AP能操作(即可識別并且可以通過地址進行訪問)的boot 1&2,、RPMB和UDA之外,,其實還有一小部分區(qū)域是AP看不見也不能進行操作的。這部分區(qū)域是由生產(chǎn)廠家預(yù)留的,,他主要是用來存放這樣一些內(nèi)容: eMMC的FW(想知道是什么請參考我之前的文章),,eMMC在boot的時候的code,F(xiàn)TL(Flash Transilation Layer)以及在廠家生產(chǎn)過程中產(chǎn)生的壞塊等等,。
PS: 不是所有廠家的eMMC都支持Enhanced Partition這個功能,,但是只要這個eMMC是支持這個功能的那么他的BOOT Area和RPMB就必須就Enhanced storage media。