zoukankan      html  css  js  c++  java
  • 八、系统分区及内容

    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区域;

  • 相关阅读:
    DevOps、CI、CD都是什么鬼?
    卧槽!华为《Linux中文手册》火了,完整版 PDF 开放下载!
    MongoDB 常用运维实践总结
    谈谈变更过程中的运维意识
    Ping原理详解
    为什么Redis要比Memcached更火?
    一篇文章教你搞懂日志采集利器 Filebeat
    工程师姓什么很重要!别再叫我“X工”!!!
    这些 Shell 分析服务器日志命令集锦,收藏好
    Linux下找出吃内存的方法总结
  • 原文地址:https://www.cnblogs.com/fbli/p/13367074.html
Copyright © 2011-2022 走看看