1. 程式人生 > >android 9.0 中關於OTA 升級的注意事項

android 9.0 中關於OTA 升級的注意事項

droid 分割槽檢視 emcc 7.x 8.x

 

一、要確定有多少個分割槽?

詳細解析:

major 表示主裝置號 

minor 表示次裝置號 

#blocks 表示的是block的數目 

name 是指的裝置名稱

例如:

major 主裝置號,比如一個U盤有3個分割槽,主裝置名為sda,major為8,分割槽的major也為8 (可能所有的U盤插進來,major都是8),minor則為分割槽號,sda1,sda2,minor值為1 ,2

zram swap 主要原理就是從記憶體分配一塊區域出來用作 swap 分割槽。如果記憶體空間不夠時,不是把應用程式殺掉,而是把應用程式所佔用的記憶體資料複製到 swap 分割槽,等切換回來的時候就可以直接把這部分資料恢復到記憶體當中,節省重新開啟所需的時間。

而被放到 swap 分割槽的應用程式,所佔用的記憶體都是被壓縮過的。

注:

config中均是我司內部有測試過的,如無特殊需求,建議按照default設定,因為設定太大的swap ,會導致可以直接使用的記憶體減少,這樣就會間接增加壓縮,解壓縮對CPU的消耗,當然這個設定較大,可以快取更多應用在記憶體,若設定較少,可用記憶體較多,但是A-go的版本本身的記憶體並不大,設定較少,會使緩衝的應用較少,這樣每次啟動也會延長時間

USRDATA分割槽就是任何使用者都可以讀寫的分割槽,不可設定大小,大小等於emmc總容量減去其他分割槽的大小。

mmcblk0 為 eMMC 的塊裝置,也相當於真實內部儲存總容量

mmcblk0boot0 和 mmcblk0boot1 對應兩個 Boot Area Partitions,這兩個區域在儲存的穩定性、可靠性及擦除次數上都遠比UDA要好 ,所以經常放一些關鍵資料

mmcblk0rpmb 則為 RPMB Partition,保護性儲存,是用來給系統存放一些特殊的、需要進行訪問授權的資料(指紋,安全支付)

mmcblk0px 為 UDA 劃分出來的 SW Partitions,AP及使用者可以進行讀寫儲存的區域,通常其大小為整塊EMMC表示大小的93%左右

注:

1k-blocks=1024B

二、分割槽對應的別名?

也可以到原始碼裡面獲取這些資訊:

mtk方案:

out\target\product\k39tv1_64_bsp\recovery\root\etc

recovery.fstab

三、主要的分割槽是?

四、怎麼修改?

8.x MTK

eg:

alps/device/mediatekprojects/$project/BoardConfig.mk中設定:

BOARD_MTK_SYSTEM_SIZE_KB := 改成你需要的

BOARD_MTK_VENDOR_SIZE_KB := 307200

BOARD_MTK_CACHE_SIZE_KB := 114688

8.x sprd

eg:

device/sprd/pike2/sp7731e_1h10/BoardConfig.mk中定義:

BOARD_VENDORIMAGE_PARTITION_SIZE :=314572800

BOARD_CACHEIMAGE_PARTITION_SIZE := 104857600

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 改成你需要的--待確定,修改如下:

五、附件

六、知識補充:

swap功能

swap 分割槽

https://blog.csdn.net/fanmengke_im/article/details/28389495

單個手機自定義

https://blog.csdn.net/u011109881/article/details/73694700

開啟關閉swap

https://blog.csdn.net/Extreme_fallen/article/details/84322475

解析swap

https://blog.csdn.net/hiyun9/article/details/51967742

adb shell cat /proc/swaps ---對應的swaps分割槽

mtk8.1 關閉swap

echo 0 > proc/sys/vm/swaappiness

echo 0 > /sys/fs/cgroup/memory/sw/memory.swappiness

檢視swap功能是否開啟?

adb shell cat /proc/meminfo

檢視SwapTotal的值是否為0,0代表關閉

linux檢視磁碟及檔案大小:

du -h

du -sh

---檔案大小

df -h

---磁碟大小

free -m

https://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html

CTS要求

https://source.android.com/compatibility/cdd

https://source.android.com/compatibility/android-cdd.pdf

vendor.img

http://gityuan.com/2018/04/08/android_p/

為什麼emmc總量大於實際裝置中顯示的大小?

1.emmc儲存中有壞死塊

2.8G的計算方式不一致

8G=8*1000MB=8*1000*1000KB=8*1000*1000*1000B

而我們計算機或手機的計算方式為:

8G=8*1024MB=8*1024*1024KB=8*1024*1024*1024B

3.本身儲存了部分軟體,佔了部分空間

參考學習

https://blog.csdn.net/roland_sun/article/details/50969958

https://www.cnblogs.com/xiaolei-kaiyuan/p/5462436.html

https://blog.csdn.net/tianshiyalin/article/details/37775057

https://blog.csdn.net/u013686019/article/details/66472291

https://linux.codingbelief.com/zh/storage/flash_memory/

https://blog.csdn.net/u014645605/article/details/52061034

https://blog.csdn.net/zhouzhenhe2008/article/details/72943314?utm_source=blogxgwz3

https://www.jianshu.com/p/33335b7cc6bb

mtk online中相關資料

[FAQ06257] Flash上新建分割槽的大小限定

內容 (2014-09-10)

目前的分割槽型別有如下兩種:Rawdata和檔案系統,檔案系統的型別與Flash型別相關,Nand Flash上的檔案系統為Yaffs2;Emmc上的檔案系統為Ext4。

 

Rawdata:至少1*Block Size;

Yaffs2: 至少9*Block Size;

Ext4:至少5MB

 

目前常見的Nand Flash上,Block Size一般為128KB和256KB。

 

另外需要注意一點,新建分割槽的start address和size必須是Block align的。

[FAQ06165] [NVRAM][SIM_ME_LOCK]protect_f和protect_s分割槽的作用是什麼?

內容 (2017-07-07)

[Description]

protect_f和protect_s分割槽的作用是什麼?

 

[Solution]

在沒有Protect_s和Protect_f分割槽之前,SIM ME LOCK資料存在USER DATA分割槽內,詳細路徑為/data/nvram/md/NVRAM/IMPORTANT。

當恢復出廠設定時,會將/data/nvram/md/下的檔案全部清除,其後開機時會將NVRAM BIN Region中備份的資料recovery到/data/nvram/md/下。

如NVRAM BIN REGION中資料為空,則會按照預設值生成SIM ME LOCK資料。

如NVRAM BIN REGION中資料不為空,則會將SIM ME LOCK資料恢復為NVRAM BIN REGION儲存的狀態。

針對case 2,由於NVRAM BIN REGION中儲存的狀態並不總是同恢復出廠之前/data/nvram/md/NVRAM/IMPORTANT下的SIM ME LOCK資料狀態一致,因此可能無法滿足SML 的更新一致性要求。

為了對SML資料進行持久化儲存以及更新一致性的目的,我們將SML資料移入Protect_s和Protect_f分割槽。

Protect_s和Protect_f分割槽的特點有:

Download的時候若要format USERDATA分割槽時,不會format Protect_s和Protect_f。

恢復出廠設定時,也不會清除 Protect_s和Protect_f。但若此時BIN Region中無內容,開機時會判斷出USERDATA分割槽中/data/nvram/md不存在且BIN Region中無內容,進而斷定是第一次開機從而根據預設值生成SIM ME LOCK。

[FAQ04658] 【partition】android\cache\userdata三個partition大小設定

內容 (2013-01-03)

[DESCRIPTION]

在6589,eMMC中,JB的android\cache\userdata三個partition大小設定

[SOLUTION]

(1)android分割槽:650M

      a,預留更大的空間來安裝apk

      b,如果未來不需要upgrade,可以適當縮寫這個分割槽的大小

     c,建議這個分割槽不要小於512M。

(2)cache分割槽:126M

      a,這個分割槽的大小大於等於100M,以滿足google的CDD測試

      b,FOTA升級的時候會用到cache分割槽

(3)userdata分割槽:1024M

      a,至少是350M,以滿足google的CDD測試

      b,可以給這個分割槽預置更大的空間來以便user安裝更多的apk

      c,FOTA升級的時使用這個分割槽來download

[FAQ21281] android P分割槽表中odmdtbo與dtbo分割槽的說明

內容 (2018-10-18)

[DESCRIPTION]

 

Android O版本odmdtbo.img,在Android P版本改名成dtbo.img。

 

雖然android P分割槽表中可以同時看到odmdtbo與dtbo分割槽,但實際上,ptgen在build生成的MTxxxx_Android_scatter.txt中,僅會包含其中一個分割槽。

 

 

[SOLUTION]

P版本有一個巨集開關: MTK_DTBO_UPGRADE_FROM_ANDROID_O,配置路徑:

/device/mediatekprojects/<your_project>/ProjectConfig.mk

 

1. 對於需要OTA (O to P)升級到P版本的Project,分割槽layout必須與O版本完全一致,因此,請配置:

      MTK_DTBO_UPGRADE_FROM_ANDROID_O = yes

   此時build會生成odmdtbo.img,對應下載到odmdtbo分割槽。

 

 

2. 對於P版本新開的Project,請配置:

      MTK_DTBO_UPGRADE_FROM_ANDROID_O = no

   此時build會生成dtbo.img,對應下載到dtbo分割槽。

 

 

[Related Information]

1. FAQ21246 Android P dtbo 

2. OTA (O to P)升級,還會涉及其它修改,請參考:

    《Android OTA SDCARD update》,重點看OTA(O to P)相關部分。

3. Google關於dtbo的說明:

    https://source.android.com/devices/architecture/dto/partitions

 

[FAQ03559] [Storage]MTK platform partition meaning

Pre-loader

Pre-loader image

Handles all the download and secure boot procedure 

       DSP_BL

 DSP Boot Loader

        MBR、EBR1、EBR2

 Ext4 file system partition index table

       PMT

 Partition management table

       NvRam

Stores the hardware related information, such as calibration data, MAC address, IMEI … etc

       SECCFG and SECSTATIC

Reserved for the security platform used

    protect1 or protect_f

store SIM LOCK

    protect2 or protect_s

backup SIM LOCK

    pgpt

Partition management table, compared with MBR

    sgpt

backup of pgpt

    oemkeystore and keystore

image authentication key for verified boot, not used yet

    tee1

Trusted Excution Environment(https://www.trustonic.com/technology/trustzone-and-tee)

    tee2

backup of tee1

     U-boot/LK

 Second loader image

Handles most hardware initializations and bring-up entire Linux kernel

     Boot image

Linux kernel image and it's root file system

     Recovery

Recovery kernel image and it's root file system

Handles all the system recovery and firmware update functionalities

    SEC_RO or SECRO

Reserved for the security platform used

     Misc

Used for the recovery procedure (power loss)

     Logo

 Boot-up logo image

     EXPDB

 Store Exception database

     System

 Android system image

     Cache

 For  Android internal used

 Store Android internal cache data or web cache data

    User data

Used for Android system to store user data such as user contacts, settings, installed applications … etc

     FAT/intsd

Internal sdcard on emmc

      OTP

Otp(one time program) area on emmc

   flashinfo

flash tool download information

     BMTPOOL

Handles Bad Block Management(nandflash used and reserved on emmc)

   PARA

save parameter for recovery

   FRP

factory reset for protect , used for stolen phones

   NVDATA

store data in data/nvram/

   PROINFO

a nvram partition, store one struct default, can be added

   md1img, md1dsp,md1arm7, md3img

For Android M, MD image have switched to MD standalone partition, all modem images will be load from the partition: md1img, md1dsp, md1arm7 and md3img

   scp1,scp2

system control processor, used for recovery fail

   lk1,lk2

used for the case of update lk throught OTA fail

   persist

 store data which will be stable for a long time

   metadata

store master key for data encryption

   nvcfg

nvram config, controlled by MTK_NVCONFIG_PARTITION_SUPPORT, not used yet

   custom

customization partition, controlled by MTK_CIP_SUPPORT

   efuse

download BB chip's efuse

   ppl

Privacy protection lock,used for mobile phone antitheft

[FAQ20591] 關於Android Go 版本userdata 分割槽size限定說明

內容 (2018-01-18)

[DESCRIPTION]

 

 根據google釋放的Android Go 文件《GMS_Go_Requirements.pdf》中Disk Space Requirements章節的說明,Android Go版本,需要根據emmc size做調整,userdata分割槽至少打到如下size限定要求,來滿足終端使用者的使用體驗需求。

 

 

 

[SOLUTION]

 

需要特別注意上面的說明,GB單位是以1000位base計算的,不是1024 base,

 

以8GB emmc為例,要求開機後,adb shell df 查到的data分割槽1k-blocks的數值*1024之後>= 5500000000即可

也就是 data分割槽的total size > 5500000000 bytes,約5.1 GB就可以滿足google要求

 

這部分我們有跟google 確認過,按上面理解配置即可。

針對google在A-Go上userdata分割槽這部分限定,按O版本原生的配置無法達到google的要求,

 

我們建議在BoardConfig.mk中,按如下大小設定,這樣可以滿足google需求,且不影響後續升級及軟體基本功能

 

alps/device/mediatekprojects/$project/BoardConfig.mk中設定:

 

BOARD_MTK_SYSTEM_SIZE_KB := 1024000

BOARD_MTK_VENDOR_SIZE_KB := 307200

BOARD_MTK_CACHE_SIZE_KB := 114688

 

修改後如有相關問題,請提eservcie支援。

[FAQ10389] 如何關閉 zram/swap功能

也可以cat /proc/meminfo 裡面的swap相關欄位為0

[FAQ09456] zram(記憶體壓縮)介紹

內容 (2015-10-08)

下面是對Zram(記憶體壓縮)一個簡單介紹:

1. zram 又稱記憶體壓縮,Linux kernel會把不常用的記憶體進行壓縮,以換出更多的記憶體供系統使用

    -- 平時空閒時候會做壓縮,以備不時之需

    --  kernel 申請不到記憶體,會觸發壓縮機制

 

2. 只有user process的記憶體可被壓縮

 

3. 壓縮是有成本的,會影響performance

    -- 通常,launch app的時候會受影響

    -- 程式碼執行中,突然要大量記憶體的時候也會受到影響

 

4. 在LCA/non-LCA的專案都有可能Enable,目前為止只有72&82&92專案上面支援,其它暫不支援

 

若有更細節問題,可提e-service與MTK討論