Android 打包解包的流程及工具make_ext4fs simg2img使用说明

Android 打包解包的流程及工具make_ext4fs simg2img使用说明

1、使用makefs 制作img

先看看make_ext4fs的用法

xxx@AndroidServer:~/Tmp$ make_ext4fs 
Expected filename after options
make_ext4fs [ -l  ] [ -j  ] [ -b  ]
    [ -g  ] [ -i  ] [ -I  ]
    [ -L 

raw data format

raw ext4 image,其特点是完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载

xxx@AndroidServer:~/Tmp$ make_ext4fs -l 3000M  vendor.raw.img vendor/
Creating filesystem with parameters:
    Size: 3145728000
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8000
    Inode size: 256
    Journal blocks: 12000
    Label: 
    Blocks: 768000
    Block groups: 24
    Reserved block group size: 191
Created filesystem with 4152/192000 inodes and 700980/768000 blocks
xxx@AndroidServer:~/Tmp$ 
xxx@AndroidServer:~/Tmp$ file vendor.raw.img 
vendor.raw.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
xxx@AndroidServer:~/Tmp$ 
xxx@AndroidServer:~/Tmp$ ls -lh vendor.raw.img 
-rw-r--r-- 1 xxx xxx 3.0G Dec 26 14:35 vendor.raw.img

sparse data format

如果带 -s 参数呢

xxx@AndroidServer:~/Tmp$ make_ext4fs -l 3000M -s vendor.s.img vendor/
Creating filesystem with parameters:
    Size: 3145728000
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8000
    Inode size: 256
    Journal blocks: 12000
    Label: 
    Blocks: 768000
    Block groups: 24
    Reserved block group size: 191
Created filesystem with 4152/192000 inodes and 700980/768000 blocks
xxx@AndroidServer:~/Tmp$ 
xxx@AndroidServer:~/Tmp$ file vendor.s.img 
vendor.s.img: data
xxx@AndroidServer:~/Tmp$ 
xxx@AndroidServer:~/Tmp$ ls -lh vendor.s.img 
-rw-r--r-- 1 xxx xxx 2.7G Dec 26 14:37 vendor.s.img

这里file 和size 就看到两者的差别了

sparse 格式是一个非常普通的dat文件。由于它将raw ext4进行稀疏描述,因此尺寸比较小(没有全零的无效填充区,一般在300到500M之间)。

目前Android 制作的img 都是sparse data的

以system img 为例

./make_ext4fs -s -T -1 -S out/target/product/ronny_box/root/file_contexts -l 1024M -a system system.img systemimg
./make_ext4fs -l 1024M -s -a system system_new.img systemimg

参数解析:1024M代表你要打包的system.img大小,这个值可以参考挂载前system.img的大小 "-a system",是指这个img用于android系统,挂载点是/system,使用这个参数,make_ext4fs会根据private/android_filesystem_config.h里定义好的权限来给文件夹里的所有文件重新设置权限,如果你刷机以后发现有文件权限不对,可以手工修改android_filesystem_config.h来添加权限,重新编译make_ext4fs,也可以不使用 “-a system”参数,这样就会使用文件的默认权限。 system_new.img代表新生成的img systemimg就是上面挂载后的目录

Raw/Sparse 格式转换

Android本身提供了源代码工具在两者之间转换,源代码位于:

system/core/libsparse/simg2img.c // 将sparse image转换为raw image;
system/core/libsparse/img2simg.c // 将raw image转换为sparse image;

如果完整的进行过一次Android的编译,默认会将simg2img当作主机工具编译出来,

out/host/linux-x86/bin/simg2img

但默认是不会编译img2simg的,我们可以手工进行编译:

$ . build/envsetup.sh
$ lunch your_product
$ make img2simg_host

用法也比较简单

$ simg2img
Usage: simg2img  
$ img2simg
Usage: img2simg   []

举例将刚刚生成的img来做转换 vendor.s.img -> vendor.raw.img

xxx@AndroidServer:~/Tmp$ file vendor.s2r.img 
vendor.s2r.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
xxx@AndroidServer:~/Tmp$ 
xxx@AndroidServer:~/Tmp$ ls -lh vendor.s2r.img 
-rw-rw-r-- 1 xxx xxx 3.0G Dec 26 14:45 vendor.s2r.img

挂载ext文件分区

raw ext4 image,完整的ext4分区镜像可以直接挂载

xxx@AndroidServer:~/Tmp$ mkdir mount_vendor
xxx@AndroidServer:~/Tmp$ sudo mount vendor.s2r.img mount_vendor/ -o loop

参考链接

https://blog.csdn.net/u011006622/article/details/85836640

https://blog.csdn.net/jingwen3699/article/details/81807024

你可能感兴趣的:(Android 打包解包的流程及工具make_ext4fs simg2img使用说明)