?

基于高通平臺的Android系統分區管理

2014-11-27 20:48蔡潔
新媒體研究 2014年19期
關鍵詞:分區高通

摘 要 本文以存儲設備管理為出發點,從Android系統的分區管理展開討論,闡述操作系統的引導方式、分區表的原理、類型、作用,并以開發實例說明產品分區模式,如何對分區進行擴展,以便更為有效的利用內部存儲空間,提高存儲設備的可用性和擴展性。

關鍵詞 Android;分區;高通

中圖分類號:TP316 文獻標識碼:A 文章編號:1671-7597(2014)19-0044-03

Android是一種基于Linux平臺的自由及開放源代碼的操作系統,是目前世界上最流行的移動終端操作系統之一,廣泛用于手機、平板電腦等設備中。

高通(Qualcomm)是一家美國的無線電通信技術研發公司,其一直致力于電信設備和消費電子設備的新技術研發,尤其是近年來其推出的高度集成的“全合一”移動處理器系列平臺,覆蓋入門級智能手機乃至高端智能手機、平板電腦以及下一代智能終端。特別是,高通的芯片是首個能夠兼容Android系統的,所以國內外眾多手機品牌均采用高通作為其智能手機的主要芯片提供商??梢哉f,高通在智能手機行業的地位就相當于PC領域的芯片巨頭因特爾。

1 分區表綜述

眾所周知,以Android平臺設計開發的智能手機和平板電腦都有內部存儲器,一般為SDIO(Secure Digital Input and Output Card)接口的EMMC(Embedded Multi Media Card)存儲芯片,俗稱閃存。根據不同產品的配置和需求,容量從4G到128G不等。在使用時,閃存被分成多個區域,這個過程我們把它叫做“分區”。分區既可以讓系統和用戶分區相互隔離,也可以增強系統穩定性,有效利用、管理存儲區域,就如同在圖書館的不同區域中查找不同類型的書籍。在研究分區管理之前,必須了解分區表的概念。

分區表是將大表的數據分成稱為分區的許多小的子集。倘若磁盤丟失了分區表,數據就無法按順序讀取和寫入,導致無法操作。對于分區的格式,目前大容量存儲區有兩種分區方式,即:BIOS和硬盤MBR分區、EFI和硬盤GPT分區。下面就對這兩種分區表進行詳細的說明。

1.1 MBR分區表

MBR(Master Boot Record),主引導記錄,又叫做主引導扇區,是計算機開機后BIOS訪問硬盤時所必須要讀取的首個扇區,是一段512字節的引導代碼,位于磁盤的第一個扇區,在硬盤上的位置為(柱面,磁頭,扇區)=(0,0,1)。包含三個部分:主引導程序、磁盤分區表和引導記錄。

因主引導記錄在這個扇區中占了大部分空間,所以習慣將該扇區稱為MBR扇區。主引導程序即主引導記錄占446字節,它用于硬盤啟動時將系統控制權轉給用戶指定的并在分區表中登記的某個操作系統。磁盤分區表占64字節,根據規定,每個分區表項占16個字節,所以最多可以描述、存放4個分區信息,這就是為什么MBR模式只能支持4個主分區的原因。

主分區數目不能超過4個的限制,很多時候,4個主分區并不能滿足需要。另外最關鍵的是MBR分區方案無法支持超過2TB容量的磁盤。因為這一方案用4個字節存儲分區的總扇區數,最大能表示2的32次方的扇區個數,按每扇區512字節計算,每個分區最大不能超過2TB。磁盤容量超過2TB以后,分區的起始位置也就無法表示了。在硬盤容量迅速遞增的今天,2TB的限制早已被突破。由此可見,MBR分區方案現在已經無法再滿足需要了。因此在大容量硬盤和分區出現之后,MBR分區方式逐漸被GPT分區表取代。

1.2 GPT分區表

1.2.1 GPT說明

GPT(GUID Partition Table),全球唯一標識分區表,是一種由基于可擴展固件接口(EFI)使用的磁盤分區架構。它屬于可擴展固件接口(EFI)標準中的一部分,用來替代主引導記錄分區表。

GPT使用邏輯區塊地址(LBA)作為尋址方式,在GPT硬盤中,分區表的位置信息存儲在GPT頭中,但為了兼容MBR,硬盤的第一個扇區LBA 0仍然用作MBR,依舊保留了MBR的結構。GTP頭存儲于LBA 1,在GPT工作時,會優先讀取GPT(LBA 1)內容。接下來是分區表,從LBA 34開始是第一個數據分區的

開始。

1.2.2 GPT分區類型GUID

GPT支持不同的操作系統,如Windows、Mac OS、各主流的發行版Unix和Linux操作系統。GUID的作用是用不同的ID來標記不同的操作系統和分區類型,操作系統在啟動時,根據GUID即可判斷分區類型的合法性。

操作

系統 分區類型 GUID

Linux 數據分區 EBD0A0A2-B9E5-4433-87C0-68B6B72699C7

RAID分區 A19D880F-05FC-4D3B-A006-743F0F84911E

交換分區 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F

邏輯卷管理器(LVM)分區 E6D6D379-F507-44C2-A23C-238F2A3DF928

保留 8DA63339-0007-60C0-C436-083AC8230908

1.2.3 GPT與MBR對比

與MBR分區模式相比,GPT有以下優點。

1)GPT允許每個磁盤高達128個分區,而MBR磁盤最多只有4個主分區,或者3個主分區加一個擴展分區。

2)GPT支持高達18千兆兆字節(EB)的卷大小,而MBR最大卷為2TB;(18EB= 19327352832GB)。

3)允許將主磁盤分區表和備份磁盤分區表用于冗余。endprint

4)支持唯一的磁盤和分區ID(GUID)。

5)性能更加穩定。

2 高通MSM86XX平臺分區模式介紹

近年來,Android作為一個新興的操作系統,迅速的發展為一個生態圈,隨著系統的普及,越來越多的電子產品使用此操作系統。在逐漸被人們熟知的同時,也有更多的芯片公司、產品公司、設計公司和方案公司對其進行研究、開發和擴展。分區的管理是普通消費類電子產品最基本和最重要的一項功能,它既要保證設備穩定工作,又要合理有效的使用存儲設備,確保數據文件的正確性。

Android是以Linux內核為基礎的一套軟件堆疊系統,所以Android系統的分區格式也使用Linux的分區格式。由于GPT也支持Linux操作系統,加上現在使用Linux和Android系統的嵌入式產品,都包含多個分區,例如:啟動、內核、緩沖、系統、用戶、恢復等分區,需要十幾甚至二十多個分區。因為MBR只支持4個主分區,所以已經不能滿足以上需求,必須使用GPT分區模式。下面就以現在主流的電子產品解決方案——高通平臺,說明GPT分區在Android系統中的應用和開發過程。

前面提到,手機、平板類電子產品都是用EMMC作為內部存儲器,EMMC上的內容由系統鏡像和用戶數據文件組成,用戶數據文件是用戶在使用過程中創建的個人文件,而系統鏡像是在產品出廠前,使用燒錄軟件下載到EMMC中,產品才能正常工作。每個平臺的生產廠商都會提供一套這樣的工具和配置文件,用于開發和生產階段下載系統鏡像,其作用類似于使用Win7系統安裝光盤,在PC上安裝操作系統。配置文件按照一定格式描述該產品的EMMC劃分為多少個分區、分區的順序、大小、格式等內容。高通平臺也提供了平臺開發軟件包,稱之為QPST(Qualcomm Product Support Tool)。QPST就是通過配置文件的描述,來給內部存儲器劃分分區,并下載鏡像。分區格式描述文件是partition.xml,分區鏡像配置文件Boardconfig.mk。下面就詳細敘述這兩個文件的使用。

2.1 分區格式描述文件partition.xml

分區配置文件partition.xml用于指定分區名稱、分區大小和類型,例如boot、kernel、cache、system、userdata、recovery等,并用于生成GPT分區表,主要包含以下參數。

參數名 參數說明

WRITE_PROTECT_BOUNDARY_IN_KB 為防止分區的意外寫入,分區之間保留一段隔離區域,稱之為寫保護區域。寫保護區域的基準大小,在高通平臺中默認設置為64M

GROW_LAST_PARTITION_TO_FILL_DISK 此字段的作用類似于在Windows系統下給硬件進行分區時,最后一個分區默認使用剩余全部空間,此值為真時,最后一個分區的大小會自動調整為EMMC剩余所有空間大小,充分利用空間。如果為假,最后一個分區將按設定的大小去分配,并預留一部分空間不使用

partition label 分區名字

type 分區類型

size_in_kb 分區大小

bootable 是否可以引導

readonly 是否為只讀

filename 分區對應的鏡像名字

sparse 燒錄的鏡像是否是展開的

例如,在partition.xml文件中關于system分區的配置信息如下所示。

<!—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分區的配置文件,主要作用包括:

WRITE_PROTECT_BOUNDARY_IN_KB= 65536 寫保護區域的基準大小為64M,保證同一讀寫屬性的分區64M對齊

GROW_LAST_PARTITION_TO_FILL_DISK=true 最后一個分區的大小會自動擴充到最大

partition label=”system” 指定分區的名字為system

size_in_kb=”819200” 指定分區大小為800M

type=”EBD0A0A2-B9E5-4433-87C0-68B6B72699C7” 分區類型為數據分區

bootable=”false” 設置該分區為不可引導

分區

readonly=”true” 讀寫屬性為只讀

filename=”system.img” 分區對應的鏡像名字

sparse=”true” 燒錄鏡像是展開的鏡像

文件

2.2 分區鏡像配置文件Boardconfig.mk

分區鏡像配置文件Boardconfig.mk的作用一般包括兩個方面:指定對應分區鏡像文件格式化的大小和分區鏡像文件的文件系統類型。例如,在Boardconfig.mk文件中關于分區格式和分區大小的部分配置信息:

TARGET_USERIMAGES_USE_EXT4 := true

BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := true

……

BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00A00000

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838860800

……

當編譯的時候makefile就會從Boardconfig.mk獲取system分區的大小和文件系統類型并用調用make_ext4fs把out/target/product/msm8610/system的文件制作成大小為800M ext4格式的system.img分區壓縮文件。需要說明的是:編譯生成的system.img里面包含了對應分區的文件系統類型,以及掛載分區的大小,所以改變分區時一定要更新對應分區鏡像文件。

3 高通平臺項目分區整改案例

高通MSM8X10平臺原生Android方案,使用4G內置EMMC,劃分了25個分區,系統鏡像大約使用約2G空間,針對不同的產品,分區個數和大小各有差異,下面就以開發實例說明如何調整分區大小,以及如何新增分區。

3.1 調整system分區大小

各分區均可根據需要進行調整,原生系統的system分區規劃了800M空間,但實際鏡像只有300多M,為有效利用存儲器,可以將此分區縮小為400M:

1)修改文件partition.xml中的字段,size_in_kb=”409600”。

2)修改文件Boardconfig.mk中的字段,BOARD_SYSTEMIMAGE_PARTITION_SIZE = 419430400。

3)重新編譯生成system.img鏡像。

3.2 增加vendor分區

原生平臺僅提供基本和有限的功能,不適合產品化的要求,為擴展原生平臺的功能,需要增加一個300M空間的vendor分區,可用于支持存放不同廠商的Logo、預裝應用、定制程序和配置文件,如前所述partition.xml用于定義和描述分區信息,供燒錄軟件QPST使用,增加分區需要做如下修改:

1)文件里面需要新增一個分區信息,并配置對應的分區大小、類型和要燒寫鏡像的名字等等信息,內容如下。

2)device/qcom/msmxx/Boardconfig.mk里面的分區宏,使這個分區恰好小于等于modem側的partition.xml分區大?。?/p>

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 419430400

3.3 增大userdata分區

Android系統中,內部存儲器的最后一個分區一般命名為userdata分區,是用戶可以使用的分區,其他分區是系統使用的,用戶不能操作。前兩個實例說明了如何實際鏡像大小調整分區、如何根據需求增加分區。最后說明如何去除由于對齊而造成的空間浪費,并盡可能的為用戶增大userdata分區。

1) 更改分區文件。

修改partition.xml文件里面做如下修改。

WRITE_PROTECT_BOUNDARY_IN_KB = 0;

system分區的大小為400M;

userdata的分區為3G;

2) device/qcom/msmxx/Boardconfig.mk修改分區鏡像文件格式化的大小。

把system分區鏡像文件格式化的大小400M

userdata分區鏡像文件格式化的大小3G

BOARD_USERDATAIMAGE_PARTITION_SIZE := 3145728000

Userdata增大后,系統會顯示用戶分區總空間為2.88GB

3.4 減少分區空間浪費的措施

1)計算每個鏡像的分區大小,留有足夠預留空間合理分配每個分區大小。

2)在進行分區布局的時候,盡量讓讀寫屬性一致的放在一起,這樣就可以減少由于對齊造成的空間浪費。

3)通過設置WRITE_PROTECT_BOUNDARY_IN_KB來改變寫保護區域的基準大小。

4)GROW_LAST_PARTITION_TO_FILL_DISK:最好設置為真,這樣最后一個分區就會擴展到最大這樣保證不浪費EMMC存儲

空間。

3.5 注意事項

1)EMMC軟件下載所依賴的分區信息和系統啟動時加載的GPT分區信息必須一致。

2)在改變分區大小時,要防止自己的分區大小總和不能超過EMMC的總大小,否則越界的分區時將會出錯,系統穩定性將得不到保證。

參考文獻

[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分區[EB/OL].[2014-9-1].http://blog.csdn.net/kieven2008/article/details/19327907.

作者簡介

蔡潔,碩士,講師,研究方向:計算機技術。

分區鏡像配置文件Boardconfig.mk的作用一般包括兩個方面:指定對應分區鏡像文件格式化的大小和分區鏡像文件的文件系統類型。例如,在Boardconfig.mk文件中關于分區格式和分區大小的部分配置信息:

TARGET_USERIMAGES_USE_EXT4 := true

BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := true

……

BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00A00000

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838860800

……

當編譯的時候makefile就會從Boardconfig.mk獲取system分區的大小和文件系統類型并用調用make_ext4fs把out/target/product/msm8610/system的文件制作成大小為800M ext4格式的system.img分區壓縮文件。需要說明的是:編譯生成的system.img里面包含了對應分區的文件系統類型,以及掛載分區的大小,所以改變分區時一定要更新對應分區鏡像文件。

3 高通平臺項目分區整改案例

高通MSM8X10平臺原生Android方案,使用4G內置EMMC,劃分了25個分區,系統鏡像大約使用約2G空間,針對不同的產品,分區個數和大小各有差異,下面就以開發實例說明如何調整分區大小,以及如何新增分區。

3.1 調整system分區大小

各分區均可根據需要進行調整,原生系統的system分區規劃了800M空間,但實際鏡像只有300多M,為有效利用存儲器,可以將此分區縮小為400M:

1)修改文件partition.xml中的字段,size_in_kb=”409600”。

2)修改文件Boardconfig.mk中的字段,BOARD_SYSTEMIMAGE_PARTITION_SIZE = 419430400。

3)重新編譯生成system.img鏡像。

3.2 增加vendor分區

原生平臺僅提供基本和有限的功能,不適合產品化的要求,為擴展原生平臺的功能,需要增加一個300M空間的vendor分區,可用于支持存放不同廠商的Logo、預裝應用、定制程序和配置文件,如前所述partition.xml用于定義和描述分區信息,供燒錄軟件QPST使用,增加分區需要做如下修改:

1)文件里面需要新增一個分區信息,并配置對應的分區大小、類型和要燒寫鏡像的名字等等信息,內容如下。

2)device/qcom/msmxx/Boardconfig.mk里面的分區宏,使這個分區恰好小于等于modem側的partition.xml分區大?。?/p>

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 419430400

3.3 增大userdata分區

Android系統中,內部存儲器的最后一個分區一般命名為userdata分區,是用戶可以使用的分區,其他分區是系統使用的,用戶不能操作。前兩個實例說明了如何實際鏡像大小調整分區、如何根據需求增加分區。最后說明如何去除由于對齊而造成的空間浪費,并盡可能的為用戶增大userdata分區。

1) 更改分區文件。

修改partition.xml文件里面做如下修改。

WRITE_PROTECT_BOUNDARY_IN_KB = 0;

system分區的大小為400M;

userdata的分區為3G;

2) device/qcom/msmxx/Boardconfig.mk修改分區鏡像文件格式化的大小。

把system分區鏡像文件格式化的大小400M

userdata分區鏡像文件格式化的大小3G

BOARD_USERDATAIMAGE_PARTITION_SIZE := 3145728000

Userdata增大后,系統會顯示用戶分區總空間為2.88GB

3.4 減少分區空間浪費的措施

1)計算每個鏡像的分區大小,留有足夠預留空間合理分配每個分區大小。

2)在進行分區布局的時候,盡量讓讀寫屬性一致的放在一起,這樣就可以減少由于對齊造成的空間浪費。

3)通過設置WRITE_PROTECT_BOUNDARY_IN_KB來改變寫保護區域的基準大小。

4)GROW_LAST_PARTITION_TO_FILL_DISK:最好設置為真,這樣最后一個分區就會擴展到最大這樣保證不浪費EMMC存儲

空間。

3.5 注意事項

1)EMMC軟件下載所依賴的分區信息和系統啟動時加載的GPT分區信息必須一致。

2)在改變分區大小時,要防止自己的分區大小總和不能超過EMMC的總大小,否則越界的分區時將會出錯,系統穩定性將得不到保證。

參考文獻

[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分區[EB/OL].[2014-9-1].http://blog.csdn.net/kieven2008/article/details/19327907.

作者簡介

蔡潔,碩士,講師,研究方向:計算機技術。

分區鏡像配置文件Boardconfig.mk的作用一般包括兩個方面:指定對應分區鏡像文件格式化的大小和分區鏡像文件的文件系統類型。例如,在Boardconfig.mk文件中關于分區格式和分區大小的部分配置信息:

TARGET_USERIMAGES_USE_EXT4 := true

BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := true

……

BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00A00000

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838860800

……

當編譯的時候makefile就會從Boardconfig.mk獲取system分區的大小和文件系統類型并用調用make_ext4fs把out/target/product/msm8610/system的文件制作成大小為800M ext4格式的system.img分區壓縮文件。需要說明的是:編譯生成的system.img里面包含了對應分區的文件系統類型,以及掛載分區的大小,所以改變分區時一定要更新對應分區鏡像文件。

3 高通平臺項目分區整改案例

高通MSM8X10平臺原生Android方案,使用4G內置EMMC,劃分了25個分區,系統鏡像大約使用約2G空間,針對不同的產品,分區個數和大小各有差異,下面就以開發實例說明如何調整分區大小,以及如何新增分區。

3.1 調整system分區大小

各分區均可根據需要進行調整,原生系統的system分區規劃了800M空間,但實際鏡像只有300多M,為有效利用存儲器,可以將此分區縮小為400M:

1)修改文件partition.xml中的字段,size_in_kb=”409600”。

2)修改文件Boardconfig.mk中的字段,BOARD_SYSTEMIMAGE_PARTITION_SIZE = 419430400。

3)重新編譯生成system.img鏡像。

3.2 增加vendor分區

原生平臺僅提供基本和有限的功能,不適合產品化的要求,為擴展原生平臺的功能,需要增加一個300M空間的vendor分區,可用于支持存放不同廠商的Logo、預裝應用、定制程序和配置文件,如前所述partition.xml用于定義和描述分區信息,供燒錄軟件QPST使用,增加分區需要做如下修改:

1)文件里面需要新增一個分區信息,并配置對應的分區大小、類型和要燒寫鏡像的名字等等信息,內容如下。

2)device/qcom/msmxx/Boardconfig.mk里面的分區宏,使這個分區恰好小于等于modem側的partition.xml分區大?。?/p>

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 419430400

3.3 增大userdata分區

Android系統中,內部存儲器的最后一個分區一般命名為userdata分區,是用戶可以使用的分區,其他分區是系統使用的,用戶不能操作。前兩個實例說明了如何實際鏡像大小調整分區、如何根據需求增加分區。最后說明如何去除由于對齊而造成的空間浪費,并盡可能的為用戶增大userdata分區。

1) 更改分區文件。

修改partition.xml文件里面做如下修改。

WRITE_PROTECT_BOUNDARY_IN_KB = 0;

system分區的大小為400M;

userdata的分區為3G;

2) device/qcom/msmxx/Boardconfig.mk修改分區鏡像文件格式化的大小。

把system分區鏡像文件格式化的大小400M

userdata分區鏡像文件格式化的大小3G

BOARD_USERDATAIMAGE_PARTITION_SIZE := 3145728000

Userdata增大后,系統會顯示用戶分區總空間為2.88GB

3.4 減少分區空間浪費的措施

1)計算每個鏡像的分區大小,留有足夠預留空間合理分配每個分區大小。

2)在進行分區布局的時候,盡量讓讀寫屬性一致的放在一起,這樣就可以減少由于對齊造成的空間浪費。

3)通過設置WRITE_PROTECT_BOUNDARY_IN_KB來改變寫保護區域的基準大小。

4)GROW_LAST_PARTITION_TO_FILL_DISK:最好設置為真,這樣最后一個分區就會擴展到最大這樣保證不浪費EMMC存儲

空間。

3.5 注意事項

1)EMMC軟件下載所依賴的分區信息和系統啟動時加載的GPT分區信息必須一致。

2)在改變分區大小時,要防止自己的分區大小總和不能超過EMMC的總大小,否則越界的分區時將會出錯,系統穩定性將得不到保證。

參考文獻

[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分區[EB/OL].[2014-9-1].http://blog.csdn.net/kieven2008/article/details/19327907.

作者簡介

蔡潔,碩士,講師,研究方向:計算機技術。

猜你喜歡
分區高通
上海實施“分區封控”
另辟蹊徑使用Linux備份和還原Windows系統
高通、蘋果專利案新進展:蘋果拒絕與高通和解
歷史轉折后的高通前執行董事長
美政府要求高通推遲股東大會 博通并購案再生變數
《福布斯》歐盟罰高通
大型數據庫分區表研究
神探出手,巧破分區離奇失蹤案
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合