1. Partitions Overview
eMMC 標(biāo)準(zhǔn)中,將內(nèi)部的 Flash Memory 劃分為 4 類(lèi)區(qū)域,最多可以支持 8 個(gè)硬件分區(qū),如下圖所示:
1.1 概述
一般情況下,Boot Area Partitions 和 RPMB Partition 的容量大小通常都為 4MB,部分芯片廠家也會(huì)提供配置的機(jī)會(huì)。General Purpose Partitions (GPP) 則在出廠時(shí)默認(rèn)不被支持,即不存在這些分區(qū),需要用戶主動(dòng)使能,并配置其所要使用的 GPP 的容量大小,GPP 的數(shù)量可以為 1 - 4 個(gè),各個(gè) GPP 的容量大小可以不一樣。User Data Area (UDA) 的容量大小則為總?cè)萘看笮p去其他分區(qū)所占用的容量。更多各個(gè)分區(qū)的細(xì)節(jié)將在后續(xù)小節(jié)中描述。
1.2 分區(qū)編址
eMMC 的每一個(gè)硬件分區(qū)的存儲(chǔ)空間都是獨(dú)立編址的,即訪問(wèn)地址為 0 - partition size。具體的數(shù)據(jù)讀寫(xiě)操作實(shí)際訪問(wèn)哪一個(gè)硬件分區(qū),是由 eMMC 的 Extended CSD register 的 PARTITION_CONFIG Field 中 的 Bit[2:0]: PARTITION_ACCESS 決定的,用戶可以通過(guò)配置 PARTITION_ACCESS 來(lái)切換硬件分區(qū)的訪問(wèn)。也就是說(shuō),用戶在訪問(wèn)特定的分區(qū)前,需要先發(fā)送命令,配置 PARTITION_ACCESS,然后再發(fā)送相關(guān)的數(shù)據(jù)訪問(wèn)請(qǐng)求。
eMMC 的各個(gè)硬件分區(qū)有其自身的功能特性,多分區(qū)的設(shè)計(jì),為不同的應(yīng)用場(chǎng)景提供了便利。
2. Boot Area Partitions
Boot Area 包含兩個(gè) Boot Area Partitions,主要用于存儲(chǔ) Bootloader,支持 SOC 從 eMMC 啟動(dòng)系統(tǒng)。
2.1 容量大小
兩個(gè) Boot Area Partitions 的大小是完全一致的,由 Extended CSD register 的 BOOT_SIZE_MULT Field 決定,大小的計(jì)算公式如下:
Size = 128Kbytes x BOOT_SIZE_MULT
一般情況下,Boot Area Partition 的大小都為 4 MB,即 BOOT_SIZE_MULT 為 32,部分芯片廠家會(huì)提供改寫(xiě) BOOT_SIZE_MULT 的功能來(lái)改變 Boot Area Partition 的容量大小。BOOT_SIZE_MULT 最大可以為 255,即 Boot Area Partition 的最大容量大小可以為 255 x 128 KB = 32640 KB = 31.875 MB。
2.2 從 Boot Area 啟動(dòng)
eMMC 中定義了 Boot State,在 Power-up、HW reset 或者 SW reset 后,如果滿足一定的條件,eMMC 就會(huì)進(jìn)入該 State。進(jìn)入 Boot State 的條件如下:
Original Boot Operation
CMD 信號(hào)保持低電平不少于 74 個(gè)時(shí)鐘周期,會(huì)觸發(fā) Original Boot Operation,進(jìn)入 Boot State。
Alternative Boot Operation
在 74 個(gè)時(shí)鐘周期后,在 CMD 信號(hào)首次拉低或者 Host 發(fā)送 CMD1 之前,Host 發(fā)送參數(shù)為 0xFFFFFFFA 的 COM0時(shí),會(huì)觸發(fā) Alternative Boot Operation,進(jìn)入 Boot State。
在 Boot State 下,如果有配置 BOOT_ACK,eMMC 會(huì)先發(fā)送 “010” 的 ACK 包,接著 eMMC 會(huì)將最大為 128Kbytes x BOOT_SIZE_MULT 的 Boot Data 發(fā)送給 Host。傳輸過(guò)程中,Host 可以通過(guò)拉高 CMD 信號(hào) (Original Boot 中),或者發(fā)送 Reset 命令 (Alternative Boot 中) 來(lái)中斷 eMMC 的數(shù)據(jù)發(fā)送,完成 Boot Data 傳輸。
Boot Data 根據(jù) Extended CSD register 的 PARTITION_CONFIG Field 的 Bit[5:3]:BOOT_PARTITION_ENABLE 的設(shè)定,可以從 Boot Area Partition 1、Boot Area Partition 2 或者 User Data Area 讀出。
Boot Data 存儲(chǔ)在 Boot Area 比在 User Data Area 中要更加的安全,可以減少意外修改導(dǎo)致系統(tǒng)無(wú)法啟動(dòng),同時(shí)無(wú)法更新系統(tǒng)的情況出現(xiàn)。
(更多 Boot State 的細(xì)節(jié),請(qǐng)參考eMMC 工作模式的 Boot Mode 章節(jié))
2.3 寫(xiě)保護(hù)
通過(guò)設(shè)定 Extended CSD register 的 BOOT_WP Field,可以為兩個(gè) Boot Area Partition 獨(dú)立配置寫(xiě)保護(hù)功能,以防止數(shù)據(jù)被意外改寫(xiě)或者擦出。
eMMC 中定義了兩種 Boot Area 的寫(xiě)保護(hù)模式:
Power-on write protection,使能后,如果 eMMC 掉電,寫(xiě)保護(hù)功能失效,需要每次 Power on 后進(jìn)行配置
Permanent write protection,使能后,即使掉電也不會(huì)失效,主動(dòng)進(jìn)行關(guān)閉才會(huì)失效
3. RPMB Partition
RPMB(Replay Protected Memory Block)Partition 是 eMMC 中的一個(gè)具有安全特性的分區(qū)。
eMMC 在寫(xiě)入數(shù)據(jù)到 RPMB 時(shí),會(huì)校驗(yàn)數(shù)據(jù)的合法性,只有指定的 Host 才能夠?qū)懭耄瑫r(shí)在讀數(shù)據(jù)時(shí),也提供了簽名機(jī)制,保證 Host 讀取到的數(shù)據(jù)是 RPMB 內(nèi)部數(shù)據(jù),而不是攻擊者偽造的數(shù)據(jù)。
RPMB 在實(shí)際應(yīng)用中,通常用于存儲(chǔ)一些有防止非法篡改需求的數(shù)據(jù),例如手機(jī)上指紋支付相關(guān)的公鑰、序列號(hào)等。RPMB 可以對(duì)寫(xiě)入操作進(jìn)行鑒權(quán),但是讀取并不需要鑒權(quán),任何人都可以進(jìn)行讀取的操作,因此存儲(chǔ)到 RPMB 的數(shù)據(jù)通常會(huì)進(jìn)行加密后再存儲(chǔ)。
3.1 容量大小
兩個(gè) RPMB Partition 的大小是由 Extended CSD register 的 BOOT_SIZE_MULT Field 決定,大小的計(jì)算公式如下:
Size = 128Kbytes x BOOT_SIZE_MULT
一般情況下,Boot Area Partition 的大小為 4 MB,即 RPMB_SIZE_MULT 為 32,部分芯片廠家會(huì)提供改寫(xiě) RPMB_SIZE_MULT 的功能來(lái)改變 RPMB Partition 的容量大小。RPMB_SIZE_MULT 最大可以為 128,即 Boot Area Partition 的最大容量大小可以為 128 x 128 KB = 16384 KB = 16 MB。
3.2 Replay Protect 原理
使用 eMMC 的產(chǎn)品,在產(chǎn)線生產(chǎn)時(shí),會(huì)為每一個(gè)產(chǎn)品生產(chǎn)一個(gè)唯一的 256 bits 的 Secure Key,燒寫(xiě)到 eMMC 的 OTP 區(qū)域(只能燒寫(xiě)一次的區(qū)域),同時(shí) Host 在安全區(qū)域中(例如:TEE)也會(huì)保留該 Secure Key。
在 eMMC 內(nèi)部,還有一個(gè)RPMB Write Counter。RPMB 每進(jìn)行一次合法的寫(xiě)入操作時(shí),Write Counter 就會(huì)自動(dòng)加一 。
通過(guò) Secure Key 和 Write Counter 的應(yīng)用,RMPB 可以實(shí)現(xiàn)數(shù)據(jù)讀取和寫(xiě)入的 Replay Protect。
RPMB 數(shù)據(jù)讀取
RPMB 數(shù)據(jù)讀取的流程如下:
Host 向 eMMC 發(fā)起讀 RPMB 的請(qǐng)求,同時(shí)生成一個(gè) 16 bytes 的隨機(jī)數(shù),發(fā)送給 eMMC。
eMMC 將請(qǐng)求的數(shù)據(jù)從 RPMB 中讀出,并使用 Secure Key 通過(guò) HMAC SHA-256 算法,計(jì)算讀取到的數(shù)據(jù)和接收到的隨機(jī)數(shù)拼接到一起后的簽名。然后,eMMC 將讀取到的數(shù)據(jù)、接收到的隨機(jī)數(shù)、計(jì)算得到的簽名一并發(fā)送給 Host。
Host 接收到 RPMB 的數(shù)據(jù)、隨機(jī)數(shù)以及簽名后,首先比較隨機(jī)數(shù)是否與自己發(fā)送的一致,如果一致,再用同樣的 Secure Key 通過(guò) HMAC SHA-256 算法對(duì)數(shù)據(jù)和隨機(jī)數(shù)組合到一起進(jìn)行簽名,如果簽名與 eMMC 發(fā)送的簽名是一致的,那么就可以確定該數(shù)據(jù)是從 RPMB 中讀取到的正確數(shù)據(jù),而不是攻擊者偽造的數(shù)據(jù)。
通過(guò)上述的讀取流程,可以保證 Host 正確的讀取到 RPMB 的數(shù)據(jù)。
RPMB 數(shù)據(jù)寫(xiě)入
RPMB 數(shù)據(jù)寫(xiě)入的流程如下:
Host 按照上面的讀數(shù)據(jù)流程,讀取 RPMB 的 Write Counter。
Host 將需要寫(xiě)入的數(shù)據(jù)和 Write Counter 拼接到一起并計(jì)算簽名,然后將數(shù)據(jù)、Write Counter 以及簽名一并發(fā)給 eMMC。
eMMC 接收到數(shù)據(jù)后,先對(duì)比 Write Counter 是否與當(dāng)前的值相同,如果相同那么再對(duì)數(shù)據(jù)和 Write Counter 的組合進(jìn)行簽名,然后和 Host 發(fā)送過(guò)來(lái)的簽名進(jìn)行比較,如果簽名相同則鑒權(quán)通過(guò),將數(shù)據(jù)寫(xiě)入到 RPMB 中。
通過(guò)上述的寫(xiě)入流程,可以保證 RPMB 不會(huì)被非法篡改。
更多 RPMB 相關(guān)的細(xì)節(jié),可以參考eMMC RPMB章節(jié)。
4. General Purpose Partitions
eMMC 提供了 General Purpose Partitions (GPP),主要用于存儲(chǔ)系統(tǒng)和應(yīng)用數(shù)據(jù)。在很多使用 eMMC 的產(chǎn)品中,GPP 都沒(méi)有被啟用,因?yàn)樗诠δ苌吓c UDA 類(lèi)似,產(chǎn)品上直接使用 UDA 就可以滿足需求。
4.1 容量大小
eMMC 最多可以支持 4 個(gè) GPPs,每一個(gè) GPP 的大小可以單獨(dú)配置。用戶可以通過(guò)設(shè)定 Extended CSD register 的以下三個(gè) Field 來(lái)設(shè) GPPx (x=1~4) 的容量大小:
GP_SIZE_MULT_x_2
GP_SIZE_MULT_x_1
GP_SIZE_MULT_x_0
GPPx 的容量計(jì)算公式如下:
Size = (GP_SIZE_MULT_x_2 * 2^16 + GP_SIZE_MULT_x_1 * 2^8 + GP_SIZE_MULT_x_0 * 2^0) * (Write protect group size)
Write protect group size = 512KB * HC_ERASE_GRP_SIZE * HC_WP_GRP_SIZE
eMMC 中,擦除和寫(xiě)保護(hù)都是按塊進(jìn)行的,上述表達(dá)式中的 HC_WP_GRP_SIZE 為寫(xiě)保護(hù)的操作塊大小,HC_ERASE_GRP_SIZE 則為擦除操作的快的大小。
eMMC 芯片的 GPP 的配置通常是只能進(jìn)行一次 (OTP),一般會(huì)在產(chǎn)品量產(chǎn)階段,在產(chǎn)線上進(jìn)行。
4.2 分區(qū)屬性
eMMC 標(biāo)準(zhǔn)中,為 GPP 定義了兩類(lèi)屬性,Enhanced attribute 和 Extended attribute。每個(gè) GPP 可以設(shè)定兩類(lèi)屬性中的一種屬性,不可以同時(shí)設(shè)定多個(gè)屬性。
Enhanced attribute
Default, 未設(shè)定 Enhanced attribute。
Enhanced storage media, 設(shè)定 GPP 為 Enhanced storage media。
在 eMMC 標(biāo)準(zhǔn)中,實(shí)際上并未定義設(shè)定 Enhanced attribute 后對(duì) eMMC 的影響。Enhanced attribute 的具體作用,由芯片制造商定義。
在實(shí)際的產(chǎn)品中,設(shè)定 Enhanced storage media 后,一般是把該分區(qū)的存儲(chǔ)介質(zhì)從 MLC 改變?yōu)?SLC,提高該分區(qū)的讀寫(xiě)性能、壽命以及穩(wěn)定性。由于 1 個(gè)存儲(chǔ)單元下,MLC 的容量是 SLC 的兩倍,所以在總的存儲(chǔ)單元數(shù)量一定的情況下,如果把原本為 MLC 的分區(qū)改變?yōu)?SLC,會(huì)減少 eMMC 的容量,就是說(shuō),此時(shí) eMMC 的實(shí)際總?cè)萘勘葮?biāo)稱的總?cè)萘繒?huì)小一點(diǎn)。(MLC 和 SLC 的細(xì)節(jié)可以參考Flash Memory章節(jié)內(nèi)容)
Extended attribute
Default, 未設(shè)定 Extended attribute。
System code, 設(shè)定 GPP 為 System code 屬性,該屬性主要用在存放操作系統(tǒng)類(lèi)的、很少進(jìn)行擦寫(xiě)更新的分區(qū)。
Non-Persistent,設(shè)定 GPP 為 Non-Persistent 屬性,該屬性主要用于存儲(chǔ)臨時(shí)數(shù)據(jù)的分區(qū),例如 tmp 目錄所在分區(qū)、 swap 分區(qū)等。
在 eMMC 標(biāo)準(zhǔn)中,同樣也沒(méi)有定義設(shè)定 Extended attribute 后對(duì) eMMC 的影響。Extended attribute 的具體作用,由芯片制造商定義。Extended attribute 主要是跟分區(qū)的應(yīng)用場(chǎng)景有關(guān),廠商可以為不用應(yīng)用場(chǎng)景的分區(qū)做不同的優(yōu)化處理。
5. User Data Area
User Data Area (UDA) 通常是 eMMC 中最大的一個(gè)分區(qū),是實(shí)際產(chǎn)品中,最主要的存儲(chǔ)區(qū)域。
5.1 容量大小
UDA 的容量大小不需要設(shè)置,在配置完其他分區(qū)大小后,再扣除設(shè)置 Enhanced attribute 所損耗的容量,剩下的容量就是 UDA 的容量。
5.2 軟件分區(qū)
為了更合理的管理數(shù)據(jù),滿足不同的應(yīng)用需求,UDA 在實(shí)際產(chǎn)品中,會(huì)進(jìn)行軟件再分區(qū)。目前主流的軟件分區(qū)技術(shù)有 MBR(Master Boot Record)和 GPT(GUID Partition Table)兩種。這兩種分區(qū)技術(shù)的基本原理類(lèi)似,如下圖所示:
軟件分區(qū)技術(shù)一般是將存儲(chǔ)介質(zhì)劃分為多個(gè)區(qū)域,既 SW Partitions,然后通過(guò)一個(gè) Partition Table 來(lái)維護(hù)這些 SW Partitions。在 Partition Table 中,每一個(gè)條目都保存著一個(gè) SW Partition 的起始地址、大小等的屬性信息。軟件系統(tǒng)在啟動(dòng)后,會(huì)去掃描 Partition Table,獲取存儲(chǔ)介質(zhì)上的各個(gè) SW Partitions 信息,然后根據(jù)這些信息,將各個(gè) Partitions 加載到系統(tǒng)中,進(jìn)行數(shù)據(jù)存取。
MBR 和 GPT 此處不展開(kāi)詳細(xì)介紹,更多的細(xì)節(jié)可以參考 wikipedia 上MBR和GPT相關(guān)介紹。
5.3 區(qū)域?qū)傩?/p>
eMMC 標(biāo)準(zhǔn)中,支持為 UDA 中一個(gè)特定大小的區(qū)域設(shè)定 Enhanced attribute。與 GPP 中的 Enhanced attribute 相同,eMMC 標(biāo)準(zhǔn)也沒(méi)有定義該區(qū)域設(shè)定 Enhanced attribute 后對(duì) eMMC 的影響。Enhanced attribute 的具體作用,由芯片制造商定義。
Enhanced attribute
Default, 未設(shè)定 Enhanced attribute。
Enhanced storage media, 設(shè)定該區(qū)域?yàn)?Enhanced storage media。
在實(shí)際的產(chǎn)品中,UDA 區(qū)域設(shè)定為 Enhanced storage media 后,一般是把該區(qū)域的存儲(chǔ)介質(zhì)從 MLC 改變?yōu)?SLC。通常,產(chǎn)品中可以將某一個(gè) SW Partition 設(shè)定為 Enhanced storage media,以獲得更好的性能和健壯性。
6. eMMC 分區(qū)應(yīng)用實(shí)例
在一個(gè) Android 手機(jī)系統(tǒng)中,各個(gè)分區(qū)的呈現(xiàn)形式如下:
mmcblk0 為 eMMC 的塊設(shè)備;
mmcblk0boot0 和 mmcblk0boot1 對(duì)應(yīng)兩個(gè) Boot Area Partitions;
mmcblk0rpmb 則為 RPMB Partition,
mmcblk0px 為 UDA 劃分出來(lái)的 SW Partitions;
如果存在 GPP,名稱則為 mmcblk0gp1、mmcblk0gp2、mmcblk0gp3、mmcblk0gp4;
root@xxx:/ # ls /dev/block/mmcblk0* /dev/block/mmcblk0 /dev/block/mmcblk0boot0 /dev/block/mmcblk0boot1 /dev/block/mmcblk0rpmb /dev/block/mmcblk0p1 /dev/block/mmcblk0p2 /dev/block/mmcblk0p3 /dev/block/mmcblk0p4 /dev/block/mmcblk0p5 /dev/block/mmcblk0p6 /dev/block/mmcblk0p7 /dev/block/mmcblk0p8 /dev/block/mmcblk0p9 /dev/block/mmcblk0p10 /dev/block/mmcblk0p11 /dev/block/mmcblk0p12 /dev/block/mmcblk0p13 /dev/block/mmcblk0p14 /dev/block/mmcblk0p15 /dev/block/mmcblk0p16 /dev/block/mmcblk0p17 /dev/block/mmcblk0p18 /dev/block/mmcblk0p19 /dev/block/mmcblk0p20 /dev/block/mmcblk0p21 /dev/block/mmcblk0p22 /dev/block/mmcblk0p23 /dev/block/mmcblk0p24 /dev/block/mmcblk0p25 /dev/block/mmcblk0p26 /dev/block/mmcblk0p27 /dev/block/mmcblk0p28 /dev/block/mmcblk0p29 /dev/block/mmcblk0p30 /dev/block/mmcblk0p31 /dev/block/mmcblk0p32
每一個(gè)分區(qū)會(huì)根據(jù)實(shí)際的功能來(lái)設(shè)定名稱。
root@xxx:/ # ls -l /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/ lrwxrwxrwx root root 2015-01-03 04:03 boot -> /dev/block/mmcblk0p22 lrwxrwxrwx root root 2015-01-03 04:03 cache -> /dev/block/mmcblk0p30 lrwxrwxrwx root root 2015-01-03 04:03 custom -> /dev/block/mmcblk0p3 lrwxrwxrwx root root 2015-01-03 04:03 devinfo -> /dev/block/mmcblk0p28 lrwxrwxrwx root root 2015-01-03 04:03 expdb -> /dev/block/mmcblk0p4 lrwxrwxrwx root root 2015-01-03 04:03 flashinfo -> /dev/block/mmcblk0p32 lrwxrwxrwx root root 2015-01-03 04:03 frp -> /dev/block/mmcblk0p5 lrwxrwxrwx root root 2015-01-03 04:03 keystore -> /dev/block/mmcblk0p27 lrwxrwxrwx root root 2015-01-03 04:03 lk -> /dev/block/mmcblk0p20 lrwxrwxrwx root root 2015-01-03 04:03 lk2 -> /dev/block/mmcblk0p21 lrwxrwxrwx root root 2015-01-03 04:03 logo -> /dev/block/mmcblk0p23 lrwxrwxrwx root root 2015-01-03 04:03 md1arm7 -> /dev/block/mmcblk0p17 lrwxrwxrwx root root 2015-01-03 04:03 md1dsp -> /dev/block/mmcblk0p16 lrwxrwxrwx root root 2015-01-03 04:03 md1img -> /dev/block/mmcblk0p15 lrwxrwxrwx root root 2015-01-03 04:03 md3img -> /dev/block/mmcblk0p18 lrwxrwxrwx root root 2015-01-03 04:03 metadata -> /dev/block/mmcblk0p8 lrwxrwxrwx root root 2015-01-03 04:03 nvdata -> /dev/block/mmcblk0p7 lrwxrwxrwx root root 2015-01-03 04:03 nvram -> /dev/block/mmcblk0p19 lrwxrwxrwx root root 2015-01-03 04:03 oemkeystore -> /dev/block/mmcblk0p12 lrwxrwxrwx root root 2015-01-03 04:03 para -> /dev/block/mmcblk0p2 lrwxrwxrwx root root 2015-01-03 04:03 ppl -> /dev/block/mmcblk0p6 lrwxrwxrwx root root 2015-01-03 04:03 proinfo -> /dev/block/mmcblk0p13 lrwxrwxrwx root root 2015-01-03 04:03 protect1 -> /dev/block/mmcblk0p9 lrwxrwxrwx root root 2015-01-03 04:03 protect2 -> /dev/block/mmcblk0p10 lrwxrwxrwx root root 2015-01-03 04:03 recovery -> /dev/block/mmcblk0p1 lrwxrwxrwx root root 2015-01-03 04:03 rstinfo -> /dev/block/mmcblk0p14 lrwxrwxrwx root root 2015-01-03 04:03 seccfg -> /dev/block/mmcblk0p11 lrwxrwxrwx root root 2015-01-03 04:03 secro -> /dev/block/mmcblk0p26 lrwxrwxrwx root root 2015-01-03 04:03 system -> /dev/block/mmcblk0p29 lrwxrwxrwx root root 2015-01-03 04:03 tee1 -> /dev/block/mmcblk0p24 lrwxrwxrwx root root 2015-01-03 04:03 tee2 -> /dev/block/mmcblk0p25 lrwxrwxrwx root root 2015-01-03 04:03 userdata -> /dev/block/mmcblk0p31
7. 參考資料
Embedded Multi-Media Card (e?MMC) Electrical Standard (5.1)[PDF]
Disk partitioning[Web]
Master Boot Record[Web]
GUID Partition Table[Web]
-
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85846 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6825瀏覽量
123332 -
芯片制造
+關(guān)注
關(guān)注
10文章
623瀏覽量
28828 -
emmc
+關(guān)注
關(guān)注
7文章
216瀏覽量
52743
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論