哥们要我做些模拟包,给过来的是mtk的底包,需要从system.img中提取部分文件。
网上一找资料,说是yaffs2文件系统,同时以前做linux的时候也是用yaffs2,感觉碰到老朋友了,不管三七二十一,跟着就用uyaffs工具解文件,但怎么都是一个error。
后面同事帮忙把文件算是弄出来了,网上一查,原来从android从2.3版本起就推荐用ext4文件系统。
而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
http://arstechnica.com/information-technology/2010/12/ext4-filesystem-hits-android-no-need-to-fear-data-loss/