S5P4418与S5P6618的Android boot.img的解压与压缩, Sparse ext4文件系统
2016-07-12 11:47
1551 查看
文件类型
4418的boot.img是由kenrel + uramdisk组成的ext4 并且是sparse形式的image, 这里面的sparse是紧凑的意思,即将ext4文件系统中的内容为zero的地方“压缩”起来, 从而减少size。制作
这种类型的image,使用make_ext4fs, 并使用-s选项制作而成,例如在4418中(其他Android或者文件系统也是类似),命令如下:<span style="font-family:Microsoft YaHei;font-size:18px;"> make_ext4fs -s -l 67108864 -a boot /home/XXX/g4418_linux/out/boot.img /home/hexiongjun/EmbProj/4418_Yu/g4418_linux/out/boot</span>
其中-a为lable,最后的参数是制作到文件系统中的目录,因此,制作完成后,可以看到file工具识别到的是data 数据文件:
file boot.img
boot.img: data
转化
对此我们可以使用simg2img工具来转换成标准的ext4文件系统的文件:simg2img boot.img boot_ext4.img
此时file工具即可识别:
$ file boot_ext4.img
boot_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_root
cp Test/root.img.gz Temp_root
gzip -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.rc
charger dev init init.g4418.usb.rc init.trace.rc proc sbin sepolicy system
data 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分享:
PPT分享: Linux启动流程
关于initrd与initramfs的区分及其发展历程
相关文章推荐
- ARM方案公司,三星S5P4418卡片式电脑
- X4418简介
- S5p4418 启动配制分析
- S5P4418启动镜像分析
- S5P4418 GPS+北斗移植
- 一 s5p4418 支持SD/TF卡离线烧录
- 二 关于s5p4418 无线wifi模块出现SDIO读写错误的解决方法
- 四 s5p4418 Android 对can总线的支持 支持波特率修改
- 4418开发板友坚火热来袭
- TQ4418开发平台在排队机解决方案的应用
- TQ4418/TQ6818专为数字标牌系统研发的开发平台
- 三星s5p4418核心板,世界上最小的工业核心模块,带屏蔽罩散热装置。
- 金秋十月要选型 板卡试用来飞凌-NXP TI 三星开发板试用
- S5P4418开发板接口说明-飞凌嵌入式
- 飞凌S5P4418核心板在多媒体数字标牌产品上的应用
- S5P4418 使用SD卡启动Android系统
- s5p4418 PWM亮度调节修改
- 高通625系列-MSM8953 (Cortex-A53架构)
- android xml绘图p113-p117
- android事件分发流程