android system.img

哥们要我做些模拟包,给过来的是mtk的底包,需要从system.img中提取部分文件。

网上一找资料,说是yaffs2文件系统,同时以前做linux的时候也是用yaffs2,感觉碰到老朋友了,不管三七二十一,跟着就用uyaffs工具解文件,但怎么都是一个error。

后面同事帮忙把文件算是弄出来了,网上一查,原来从android从2.3版本起就推荐用ext4文件系统。内部储存伴随着从raw nand flash 到 emmc的变化。

而ext4默认制作出来的img会有很多空白的数据,文件比较大,又整了个-s的参数来对该img进行压缩,所以默认做出来的img不能直接mount成ext4文件系统,需要用simg2img工具解压成正常的ext4 img文件。

但这里还是有点不明白,用sudo fdisk -l tmp.img,查看解压出来的img

Disk tmp.img: 461 MB, 461373440 bytes
255 heads, 63 sectors/track, 56 cylinders, total 901120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk tmp.img doesn't contain a valid partition table

发现这个文件根本没有分区表,暂时还没搞懂真没回事

如果要把一个文件夹制作成该格式的文件,只用make_ext4fs就行了

如果要跟踪makefile system.img生成流程,其实很简单:

在makefile里面BUILT_SYSTEMIMAGE调用build/tools/releasetools/build_image.py进行分区处理,包括其他如data分区也是一样,他们会把处理的结果保存到$OUT/obj/PACKAGING里面。

build_image.py还会调用system/extras/ext4_utils/mkuserimg.sh,而mkuserimg.sh就调用make_ext4fs真正处理。

参考:

http://elinux.org/Android_File_Systems

https://lwn.net/Articles/440690/

http://arstechnica.com/information-technology/2010/12/ext4-filesystem-hits-android-no-need-to-fear-data-loss/

原文地址:https://www.cnblogs.com/Empenguin/p/3673274.html