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討論