博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
S5P4418与S5P6618的Android boot.img的解压与压缩, Sparse ext4文件系统
阅读量:4170 次
发布时间:2019-05-26

本文共 2169 字,大约阅读时间需要 7 分钟。

文件类型

4418的boot.img是由kenrel + uramdisk组成的ext4 并且是sparse形式的image, 这里面的sparse是紧凑的意思,即将ext4文件系统中的内容为zero的地方“压缩”起来, 从而减少size。

制作

这种类型的image,使用make_ext4fs, 并使用-s选项制作而成,例如在4418中(其他Android或者文件系统也是类似),命令如下:

 make_ext4fs -s -l 67108864 -a boot /home/XXX/g4418_linux/out/boot.img /home/hexiongjun/EmbProj/4418_Yu/g4418_linux/out/boot

其中-a为lable,最后的参数是制作到文件系统中的目录,因此,制作完成后,可以看到file工具识别到的是data 数据文件:

file boot.img boot.img: data

转化

对此我们可以使用simg2img工具来转换成标准的ext4文件系统的文件:

simg2img boot.img boot_ext4.img
此时file工具即可识别:

$ file boot_ext4.imgboot_ext4.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
也可以看到两者的size变化:

$ ls -lh boot*-rw-rw-r-- 1 hexiongjun hexiongjun 64M Jul 12 11:21 boot_ext4.img-rwxr--r-- 1 hexiongjun hexiongjun 14M Jul 12 11:15 boot.img
sparse型是14M,而其filesystem其实是64M。

boot.img的解压与压缩

我们可以直接mount并查看,以及更改内部的内容,就像disk中的partition with ext4 FS一样,例如下面是命令:

$mkdir Test$sudo mount boot_ext4.img Test$ls Test/battery.bmp  logo.bmp  lost+found  ramdisk-recovery.img  root.img.gz  uImage  update.bmp
可以看到里面有uImage,以及root.img.gz,前者为kernel后者为uramdisk,同样也可以查看其类型:

$ file Test/root.img.gz Test/root.img.gz: gzip compressed data, from Unix, last modified: Mon Jul  4 17:32:32 2016
如果我们需要更改uramdisk,那么可以按照如下方式进行:

mkdir Temp_rootcp Test/root.img.gz Temp_rootgzip -d root.img.gz
然后得到一个cpio文件:

$file root.img root.img: ASCII cpio archive (SVR4 with no CRC)
使用cpio解压即可:

$ cpio -i -F root.img 2364 blocks
可以看到内容如下,包含原来的root.img:

$ ls adj_lowmem.sh  default.prop   fstab.g4418      init.g4418.rc      init.recovery.g4418.rc  init.zygote32.rc   root.img        selinux_version   sys               ueventd.rccharger        dev            init             init.g4418.usb.rc  init.trace.rc           proc               sbin            sepolicy          systemdata           file_contexts  init.environ.rc  init.rc            init.usb.rc             property_contexts  seapp_contexts  service_contexts  ueventd.g4418.rc
也可以再次压缩与制作uramdisk:

find . | cpio -ov -H newc | gzip > ../root.img.gz
然后拷贝到mount了的ext4文件系统中,然后再umount raw ext4,最后还需要转换成sparse image:

mv boot.img boot_ori.img && img2simg boot_ext4.img boot.img
关于uramdisk也可以看我以前的ppt分享:

转载地址:http://cybai.baihongyu.com/

你可能感兴趣的文章
架构师成功沟通的三个关键
查看>>
共享锁、排他锁、互斥锁、悲观锁、乐观锁、行锁、表锁、页面锁、不可重复读、丢失修改、读脏数据...
查看>>
我是如何用 redis 做实时订阅推送的
查看>>
Mysql索性为什么要用B+Tree当索引
查看>>
以淘宝网为例,解析大型Java项目架构演进
查看>>
微服务架构下该如何技术选型?
查看>>
实力坑队友!CTO写出低级Bug,致公司70GB数据遭泄露
查看>>
再见FTP/SFTP!是时候拥抱下一代文件传输利器Croc了
查看>>
涨姿势了!原来这才是多线程正确实现方式
查看>>
【Docker】5分钟带你快速了解Docker和k8s
查看>>
阿里Java工程师分享3年工作经验的程序员应该具备的技能
查看>>
漫画 | Java语言是如何诞生的?
查看>>
Spring面试中常见的9种设计模式!
查看>>
你竟然不知道分布式与集群的区别?
查看>>
头疼!百万级 MySQL 的数据量,如何快速完成数据迁移?
查看>>
全文搜索引擎到底选 ElasticSearch 还是 Solr ?
查看>>
面试这样回答Java调优,至少加1K!!!
查看>>
Java分布式面试题集合(收藏篇)
查看>>
除了负载均衡,Nginx 能做的真是太强大了!
查看>>
微博千万级规模高性能高并发的网络架构设计
查看>>