1.主要来源几个疑惑:

a.在打包时,执行pack image.cfg sys_partition.fex. image.cfg指定了所有FILELIST,但是sys_partition.fex只指定了部分分区和该分区需要下载的文件,其余文件下载到哪些分区呢?

b.使用phoenixCard升级估计时,可以选择BOOT0/BOOT1,bootloader,ENV,BOOT,system,recovery,除了bootloader对应bootloader.img,ENV对应env.fex,system对应system.img(system.fex),BOOT对应boot.fex,recovery对应recovery.fex,其余文件呢?对应哪些选项?

c.使用fastboot也可以升级某个分区下的内容。

    fastboot update xxx.zip

    fastboot partition partiontion.img

    fastboot erase partition

    fastboot format partition

 

2.首先,来看看在sys_partition.fex中指定了哪些分区:

NAME            CONTENT                 SIZE(x512=B)

bootlaoder      boot-resource.fex       65536

env             env.fex                 32768

boot            boot.fex                32768

system          system.fex              4194304

misc                                    32768

recovery        recovery.fex            65536

cache                                   2097152

metadata                                32768

private                                 32768

frp                                     1024

empty                                   31744

alog                                    163840

media_data                              32768

UDISK                                   -

 

3.再来看看从机器里面读取出来的分区以及大小:

    系统执行cat /proc/partitions获得分区大小以及分区对应的路径。

    系统执行ls -al /dev/block/by-name 获得分区路径与分区别名映射;

UDISK       -> /dev/block/mmcblk0p1     4190191

alog        -> /dev/block/mmcblk0p13    81920

boot        -> /dev/block/mmcblk0p4     16384

bootloader -> /dev/block/mmcblk0p2     32768

cache       -> /dev/block/mmcblk0p8     1048576

empty       -> /dev/block/mmcblk0p12    15872

env         -> /dev/block/mmcblk0p3     16384

frp         -> /dev/block/mmcblk0p11    512

media_data -> /dev/block/mmcblk0p14    16384

metadata    -> /dev/block/mmcblk0p9     16384

misc        -> /dev/block/mmcblk0p6     16384

private     -> /dev/block/mmcblk0p10    16384

recovery    -> /dev/block/mmcblk0p7     32768

system      -> /dev/block/mmcblk0p5     2097152

            -> /dev/block/mmcblk0       7634944 #the main block where all the partitions stored.

            -> /dev/block/mmcblk0boot0  4096

            -> /dev/block/mmcblk0boot1  4096           

            -> /dev/block/zram0         262144 

4.那么接下来一个问题就是如何查看各个分区的内容呢?

    a.首先执行的是“df”命令,或当设备当前已经挂载的分区。

/dev/block/mmcblk0p5    2031440 1019528   1011912  51% /system

/dev/block/mmcblk0p8    1015704    1296   1014408   1% /cache

/dev/block/mmcblk0p13     76528      44     76484   1% /logger

/dev/block/mmcblk0p1    4058864  587020   3471844  15% /data

/dev/block/mmcblk0p2     130798    3564    127234   3% /bootloader

b.可以轻松获得mmcblk0p5(system),mmcblk0p8(cache),mmcblk0p13(alog),mmcblk0p1(UDISK),mmcblk0p2(bootloader)这几个分区主要作用以及主要存储的内容;

c.通过mount命令查看系统当前所有已经挂在的分区的详细信息得到:

/dev/block/mmcblk0p5 on /system type ext4 (ro,seclabel,relatime,data=ordered)

我们可以依样画葫芦,进行其他分区mount操作:

mkdir mnt/test     #确保挂载点存在

mount -o ro  /dev/block/mmcblk0p13 mnt/test

ls /mnt/test

umount mnt/test    #使用完毕后卸载挂载点

d.但是部分分区是EMMC类型,没有文件系统的,存储了raw数据,比如boot,recovery,misc,frp,env都是这种类型的分区。这种分区通常存储一些小的加密文件或者配置文件,重点是小。应用自己负责读取和解析文件格式。对于这类分区只能通过dd命令dump出来后用编辑器查看了。

dd if=/dev/block/mmcblk0p3 of=/mnt/sdcard/env.img #[count=1024]注意of一定要选择一个具有写权限的路径

adb pull /mnt/sdcard/env.img

e.挂在private分区,修改并查看内容。

将序列号写入到private分区:

adb shell

mkdir /mnt/private &&\

busybox mkfs.vfat /dev/block/by-name/private && \

busybox mount -t vfat /dev/block/by-name/private /mnt/private/ &&\

mkdir -p /mnt/private/ULI/factory &&\

cd /mnt/private/ULI/factory &&\

touch snum.txt &&\

echo "FF0000140009">snum.txt &&\

sync &&\

cat snum.txt

 

//重启然后通过命令行获取产品序列号

reboot

adb shell getprop ro.serialno

 

验证private分区内容(通过uboot环境):

在uboot环境pribate对应的cardno为9;

fatls sunxi_flash 9:0 /

fatls sunxi_flash 9:0 /ULI

fatls sunxi_flash 9:0 /ULI/factory

 

e.有时候我们需要知道emmc中各个分区起始地址,结束地址,那么就得借助parted工具。

https://forum.xda-developers.com/android/help/how-to-boot-sd-card-qmobile-z8-bricked-t3712171

adb remount && adb push parted /system/bin

parted /dev/block/mmcblk0 unit s print 得到如下信息(地址,大小都是以扇区为单位,一个扇区为512B):

 2      73728s    139263s    65536s    fat16        bootloader  msftdata

 3      139264s   172031s    32768s                 env         msftdata

 4      172032s   204799s    32768s                 boot        msftdata

 5      204800s   4399103s   4194304s  ext4         system      msftdata

 6      4399104s  4431871s   32768s                 misc        msftdata

 7      4431872s  4497407s   65536s                 recovery    msftdata

 8      4497408s  6594559s   2097152s  ext4         cache       msftdata

 9      6594560s  6627327s   32768s                 metadata    msftdata

10      6627328s  6660095s   32768s                 private     msftdata

11      6660096s  6661119s   1024s                  frp         msftdata

12      6661120s  6692863s   31744s                 empty       msftdata

13      6692864s  6856703s   163840s   ext4         alog        msftdata

14      6856704s  6889471s   32768s                 media_data  msftdata

 1      6889472s  15269853s  8380382s  ext4         UDISK       msftdata

 

那么问题来了,第一个分区(bootloader)起始于73728扇区,那么前面扇区呢?又处在哪个分区呢?如何查看呢?根据阅读EMMC的资料,EMMC的低地址扇区依次存放了boot0,boot1,RPMB分区;uboot,以及boot0.boot1启动例程和参数应该至于boot0/boot1区域;