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,没法根据文件的组织结构情况进行压缩。

关于ext4 simg fill chunk type相关推荐

  1. 05 RTMP Chunk Stream

    RTMP块流 本节指定实时消息传递协议区块流(RTMP区块流).它为更高级的多媒体流协议提供多路复用和分组服务. 虽然RTMP区块流设计用于与实时消息协议(第6节)配合使用,但它可以处理发送消息流的任 ...

  2. 恢复ext4文件系统superblock

    恢复ext4文件系统superblock 1. Create ext4 文件系统. [root@localhost ~]# mkfs.ext4 /dev/vdb1 [root@localhost ~] ...

  3. 常见图片文件格式简析

    "常见":此处指BMP JPEG GIF PNG 四种. 软件: Windows 画图(除了Photoshop,我最喜欢的编辑器,简单粗暴) HxD BMP BMP文件分为4部分: ...

  4. android有用的命令

    转载请指明出处:草帽的后花园 文件1:下载 Android Tools详解 aapt aapt即Android Asset Packaging Tool , 在SDK的platform-tools目录 ...

  5. 基于Android4.0.3的各种工具信息整理(共130个)

    昨日下午,老大交给一个任务,就是对android编译出来的build/host/linux-x86/bin下面的各种可执行程序进行一个了解 于是我就花了一天的时间来搜集信息,大致有两个文件 一个是比较 ...

  6. c# midi窗体_Midi:C#中的Windows MIDI库

    c# midi窗体 介绍 (Introduction) I do some MIDI sequencing and recording and I found it helpful to be abl ...

  7. 深入Android系统(八)Android的资源管理

    Android的优势之一是它几乎能运行在任何尺寸的设备上,为了能让同一个apk在不同设备上正常运行,Android设计了一套资源管理系统来完成目标. Android并不是简单地将UI布局和图片进行扩大 ...

  8. VC数字图像处理编程讲座之六

    图像文件格式 一般的图像文件结构主要都包含有文件头.文件体和文件尾等三部分 文件头: 软件ID.软件版本号.图像分辨率.图像尺寸.图像深度.彩色类型.编码方式.压缩算法 文件体:图像数据.彩色变换表 ...

  9. m3u8文件转换mp4

    起因 今天在做项目的时候遇到下载的视频文件格式是m3u8,且播放器不能播放.产品经理提出需要下载可播放的视频格式.便研究起来如何m3u8转mp4并下载. 旧版本 后端所给的是一个对应的加密链接,将加密 ...

  10. RM/RMVB文件格式总结

    RM/RMVB文件格式总结 RM文件格式是标准的标记符文件格式,RM文件格式把标记符块组合成头块,数据快,索引块,这些标记符块的组合方法如下: .RMF头块 RealMedia File Header ...

最新文章

  1. express 连接 moogdb 数据库
  2. Opencv中三种操作像素的方法
  3. onlyoffice回调函数controller方式实现
  4. ASP.NET系统退出(移除Session 、清除浏览器缓存)
  5. c语言更改编译时字体,c习题编译时出现空的字符常量,怎么修改?
  6. 共享的网络如何让自己比别人快_ipfs网络的分布式数据是如何做到数据共享的?...
  7. python 判断线程是否执行完毕_判断线程池中的线程是否全部执行完毕
  8. 完全二叉树的结点数计算
  9. C++ 基于凸包的Delaunay三角网生成算法
  10. 时分多路复用(Time Division Multiplexing,TDM)
  11. LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
  12. 传智播客 python 私有化学习笔记
  13. 反计算机病毒技术论文,计算机病毒反病毒技术论文
  14. KITTI数据集可视化
  15. Hbase 详细介绍以及简单的Hbase命令操作(入门必备)
  16. SEO伪原创文章批量生成的方法「冷师兄」
  17. Boostnote:适合程序员的笔记软件
  18. Google镜像站点 资源收集
  19. SoundPool播放系统提示音
  20. 硕盟 HDMI转VGA 笔记本台式主机HDMI转VGA显示器转接头

热门文章

  1. cocos2d-x3.0 关于CCAnimate 的一些资料
  2. 新安装 Ubuntu 12.10 需要做的 10 件事(转)
  3. 如何修改远程桌面连接端口 ,历史记录,支持多用户
  4. c语言链表死循环,单项循环链表解决Joseph 问题,死循环了,求帮忙
  5. raid5坏了一块盘怎么办_如果你的硬盘坏了 你的照片还能找回来吗?
  6. python下载后在哪打开_centos6/7系统的自带的python安装在哪里?
  7. python中的urllib模块中的方法
  8. mycat err:java.sql.SQLNonTransientException: find no Route:select日志报错
  9. 进程cpu使用率的计算
  10. 70个具有商业实战性的精品Android源码