android10分区镜像,分区和映像 | Android 开源项目 | Android Open Source Project
分區(qū)
Android 設備包含若干個分區(qū),這些分區(qū)在啟動過程中發(fā)揮不同的作用。為了支持 A/B 更新,設備需要為 boot、system、vendor 和 radio 分區(qū)分別單獨配置一個槽位。
boot:boot 分區(qū)包含通過 mkbootimg 組合在一起的內核映像和 RAM 磁盤。為了直接刷寫內核而不刷寫新的 boot 分區(qū),可以使用虛擬分區(qū):kernel:kernel 虛擬分區(qū)僅覆蓋內核(zImage、zImage-dtb、Image.gz-dtb),方法是寫入新的映像來覆蓋舊的映像。為此,它會確定 eMMC 中現(xiàn)有內核映像的起始位置并將新內核映像復制到該位置。請記住,新內核映像可能會大于現(xiàn)有內核映像。引導加載程序可以通過移動其后的任何數(shù)據(jù)來騰出空間或放棄出錯的操作。如果提供的開發(fā)內核不兼容,則可能需要使用相關的內核模塊更新 dtb 分區(qū)(如果存在)、vendor 分區(qū)或 system 分區(qū)。
ramdisk:ramdisk 虛擬分區(qū)通過將新映像寫入舊磁盤來僅覆蓋 RAM 磁盤。為此,它會確定 eMMC 中現(xiàn)有 ramdisk.img 的起始位置并將新 RAM 磁盤映像復制到該位置。請記住,新 RAM 磁盤映像可能會大于現(xiàn)有 RAM 磁盤映像。引導加載程序可以通過移動其后的任何數(shù)據(jù)來騰出空間或放棄出錯的操作。
system:system 分區(qū)主要包含 Android 框架。
recovery:recovery 分區(qū)用于存儲在 OTA 過程中啟動的恢復映像。如果設備支持 A/B 更新,則恢復映像可以是啟動映像中包含的 RAM 磁盤,而不是單獨的映像。
cache:cache 分區(qū)用于存儲臨時數(shù)據(jù),如果設備使用 A/B 更新,則可以不要此分區(qū)。cache 分區(qū)不需要可從引導加載程序寫入,而只需要可清空。大小取決于設備類型和 userdata 分區(qū)的可用空間。目前,50MB 至 100MB 應該沒問題。
misc:misc 分區(qū)供恢復映像使用,存儲空間不能小于 4KB。
userdata:userdata 分區(qū)包含用戶安裝的應用和數(shù)據(jù),包括自定義數(shù)據(jù)。
metadata:如果設備被加密,則需要使用 metadata 分區(qū),該分區(qū)的存儲空間不能小于 16MB。
vendor:vendor 分區(qū)包含所有不可分發(fā)給 Android 開源項目 (AOSP) 的二進制文件。如果沒有專有信息,則可以省略此分區(qū)。
radio:radio 分區(qū)包含無線裝置映像。只有包含無線裝置且在專用分區(qū)中包含無線裝置專用軟件的設備才需要此分區(qū)。
tos:tos 分區(qū)用于存儲 Trusty 操作系統(tǒng)的二進制映像文件,僅在設備包含 Trusty 時使用。
流程
引導加載程序的運作方式如下:首先加載引導加載程序。
引導加載程序初始化內存。
如果使用 A/B 更新,則確定要啟動的當前槽位。
確定是否應按照支持更新中所述改為啟動恢復模式。
引導加載程序加載映像,其中包含內核和 RAM 磁盤(在 Treble 中,包含更多部分)。
引導加載程序開始將內核作為可自行執(zhí)行的壓縮二進制文件加載到內存中。
內核將自身解壓縮并開始執(zhí)行到內存中。
自此,舊版設備從 RAM 磁盤加載 init,而新版設備從 /system 分區(qū)加載它。
init 從 /system 分區(qū)中啟動并開始裝載其他所有分區(qū),如 /vendor、/oem 和 /odm,然后開始執(zhí)行代碼以啟動設備
映像
引導加載程序依賴于下面這些映像。
內核映像
內核映像以標準 Linux 格式創(chuàng)建,如 zImage、Image 或 Image.gz。內核映像可以單獨刷寫,也可以與 RAM 磁盤映像相結合,可以刷寫到 boot 分區(qū),也可以從內存啟動。在創(chuàng)建內核映像時,建議使用連接的設備樹二進制文件,而不是為設備樹使用一個單獨的分區(qū)。為不同的電路板修訂版本使用多個設備樹 Blob (DTB) 時,應按電路板修訂版本降序連接多個 DTB。
RAM 磁盤映像
RAM 磁盤應包含適合作為 rootfs 裝載的根文件系統(tǒng)。RAM 磁盤映像先通過 mkbootfs 與內核映像組合在一起,然后再刷寫到 boot 分區(qū)中。
啟動映像
啟動映像應包含通過未經(jīng)修改的 mkbootimg 組合在一起的內核和 RAM 磁盤。
您可以在以下位置找到 mkbootimg 實現(xiàn):
引導加載程序會讀取由 mkbootimg 生成的
文件系統(tǒng)映像(系統(tǒng)、用戶數(shù)據(jù)和恢復映像)
YAFFS2 映像格式
如果使用原始 NAND 存儲空間,則這些映像必須是由未經(jīng)修改的 mkyaffs2image 生成的 YAFFS2(可以在 Android 開源項目 (AOSP) 的 external/yaffs2/yaffs2/utils 中找到)。它們采用以下格式:| 2k bytes of data| yaffs extra data | padding | | 0 2048 | 0 64 | variable|
引導加載程序負責使用這些映像,并將 YAFFS 額外數(shù)據(jù)轉移到給定 NAND 硬件的帶外區(qū)域中的適當位置。如果需要軟件 ECC,則引導加載程序還應在此時執(zhí)行相應的計算。
稀疏映像格式
如果使用基于塊的存儲設備,則應支持 ext4 或 f2fs。要快速傳輸并刷寫大型空 ext4 文件系統(tǒng) (userdata),應以稀疏格式存儲映像,映像中包含有關文件系統(tǒng)的哪些區(qū)域可以保留不寫的信息。文件格式由 mke2fs 實用程序編寫,該實用程序還用于創(chuàng)建文件格式由引導加載程序讀取和刷寫的映像。有關屬性,請參見下面幾部分:
文件格式
所有字段都采用無符號的小端字節(jié)序
文件包含一個文件標頭,后跟一系列區(qū)塊
文件標頭、區(qū)塊標頭和區(qū)塊數(shù)據(jù)全部都是 4 個字節(jié)長的倍數(shù)
標頭
32 位魔數(shù):0xed26ff3a
16 位 Major 版本 (0x1) - 拒絕 Major 版本更高的映像
16 位 Minor 版本 (0x0) - 允許 Minor 版本更高的映像
以字節(jié)為單位的 16 位文件標頭大小(在 v1.0 中為 28 位)
以字節(jié)為單位的 16 位區(qū)塊標頭大小(在 v1.0 中為 12 位)
以字節(jié)為單位的 32 位塊大小,必須是 4 的倍數(shù)
輸出文件中的 32 位塊總大小
輸入文件中的 32 位區(qū)塊總大小
原始數(shù)據(jù)的 32 位 CRC32 校驗和(將“隨意”算作 0 標準 802.3 多項式)使用公開域表格實現(xiàn)
區(qū)塊
16 位區(qū)塊類型:
0xCAC1 原始
0xCAC2 填充
0xCAC3 隨意
16 位保留(寫入為 0,讀取時忽略)
輸出映像中以塊為單位的 32 位區(qū)塊大小
區(qū)塊輸入文件中以字節(jié)為單位的 32 位總大小(包括區(qū)塊標頭和數(shù)據(jù))
數(shù)據(jù)
對于原始類型,表示原始數(shù)據(jù),即以塊為單位的大小 * 以字節(jié)為單位的塊大小
對于填充類型,表示 4 字節(jié)的填充數(shù)據(jù)
實現(xiàn)寫入程序
mke2fs 實用程序已經(jīng)知道需要寫入映像的哪些區(qū)域,并且會在它們之間編碼“隨意”區(qū)塊。另一個工具 img2simg 會將常規(guī)(非稀疏)映像轉換為稀疏映像。常規(guī)映像沒有關于“隨意”區(qū)域的信息,轉換過程至多能做到的是查找重復數(shù)據(jù)塊,以減小所生成映像的大小。
實現(xiàn)讀取程序
讀取程序應拒絕 Major 版本未知的映像,但應接受 Minor 版本未知的映像。讀取程序可能會拒絕區(qū)塊大小不受其支持的映像。
Major 版本經(jīng)過驗證后,讀取程序應忽略具有未知類型字段的區(qū)塊。它應使用“文件中的區(qū)塊大小”跳過文件中的區(qū)塊,并跳過輸出中的“以塊為單位的區(qū)塊大小”塊。
應針對將要寫入磁盤的數(shù)據(jù)計算循環(huán)冗余校驗 802.3 CRC32。任何未寫入的區(qū)域(隨意區(qū)域或跳過的區(qū)塊)都應在 CRC 中算作 0。應將寫入或跳過的總塊數(shù)與標頭中的“總塊數(shù)”字段進行比較。simg2img 工具會將稀疏映像格式轉換為標準映像,這樣會丟失稀疏信息。
總結
以上是生活随笔為你收集整理的android10分区镜像,分区和映像 | Android 开源项目 | Android Open Source Project的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 activemq,activem
- 下一篇: android 双 webview,An