在画super分区的layout图的时候,解析里面数据,发现有一些数据对不上,后来发现跟sparse格式有关。下面解析一下super image里面的内容。
下面是关于sparse相关的结构体,路径:system/core/libsparse/sparse_format.h
sparse_header占用28byte,chunk_header占用12byte。这是sparse image的开头,共占用40byte。
magic: 0xed26ff3a
major_version:0x1
minor_version:0x0
blk_sz:4096
CHUNK_TYPE_RAW:raw data
CHUNK_TYPE_DONT_CARE:0
CHUNK_TYPE_FILL:4 bytes of fill data
下面是我截取super.image的开头部分,可以一一对应上面的struct。
下面画一个结构图。包含三种结构的基本图:
首先是sparse_header占用28byte,然后是12byte的chunk_header,同样这chunk_header的类型决定了后面跟着的数据,如果读到数据是0xCAC1意味着后面是本身的raw_data,如果是0xCAC3,则后面num为0,接着再0xCAC2意味着后面填充4byte的内容。下面两张图可以体现出来,可以根据自己的image解析数据。
可以看到0xCAC2占用12byte后面跟4byte的fill data,0xCAC1占用12byte后面是跟着实际的raw data。
可以看到0xCAC3占用12byte后面不跟实际raw data,0xCAC1占用12byte后面是跟着实际的raw data。