关于ext4 simg fill chunk type

ext4格式sparse image chunk type

挺简单的问题,触及到了知识盲区,记录一下

问题描述:

system分区制卡失败,提示chunk_type error,system近期没有做更新;

问题分析:

  1. 查看工具侧,确认在升级ext4格式分区时会做chunk type的检测,当前工具中支持dont care & raw类型,而解析system.img对比该部分内容发现,该chunk type为fill类型,以前没有看到过这种类型;

  2. google确认该类型:

    sparse image 的格式参考 system/core/libsparse/sparse_format.h

    #define CHUNK_TYPE_RAW		0xCAC1
    #define CHUNK_TYPE_FILL		0xCAC2
    #define CHUNK_TYPE_DONT_CARE	0xCAC3
    #define CHUNK_TYPE_CRC32    0xCAC4
    

    所以定义中是有fill这个类型的,确认上述几个类型所对应的不同内容:

    1. 对于 CHUNK_TYPE_RAW, 相关数据即为 chunk_size 个 block 的原始数据
    2. 对于 CHUNK_TYPE_DONT_CARE, 相关数据为空
    3. 对于 CHUNK_TYPE_FILL, 相关数据为 4 个字节的 fill data

    fill 类型是将相同的数据缩成4个字节来处理;

  3. 确认fill类型是如何生成的

    既然是官方定义的,那么为什么我之前从来没有见到过?

    特地了解近期system.img的差异情况,了解到打包方式有所改变:

    • 以前:使用make_ext4fs直接打包system分区
    • 现在:使用makfs.ext4打包system分区,其实使用的就是img2simg这个工具
  4. 验证上述猜测是否正确:

    • 确认img中chunk类型:

      system/core/libsparse/simg_dump.py -v cache
      在这里插入图片描述

    • 使用make_ext4fs打包文件,并确认生成类型:

    • 使用simg2img将上述文件还原,并重新使用img2simg生成sparse image,并查看

    发现,确实使用img2simg生成的是有fill类型的

    然而,我们以前使用的img2simg测试居然没有生成fill类型,这又是咋回事??

    是否为版本问题

  5. 多版本验证:

    android 4.2

    android 6.0

    linux

    apt-get install android-tools-fsutils
    

    other

  6. 上述make_ext4fs与img2simg差异:
    确认是属于安卓打包工具img2simg自动生成的。若未压缩的img,存在全0部分。该部分自动生成chunk_type_fill类型。原打包流程使用make_ext4fs工具是打包和压缩一体化命令,由于该命令清楚具体文件目录结构,因此不需要针对全0数据进行压缩。而img2simg工具,仅是img压缩,只是基于img的二进制数据生成sparse file,没法根据文件的组织结构情况进行压缩。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值