摘 要 本文以存儲(chǔ)設(shè)備管理為出發(fā)點(diǎn),從Android系統(tǒng)的分區(qū)管理展開討論,闡述操作系統(tǒng)的引導(dǎo)方式、分區(qū)表的原理、類型、作用,并以開發(fā)實(shí)例說明產(chǎn)品分區(qū)模式,如何對(duì)分區(qū)進(jìn)行擴(kuò)展,以便更為有效的利用內(nèi)部存儲(chǔ)空間,提高存儲(chǔ)設(shè)備的可用性和擴(kuò)展性。
關(guān)鍵詞 Android;分區(qū);高通
中圖分類號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-7597(2014)19-0044-03
Android是一種基于Linux平臺(tái)的自由及開放源代碼的操作系統(tǒng),是目前世界上最流行的移動(dòng)終端操作系統(tǒng)之一,廣泛用于手機(jī)、平板電腦等設(shè)備中。
高通(Qualcomm)是一家美國(guó)的無線電通信技術(shù)研發(fā)公司,其一直致力于電信設(shè)備和消費(fèi)電子設(shè)備的新技術(shù)研發(fā),尤其是近年來其推出的高度集成的“全合一”移動(dòng)處理器系列平臺(tái),覆蓋入門級(jí)智能手機(jī)乃至高端智能手機(jī)、平板電腦以及下一代智能終端。特別是,高通的芯片是首個(gè)能夠兼容Android系統(tǒng)的,所以國(guó)內(nèi)外眾多手機(jī)品牌均采用高通作為其智能手機(jī)的主要芯片提供商??梢哉f,高通在智能手機(jī)行業(yè)的地位就相當(dāng)于PC領(lǐng)域的芯片巨頭因特爾。
1 分區(qū)表綜述
眾所周知,以Android平臺(tái)設(shè)計(jì)開發(fā)的智能手機(jī)和平板電腦都有內(nèi)部存儲(chǔ)器,一般為SDIO(Secure Digital Input and Output Card)接口的EMMC(Embedded Multi Media Card)存儲(chǔ)芯片,俗稱閃存。根據(jù)不同產(chǎn)品的配置和需求,容量從4G到128G不等。在使用時(shí),閃存被分成多個(gè)區(qū)域,這個(gè)過程我們把它叫做“分區(qū)”。分區(qū)既可以讓系統(tǒng)和用戶分區(qū)相互隔離,也可以增強(qiáng)系統(tǒng)穩(wěn)定性,有效利用、管理存儲(chǔ)區(qū)域,就如同在圖書館的不同區(qū)域中查找不同類型的書籍。在研究分區(qū)管理之前,必須了解分區(qū)表的概念。
分區(qū)表是將大表的數(shù)據(jù)分成稱為分區(qū)的許多小的子集。倘若磁盤丟失了分區(qū)表,數(shù)據(jù)就無法按順序讀取和寫入,導(dǎo)致無法操作。對(duì)于分區(qū)的格式,目前大容量存儲(chǔ)區(qū)有兩種分區(qū)方式,即:BIOS和硬盤MBR分區(qū)、EFI和硬盤GPT分區(qū)。下面就對(duì)這兩種分區(qū)表進(jìn)行詳細(xì)的說明。
1.1 MBR分區(qū)表
MBR(Master Boot Record),主引導(dǎo)記錄,又叫做主引導(dǎo)扇區(qū),是計(jì)算機(jī)開機(jī)后BIOS訪問硬盤時(shí)所必須要讀取的首個(gè)扇區(qū),是一段512字節(jié)的引導(dǎo)代碼,位于磁盤的第一個(gè)扇區(qū),在硬盤上的位置為(柱面,磁頭,扇區(qū))=(0,0,1)。包含三個(gè)部分:主引導(dǎo)程序、磁盤分區(qū)表和引導(dǎo)記錄。
因主引導(dǎo)記錄在這個(gè)扇區(qū)中占了大部分空間,所以習(xí)慣將該扇區(qū)稱為MBR扇區(qū)。主引導(dǎo)程序即主引導(dǎo)記錄占446字節(jié),它用于硬盤啟動(dòng)時(shí)將系統(tǒng)控制權(quán)轉(zhuǎn)給用戶指定的并在分區(qū)表中登記的某個(gè)操作系統(tǒng)。磁盤分區(qū)表占64字節(jié),根據(jù)規(guī)定,每個(gè)分區(qū)表項(xiàng)占16個(gè)字節(jié),所以最多可以描述、存放4個(gè)分區(qū)信息,這就是為什么MBR模式只能支持4個(gè)主分區(qū)的原因。
主分區(qū)數(shù)目不能超過4個(gè)的限制,很多時(shí)候,4個(gè)主分區(qū)并不能滿足需要。另外最關(guān)鍵的是MBR分區(qū)方案無法支持超過2TB容量的磁盤。因?yàn)檫@一方案用4個(gè)字節(jié)存儲(chǔ)分區(qū)的總扇區(qū)數(shù),最大能表示2的32次方的扇區(qū)個(gè)數(shù),按每扇區(qū)512字節(jié)計(jì)算,每個(gè)分區(qū)最大不能超過2TB。磁盤容量超過2TB以后,分區(qū)的起始位置也就無法表示了。在硬盤容量迅速遞增的今天,2TB的限制早已被突破。由此可見,MBR分區(qū)方案現(xiàn)在已經(jīng)無法再滿足需要了。因此在大容量硬盤和分區(qū)出現(xiàn)之后,MBR分區(qū)方式逐漸被GPT分區(qū)表取代。
1.2 GPT分區(qū)表
1.2.1 GPT說明
GPT(GUID Partition Table),全球唯一標(biāo)識(shí)分區(qū)表,是一種由基于可擴(kuò)展固件接口(EFI)使用的磁盤分區(qū)架構(gòu)。它屬于可擴(kuò)展固件接口(EFI)標(biāo)準(zhǔn)中的一部分,用來替代主引導(dǎo)記錄分區(qū)表。
GPT使用邏輯區(qū)塊地址(LBA)作為尋址方式,在GPT硬盤中,分區(qū)表的位置信息存儲(chǔ)在GPT頭中,但為了兼容MBR,硬盤的第一個(gè)扇區(qū)LBA 0仍然用作MBR,依舊保留了MBR的結(jié)構(gòu)。GTP頭存儲(chǔ)于LBA 1,在GPT工作時(shí),會(huì)優(yōu)先讀取GPT(LBA 1)內(nèi)容。接下來是分區(qū)表,從LBA 34開始是第一個(gè)數(shù)據(jù)分區(qū)的
開始。
1.2.2 GPT分區(qū)類型GUID
GPT支持不同的操作系統(tǒng),如Windows、Mac OS、各主流的發(fā)行版Unix和Linux操作系統(tǒng)。GUID的作用是用不同的ID來標(biāo)記不同的操作系統(tǒng)和分區(qū)類型,操作系統(tǒng)在啟動(dòng)時(shí),根據(jù)GUID即可判斷分區(qū)類型的合法性。
操作
系統(tǒng) 分區(qū)類型 GUID
Linux 數(shù)據(jù)分區(qū) EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
RAID分區(qū) A19D880F-05FC-4D3B-A006-743F0F84911E
交換分區(qū) 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
邏輯卷管理器(LVM)分區(qū) E6D6D379-F507-44C2-A23C-238F2A3DF928
保留 8DA63339-0007-60C0-C436-083AC8230908
1.2.3 GPT與MBR對(duì)比
與MBR分區(qū)模式相比,GPT有以下優(yōu)點(diǎn)。
1)GPT允許每個(gè)磁盤高達(dá)128個(gè)分區(qū),而MBR磁盤最多只有4個(gè)主分區(qū),或者3個(gè)主分區(qū)加一個(gè)擴(kuò)展分區(qū)。
2)GPT支持高達(dá)18千兆兆字節(jié)(EB)的卷大小,而MBR最大卷為2TB;(18EB= 19327352832GB)。
3)允許將主磁盤分區(qū)表和備份磁盤分區(qū)表用于冗余。endprint
4)支持唯一的磁盤和分區(qū)ID(GUID)。
5)性能更加穩(wěn)定。
2 高通MSM86XX平臺(tái)分區(qū)模式介紹
近年來,Android作為一個(gè)新興的操作系統(tǒng),迅速的發(fā)展為一個(gè)生態(tài)圈,隨著系統(tǒng)的普及,越來越多的電子產(chǎn)品使用此操作系統(tǒng)。在逐漸被人們熟知的同時(shí),也有更多的芯片公司、產(chǎn)品公司、設(shè)計(jì)公司和方案公司對(duì)其進(jìn)行研究、開發(fā)和擴(kuò)展。分區(qū)的管理是普通消費(fèi)類電子產(chǎn)品最基本和最重要的一項(xiàng)功能,它既要保證設(shè)備穩(wěn)定工作,又要合理有效的使用存儲(chǔ)設(shè)備,確保數(shù)據(jù)文件的正確性。
Android是以Linux內(nèi)核為基礎(chǔ)的一套軟件堆疊系統(tǒng),所以Android系統(tǒng)的分區(qū)格式也使用Linux的分區(qū)格式。由于GPT也支持Linux操作系統(tǒng),加上現(xiàn)在使用Linux和Android系統(tǒng)的嵌入式產(chǎn)品,都包含多個(gè)分區(qū),例如:?jiǎn)?dòng)、內(nèi)核、緩沖、系統(tǒng)、用戶、恢復(fù)等分區(qū),需要十幾甚至二十多個(gè)分區(qū)。因?yàn)镸BR只支持4個(gè)主分區(qū),所以已經(jīng)不能滿足以上需求,必須使用GPT分區(qū)模式。下面就以現(xiàn)在主流的電子產(chǎn)品解決方案——高通平臺(tái),說明GPT分區(qū)在Android系統(tǒng)中的應(yīng)用和開發(fā)過程。
前面提到,手機(jī)、平板類電子產(chǎn)品都是用EMMC作為內(nèi)部存儲(chǔ)器,EMMC上的內(nèi)容由系統(tǒng)鏡像和用戶數(shù)據(jù)文件組成,用戶數(shù)據(jù)文件是用戶在使用過程中創(chuàng)建的個(gè)人文件,而系統(tǒng)鏡像是在產(chǎn)品出廠前,使用燒錄軟件下載到EMMC中,產(chǎn)品才能正常工作。每個(gè)平臺(tái)的生產(chǎn)廠商都會(huì)提供一套這樣的工具和配置文件,用于開發(fā)和生產(chǎn)階段下載系統(tǒng)鏡像,其作用類似于使用Win7系統(tǒng)安裝光盤,在PC上安裝操作系統(tǒng)。配置文件按照一定格式描述該產(chǎn)品的EMMC劃分為多少個(gè)分區(qū)、分區(qū)的順序、大小、格式等內(nèi)容。高通平臺(tái)也提供了平臺(tái)開發(fā)軟件包,稱之為QPST(Qualcomm Product Support Tool)。QPST就是通過配置文件的描述,來給內(nèi)部存儲(chǔ)器劃分分區(qū),并下載鏡像。分區(qū)格式描述文件是partition.xml,分區(qū)鏡像配置文件Boardconfig.mk。下面就詳細(xì)敘述這兩個(gè)文件的使用。
2.1 分區(qū)格式描述文件partition.xml
分區(qū)配置文件partition.xml用于指定分區(qū)名稱、分區(qū)大小和類型,例如boot、kernel、cache、system、userdata、recovery等,并用于生成GPT分區(qū)表,主要包含以下參數(shù)。
參數(shù)名 參數(shù)說明
WRITE_PROTECT_BOUNDARY_IN_KB 為防止分區(qū)的意外寫入,分區(qū)之間保留一段隔離區(qū)域,稱之為寫保護(hù)區(qū)域。寫保護(hù)區(qū)域的基準(zhǔn)大小,在高通平臺(tái)中默認(rèn)設(shè)置為64M
GROW_LAST_PARTITION_TO_FILL_DISK 此字段的作用類似于在Windows系統(tǒng)下給硬件進(jìn)行分區(qū)時(shí),最后一個(gè)分區(qū)默認(rèn)使用剩余全部空間,此值為真時(shí),最后一個(gè)分區(qū)的大小會(huì)自動(dòng)調(diào)整為EMMC剩余所有空間大小,充分利用空間。如果為假,最后一個(gè)分區(qū)將按設(shè)定的大小去分配,并預(yù)留一部分空間不使用
partition label 分區(qū)名字
type 分區(qū)類型
size_in_kb 分區(qū)大小
bootable 是否可以引導(dǎo)
readonly 是否為只讀
filename 分區(qū)對(duì)應(yīng)的鏡像名字
sparse 燒錄的鏡像是否是展開的
例如,在partition.xml文件中關(guān)于system分區(qū)的配置信息如下所示。
<!—NOTE: entries here are used by the parser when generating output
<!—NOTE: each filename must be on its own line as in varable=value
WRITE_PROTECT_BOUNDARY_IN_KB=65536 GROW_LAST_PARTITION_TO_FILL_DISK=true
該文件是system分區(qū)的配置文件,主要作用包括:
WRITE_PROTECT_BOUNDARY_IN_KB= 65536 寫保護(hù)區(qū)域的基準(zhǔn)大小為64M,保證同一讀寫屬性的分區(qū)64M對(duì)齊
GROW_LAST_PARTITION_TO_FILL_DISK=true 最后一個(gè)分區(qū)的大小會(huì)自動(dòng)擴(kuò)充到最大
partition label=”system” 指定分區(qū)的名字為system
size_in_kb=”819200” 指定分區(qū)大小為800M
type=”EBD0A0A2-B9E5-4433-87C0-68B6B72699C7” 分區(qū)類型為數(shù)據(jù)分區(qū)
bootable=”false” 設(shè)置該分區(qū)為不可引導(dǎo)
分區(qū)
readonly=”true” 讀寫屬性為只讀
filename=”system.img” 分區(qū)對(duì)應(yīng)的鏡像名字
sparse=”true” 燒錄鏡像是展開的鏡像
文件
2.2 分區(qū)鏡像配置文件Boardconfig.mk
分區(qū)鏡像配置文件Boardconfig.mk的作用一般包括兩個(gè)方面:指定對(duì)應(yīng)分區(qū)鏡像文件格式化的大小和分區(qū)鏡像文件的文件系統(tǒng)類型。例如,在Boardconfig.mk文件中關(guān)于分區(qū)格式和分區(qū)大小的部分配置信息:
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := true
……
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00A00000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838860800
……
當(dāng)編譯的時(shí)候makefile就會(huì)從Boardconfig.mk獲取system分區(qū)的大小和文件系統(tǒng)類型并用調(diào)用make_ext4fs把out/target/product/msm8610/system的文件制作成大小為800M ext4格式的system.img分區(qū)壓縮文件。需要說明的是:編譯生成的system.img里面包含了對(duì)應(yīng)分區(qū)的文件系統(tǒng)類型,以及掛載分區(qū)的大小,所以改變分區(qū)時(shí)一定要更新對(duì)應(yīng)分區(qū)鏡像文件。
3 高通平臺(tái)項(xiàng)目分區(qū)整改案例
高通MSM8X10平臺(tái)原生Android方案,使用4G內(nèi)置EMMC,劃分了25個(gè)分區(qū),系統(tǒng)鏡像大約使用約2G空間,針對(duì)不同的產(chǎn)品,分區(qū)個(gè)數(shù)和大小各有差異,下面就以開發(fā)實(shí)例說明如何調(diào)整分區(qū)大小,以及如何新增分區(qū)。
3.1 調(diào)整system分區(qū)大小
各分區(qū)均可根據(jù)需要進(jìn)行調(diào)整,原生系統(tǒng)的system分區(qū)規(guī)劃了800M空間,但實(shí)際鏡像只有300多M,為有效利用存儲(chǔ)器,可以將此分區(qū)縮小為400M:
1)修改文件partition.xml中的字段,size_in_kb=”409600”。
2)修改文件Boardconfig.mk中的字段,BOARD_SYSTEMIMAGE_PARTITION_SIZE = 419430400。
3)重新編譯生成system.img鏡像。
3.2 增加vendor分區(qū)
原生平臺(tái)僅提供基本和有限的功能,不適合產(chǎn)品化的要求,為擴(kuò)展原生平臺(tái)的功能,需要增加一個(gè)300M空間的vendor分區(qū),可用于支持存放不同廠商的Logo、預(yù)裝應(yīng)用、定制程序和配置文件,如前所述partition.xml用于定義和描述分區(qū)信息,供燒錄軟件QPST使用,增加分區(qū)需要做如下修改:
1)文件里面需要新增一個(gè)分區(qū)信息,并配置對(duì)應(yīng)的分區(qū)大小、類型和要燒寫鏡像的名字等等信息,內(nèi)容如下。
2)device/qcom/msmxx/Boardconfig.mk里面的分區(qū)宏,使這個(gè)分區(qū)恰好小于等于modem側(cè)的partition.xml分區(qū)大小:
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 419430400
3.3 增大userdata分區(qū)
Android系統(tǒng)中,內(nèi)部存儲(chǔ)器的最后一個(gè)分區(qū)一般命名為userdata分區(qū),是用戶可以使用的分區(qū),其他分區(qū)是系統(tǒng)使用的,用戶不能操作。前兩個(gè)實(shí)例說明了如何實(shí)際鏡像大小調(diào)整分區(qū)、如何根據(jù)需求增加分區(qū)。最后說明如何去除由于對(duì)齊而造成的空間浪費(fèi),并盡可能的為用戶增大userdata分區(qū)。
1) 更改分區(qū)文件。
修改partition.xml文件里面做如下修改。
WRITE_PROTECT_BOUNDARY_IN_KB = 0;
system分區(qū)的大小為400M;
userdata的分區(qū)為3G;
2) device/qcom/msmxx/Boardconfig.mk修改分區(qū)鏡像文件格式化的大小。
把system分區(qū)鏡像文件格式化的大小400M
userdata分區(qū)鏡像文件格式化的大小3G
BOARD_USERDATAIMAGE_PARTITION_SIZE := 3145728000
Userdata增大后,系統(tǒng)會(huì)顯示用戶分區(qū)總空間為2.88GB
3.4 減少分區(qū)空間浪費(fèi)的措施
1)計(jì)算每個(gè)鏡像的分區(qū)大小,留有足夠預(yù)留空間合理分配每個(gè)分區(qū)大小。
2)在進(jìn)行分區(qū)布局的時(shí)候,盡量讓讀寫屬性一致的放在一起,這樣就可以減少由于對(duì)齊造成的空間浪費(fèi)。
3)通過設(shè)置WRITE_PROTECT_BOUNDARY_IN_KB來改變寫保護(hù)區(qū)域的基準(zhǔn)大小。
4)GROW_LAST_PARTITION_TO_FILL_DISK:最好設(shè)置為真,這樣最后一個(gè)分區(qū)就會(huì)擴(kuò)展到最大這樣保證不浪費(fèi)EMMC存儲(chǔ)
空間。
3.5 注意事項(xiàng)
1)EMMC軟件下載所依賴的分區(qū)信息和系統(tǒng)啟動(dòng)時(shí)加載的GPT分區(qū)信息必須一致。
2)在改變分區(qū)大小時(shí),要防止自己的分區(qū)大小總和不能超過EMMC的總大小,否則越界的分區(qū)時(shí)將會(huì)出錯(cuò),系統(tǒng)穩(wěn)定性將得不到保證。
參考文獻(xiàn)
[1]百度百科.mbr[EB/OL].[2014-9-1].http://baike.baidu.com/subview/9485/9079238.htm#viewPageContent.
[2]百度百科.gpt[EB/OL].[2014-9-1].http://baike.baidu.com/subview/10817/15336681.htm.
[3]kieven2008.Android分區(qū)[EB/OL].[2014-9-1].http://blog.csdn.net/kieven2008/article/details/19327907.
作者簡(jiǎn)介
蔡潔,碩士,講師,研究方向:計(jì)算機(jī)技術(shù)。
分區(qū)鏡像配置文件Boardconfig.mk的作用一般包括兩個(gè)方面:指定對(duì)應(yīng)分區(qū)鏡像文件格式化的大小和分區(qū)鏡像文件的文件系統(tǒng)類型。例如,在Boardconfig.mk文件中關(guān)于分區(qū)格式和分區(qū)大小的部分配置信息:
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := true
……
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00A00000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838860800
……
當(dāng)編譯的時(shí)候makefile就會(huì)從Boardconfig.mk獲取system分區(qū)的大小和文件系統(tǒng)類型并用調(diào)用make_ext4fs把out/target/product/msm8610/system的文件制作成大小為800M ext4格式的system.img分區(qū)壓縮文件。需要說明的是:編譯生成的system.img里面包含了對(duì)應(yīng)分區(qū)的文件系統(tǒng)類型,以及掛載分區(qū)的大小,所以改變分區(qū)時(shí)一定要更新對(duì)應(yīng)分區(qū)鏡像文件。
3 高通平臺(tái)項(xiàng)目分區(qū)整改案例
高通MSM8X10平臺(tái)原生Android方案,使用4G內(nèi)置EMMC,劃分了25個(gè)分區(qū),系統(tǒng)鏡像大約使用約2G空間,針對(duì)不同的產(chǎn)品,分區(qū)個(gè)數(shù)和大小各有差異,下面就以開發(fā)實(shí)例說明如何調(diào)整分區(qū)大小,以及如何新增分區(qū)。
3.1 調(diào)整system分區(qū)大小
各分區(qū)均可根據(jù)需要進(jìn)行調(diào)整,原生系統(tǒng)的system分區(qū)規(guī)劃了800M空間,但實(shí)際鏡像只有300多M,為有效利用存儲(chǔ)器,可以將此分區(qū)縮小為400M:
1)修改文件partition.xml中的字段,size_in_kb=”409600”。
2)修改文件Boardconfig.mk中的字段,BOARD_SYSTEMIMAGE_PARTITION_SIZE = 419430400。
3)重新編譯生成system.img鏡像。
3.2 增加vendor分區(qū)
原生平臺(tái)僅提供基本和有限的功能,不適合產(chǎn)品化的要求,為擴(kuò)展原生平臺(tái)的功能,需要增加一個(gè)300M空間的vendor分區(qū),可用于支持存放不同廠商的Logo、預(yù)裝應(yīng)用、定制程序和配置文件,如前所述partition.xml用于定義和描述分區(qū)信息,供燒錄軟件QPST使用,增加分區(qū)需要做如下修改:
1)文件里面需要新增一個(gè)分區(qū)信息,并配置對(duì)應(yīng)的分區(qū)大小、類型和要燒寫鏡像的名字等等信息,內(nèi)容如下。
2)device/qcom/msmxx/Boardconfig.mk里面的分區(qū)宏,使這個(gè)分區(qū)恰好小于等于modem側(cè)的partition.xml分區(qū)大小:
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 419430400
3.3 增大userdata分區(qū)
Android系統(tǒng)中,內(nèi)部存儲(chǔ)器的最后一個(gè)分區(qū)一般命名為userdata分區(qū),是用戶可以使用的分區(qū),其他分區(qū)是系統(tǒng)使用的,用戶不能操作。前兩個(gè)實(shí)例說明了如何實(shí)際鏡像大小調(diào)整分區(qū)、如何根據(jù)需求增加分區(qū)。最后說明如何去除由于對(duì)齊而造成的空間浪費(fèi),并盡可能的為用戶增大userdata分區(qū)。
1) 更改分區(qū)文件。
修改partition.xml文件里面做如下修改。
WRITE_PROTECT_BOUNDARY_IN_KB = 0;
system分區(qū)的大小為400M;
userdata的分區(qū)為3G;
2) device/qcom/msmxx/Boardconfig.mk修改分區(qū)鏡像文件格式化的大小。
把system分區(qū)鏡像文件格式化的大小400M
userdata分區(qū)鏡像文件格式化的大小3G
BOARD_USERDATAIMAGE_PARTITION_SIZE := 3145728000
Userdata增大后,系統(tǒng)會(huì)顯示用戶分區(qū)總空間為2.88GB
3.4 減少分區(qū)空間浪費(fèi)的措施
1)計(jì)算每個(gè)鏡像的分區(qū)大小,留有足夠預(yù)留空間合理分配每個(gè)分區(qū)大小。
2)在進(jìn)行分區(qū)布局的時(shí)候,盡量讓讀寫屬性一致的放在一起,這樣就可以減少由于對(duì)齊造成的空間浪費(fèi)。
3)通過設(shè)置WRITE_PROTECT_BOUNDARY_IN_KB來改變寫保護(hù)區(qū)域的基準(zhǔn)大小。
4)GROW_LAST_PARTITION_TO_FILL_DISK:最好設(shè)置為真,這樣最后一個(gè)分區(qū)就會(huì)擴(kuò)展到最大這樣保證不浪費(fèi)EMMC存儲(chǔ)
空間。
3.5 注意事項(xiàng)
1)EMMC軟件下載所依賴的分區(qū)信息和系統(tǒng)啟動(dòng)時(shí)加載的GPT分區(qū)信息必須一致。
2)在改變分區(qū)大小時(shí),要防止自己的分區(qū)大小總和不能超過EMMC的總大小,否則越界的分區(qū)時(shí)將會(huì)出錯(cuò),系統(tǒng)穩(wěn)定性將得不到保證。
參考文獻(xiàn)
[1]百度百科.mbr[EB/OL].[2014-9-1].http://baike.baidu.com/subview/9485/9079238.htm#viewPageContent.
[2]百度百科.gpt[EB/OL].[2014-9-1].http://baike.baidu.com/subview/10817/15336681.htm.
[3]kieven2008.Android分區(qū)[EB/OL].[2014-9-1].http://blog.csdn.net/kieven2008/article/details/19327907.
作者簡(jiǎn)介
蔡潔,碩士,講師,研究方向:計(jì)算機(jī)技術(shù)。
分區(qū)鏡像配置文件Boardconfig.mk的作用一般包括兩個(gè)方面:指定對(duì)應(yīng)分區(qū)鏡像文件格式化的大小和分區(qū)鏡像文件的文件系統(tǒng)類型。例如,在Boardconfig.mk文件中關(guān)于分區(qū)格式和分區(qū)大小的部分配置信息:
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := true
……
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00A00000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838860800
……
當(dāng)編譯的時(shí)候makefile就會(huì)從Boardconfig.mk獲取system分區(qū)的大小和文件系統(tǒng)類型并用調(diào)用make_ext4fs把out/target/product/msm8610/system的文件制作成大小為800M ext4格式的system.img分區(qū)壓縮文件。需要說明的是:編譯生成的system.img里面包含了對(duì)應(yīng)分區(qū)的文件系統(tǒng)類型,以及掛載分區(qū)的大小,所以改變分區(qū)時(shí)一定要更新對(duì)應(yīng)分區(qū)鏡像文件。
3 高通平臺(tái)項(xiàng)目分區(qū)整改案例
高通MSM8X10平臺(tái)原生Android方案,使用4G內(nèi)置EMMC,劃分了25個(gè)分區(qū),系統(tǒng)鏡像大約使用約2G空間,針對(duì)不同的產(chǎn)品,分區(qū)個(gè)數(shù)和大小各有差異,下面就以開發(fā)實(shí)例說明如何調(diào)整分區(qū)大小,以及如何新增分區(qū)。
3.1 調(diào)整system分區(qū)大小
各分區(qū)均可根據(jù)需要進(jìn)行調(diào)整,原生系統(tǒng)的system分區(qū)規(guī)劃了800M空間,但實(shí)際鏡像只有300多M,為有效利用存儲(chǔ)器,可以將此分區(qū)縮小為400M:
1)修改文件partition.xml中的字段,size_in_kb=”409600”。
2)修改文件Boardconfig.mk中的字段,BOARD_SYSTEMIMAGE_PARTITION_SIZE = 419430400。
3)重新編譯生成system.img鏡像。
3.2 增加vendor分區(qū)
原生平臺(tái)僅提供基本和有限的功能,不適合產(chǎn)品化的要求,為擴(kuò)展原生平臺(tái)的功能,需要增加一個(gè)300M空間的vendor分區(qū),可用于支持存放不同廠商的Logo、預(yù)裝應(yīng)用、定制程序和配置文件,如前所述partition.xml用于定義和描述分區(qū)信息,供燒錄軟件QPST使用,增加分區(qū)需要做如下修改:
1)文件里面需要新增一個(gè)分區(qū)信息,并配置對(duì)應(yīng)的分區(qū)大小、類型和要燒寫鏡像的名字等等信息,內(nèi)容如下。
2)device/qcom/msmxx/Boardconfig.mk里面的分區(qū)宏,使這個(gè)分區(qū)恰好小于等于modem側(cè)的partition.xml分區(qū)大?。?/p>
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 419430400
3.3 增大userdata分區(qū)
Android系統(tǒng)中,內(nèi)部存儲(chǔ)器的最后一個(gè)分區(qū)一般命名為userdata分區(qū),是用戶可以使用的分區(qū),其他分區(qū)是系統(tǒng)使用的,用戶不能操作。前兩個(gè)實(shí)例說明了如何實(shí)際鏡像大小調(diào)整分區(qū)、如何根據(jù)需求增加分區(qū)。最后說明如何去除由于對(duì)齊而造成的空間浪費(fèi),并盡可能的為用戶增大userdata分區(qū)。
1) 更改分區(qū)文件。
修改partition.xml文件里面做如下修改。
WRITE_PROTECT_BOUNDARY_IN_KB = 0;
system分區(qū)的大小為400M;
userdata的分區(qū)為3G;
2) device/qcom/msmxx/Boardconfig.mk修改分區(qū)鏡像文件格式化的大小。
把system分區(qū)鏡像文件格式化的大小400M
userdata分區(qū)鏡像文件格式化的大小3G
BOARD_USERDATAIMAGE_PARTITION_SIZE := 3145728000
Userdata增大后,系統(tǒng)會(huì)顯示用戶分區(qū)總空間為2.88GB
3.4 減少分區(qū)空間浪費(fèi)的措施
1)計(jì)算每個(gè)鏡像的分區(qū)大小,留有足夠預(yù)留空間合理分配每個(gè)分區(qū)大小。
2)在進(jìn)行分區(qū)布局的時(shí)候,盡量讓讀寫屬性一致的放在一起,這樣就可以減少由于對(duì)齊造成的空間浪費(fèi)。
3)通過設(shè)置WRITE_PROTECT_BOUNDARY_IN_KB來改變寫保護(hù)區(qū)域的基準(zhǔn)大小。
4)GROW_LAST_PARTITION_TO_FILL_DISK:最好設(shè)置為真,這樣最后一個(gè)分區(qū)就會(huì)擴(kuò)展到最大這樣保證不浪費(fèi)EMMC存儲(chǔ)
空間。
3.5 注意事項(xiàng)
1)EMMC軟件下載所依賴的分區(qū)信息和系統(tǒng)啟動(dòng)時(shí)加載的GPT分區(qū)信息必須一致。
2)在改變分區(qū)大小時(shí),要防止自己的分區(qū)大小總和不能超過EMMC的總大小,否則越界的分區(qū)時(shí)將會(huì)出錯(cuò),系統(tǒng)穩(wěn)定性將得不到保證。
參考文獻(xiàn)
[1]百度百科.mbr[EB/OL].[2014-9-1].http://baike.baidu.com/subview/9485/9079238.htm#viewPageContent.
[2]百度百科.gpt[EB/OL].[2014-9-1].http://baike.baidu.com/subview/10817/15336681.htm.
[3]kieven2008.Android分區(qū)[EB/OL].[2014-9-1].http://blog.csdn.net/kieven2008/article/details/19327907.
作者簡(jiǎn)介
蔡潔,碩士,講師,研究方向:計(jì)算機(jī)技術(shù)。