[MTK] 如何确认各个分区起始偏移与大小
文摘 无标签 2020-05-15 阅读:11236分区表中(partition_table_MTXXXX_emmc.csv)中包含各分区预设大小信息,但是
(1)ptgen工具在根据分区表生成scatter文件中,会根据平台配置文件、align需求等进行调整,导致scatter文件中部分分区大小与预设大小可能不一致。
(2)为达到usedata分区自适应存储器(如emmc)实际大小的目的,第一次开机过程中还会根据存储器实际剩余空间对userdata分区进行resize,即userdata分区大小与scatter文件的大小可能不一致。
因为上面提到的因素,本篇FAQ将描述各个分区起始偏移与大小的确认方法:
1. pgpt、sgpt分区存储的是分区表本身相关信息,起始偏移与大小情况:
pgpt分区,放在对应存储器区域起始,起始偏移为0,分区大小直接参考MTXXXX_Android_scatter.txt即可;
sgpt分区,放在对应存储器区域最后,起始偏移需根据对应存储器区域实际大小进行计算,分区大小直接参考MTXXXX_Android_scatter.txt即可;
2. data分区之前的分区,分区起始偏移与大小,直接参考MTXXXX_Android_scatter.txt即可。
3. 除了pgpt、sgpt外,其它所有分区,
(1)可以通过flash tool的下载过程log查看(名称类似于:SP_FT_Dump_xxxxGLB_xxxx.log),搜索part_name,可以看到类似如下信息(以userdata分区为例),其中offset为分区起始偏移,size为分区大小,单位为byte:
[00001030] [09:02:59:956886] [Tid0x000020b8] [debug] part_name:[userdata], offset[0xc9000000], size[ 0x2e17fbe00], region[8] #(gpt.cpp, line:495)
(2)可以通过开机lk阶段log查看,搜索GPT_LK,可以看到类似如下信息(以userdata分区为例),其中start_sect为分区起始偏移,nr_sects为分区大小,单位为512byte:
GPT_LKname=userdata, start_sect=0xcc4000, nr_sects=0x2d5c7df, uuid=c4c310e2-4a7e-77d3-4818-61e2d8bb5e86
(3)通过adb shell查看,但不同平台相关节点会有差异,如果参考下述仍然有疑问,请单独提eservice处理。
下面以userdata为例说明,查看到的对应start值为分区对应起始偏移,size值为分区对应大小,单位为512byte
对于EMMC:
xxxx:/ # ls -l /dev/block/platform/bootdevice/by-name
total 0
lrwxrwxrwx 1 root root 21 2015-02-12 00:13 boot -> /dev/block/mmcblk0p25
... ...
lrwxrwxrwx 1 root root 21 2015-02-12 00:13 userdata -> /dev/block/mmcblk0p31
xxxx:/ # cat /sys/block/mmcblk0/mmcblk0p31/start
6782976
xxxx:/ # cat /sys/block/mmcblk0/mmcblk0p31/size
8454111
P.S. p31请根据实际分区对应值修改
对于UFS:
xxxx:/ # ls -l /dev/block/platform/bootdevice/by-name
total 0
lrwxrwxrwx 1 root root 16 2009-12-31 19:00 boot -> /dev/block/sdc36
......
lrwxrwxrwx 1 root root 16 2009-12-31 19:00 userdata -> /dev/block/sdc43
xxxx:/ # cat /sys/block/sdc/sdc43/start
9879552
xxxx:/ # cat /sys/block/sdc/sdc43/size
240009152
P.S. 43请根据实际分区对应值情况修改
Note: 上文MTXXXX需与实际使用平台一致