ROM的提取和RFS文件的解包打包
以下内容来自机锋网```作者找不到了`见谅!如果作者看到请联系本人修改!
本讲的主要目的:
1)简单介绍Odin刷机包ROM的结构,为文件提取和以后定制ROM做准备。
2)ROM文件的提取,主要是apk文件的提取,介绍提取方法和几个常用软件。
3)RFS文件的解包和打包。这是定制ROM的基础和必备的步骤。
1. ROM结构介绍
1) Odin刷机包ROM结构
I897和I9000的Odin ROM通常以压缩包形式传播。文件形式为 .rar或 .zip。不管是哪一类,都可以在Windows下用WinRAR,或WinZIP,或7-zip进行解压缩。解压后得到TAR文件包(刷机包)。
在通常的ROM中,除了PIT文件外,所有刷机文件都打包在一个TAR文件中(例如:JVP-SunnyOK-CN-3.tar),也有的刷机包由三个TAR文件组成(PDA.tar,CSC.tar和PHONE.tar)。不管是哪一种,它们所包含的刷机文件内容是相同的,只是ROM打包方式不同而已。无论是哪一类TAR包,解开后都会得到下列文件:
factoryfs.rfs 手机上的/system 目录下的内容
cache.rfs 其它附加的内容
dbdata.rfs 对应于 /dbdata 目录
boot.bin 引导区的内容
Sbl.bin 所谓的第二引导区
param.lfs 对应 /mnt/.lfs 下的内容
zImage 内核(kernel)
modem 基带(PHONE)
2) factoryfs.rfs与目录/system
在这些刷机文件中,我们最关心的是factoryfs.rfs。这个RFS文件包含了手机上/system 目录下的内容。我曾经在机锋论坛的其它帖子中(介绍PIT文件 http://bbs.gfan.com/android-1568237-1-1.html
)介绍过,/system的可用空间是固定的276.3MB。所以factoryfs.rfs的大小通常都在276MB左右,是ROM的主要部分。我们在上一讲中用到的apk文件都在这个刷机文件里。用镜像解包软件MagicISO打开factoryfs.rfs文件后,看到的内容见下面截图。
有几个文件夹是我们熟悉的:/app,/fonts,/framework,/lib和/usr。/app里就是手机的所有apk应用程序,/fonts里是各种字体的文件,/lib存放各种库文件,/framework是主题文件的文件夹,最后,我们要修改触摸键的定义就是要修改/usr/keylayout下的文件。
3) 文件夹/app和/framework
下面来看看两个重要的文件夹:/app和/framework。
a) 文件夹/app
/app对应于手机上的文件夹/system/app,里面存放的是ROM集成的所有apk应用程序(不包含三星框架文件framework-res.apk和framework-res.apk)。在MagicISO窗口点击app,进入/app目录,看到下列所有apk文件,见截图。
b) 文件夹/ framework
/framework对应于手机上的文件夹/system/framework,里面存放的是ROM与主题有关的文件,包括三星框架文件framework-res.apk和framework-res.apk。在MagicISO窗口点击framework,进入/framework目录,看到两个框架apk文件,还有java文件。见截图如下。要修改主题,进行美化,就要与这些文件打交道。
2. ROM的提取
这一节介绍如何从ROM中提取文件。最常用的就是提取apk文件。在论坛中经常看到求救帖子:“大侠,救命哇,我把XXXX.apk给删掉了,手机出错。。。”。我说,你完全可以自救,不必在论坛里他人或在线等。出路很简单:就是自己先做备份或有手段去提取文件。另外,如果你掌握了文件的提取方法,你就可以从其它ROM中方便地移植你喜欢的应用程序和功能了。例如,移植输入法,更换主题或桌面,等等。
所谓ROM的提取或从ROM中“提取”文件,实际上就是要对factoryfs.rfs文件进行解包,把里面要用的文件复制出来。factoryfs.rfs是镜像文件,用了三星自定义的格式。RFS是Robust File System的缩写。在刷机包里还有cache.rfs和dbdata.rfs,都是同类镜像文件。对它们的解包打包方法是相同的。下面来介绍几种常用解包方法。
1) 直接从卡刷ROM包提取
如果你的ROM是“卡刷”包,直接提取就好啦,不需要解包。卡刷包是zip格式的压缩文件。用WinRAR或WinZip直接解压ROM文件就得到所有的原文件。一个典型的ROM打开后有三个文件夹:
META-INF 签名文件和刷机脚本文件
system 这就是factoryfs.rfs内的所有内容
updates 存放内核和基带
进入/system/app目录,一切apk程序都在这里,对应于factoryfs.rfs内的内容和手机的/system目录。刷机就是把/system下的内容复制到规定的分区(见第二讲:I897卡刷或CWM刷机教程 http://bbs.gfan.com/android-1701867-1-1.html
)。
2) 用RE管理器从手机里提取,复制到SD卡
还有一种ROM的提取方法,不需要其它软件。用RE管理器,利用它的“多选”-“全选”-“复制”功能,一次把多个文件复制到手机的SD卡上。然后,进入“大容量存储”把文件拷贝到计算机里。这也是做备份的一种常用方法。
3) 利用91手机助手从手机提取
还有一种不需要对ROM解包就可以提取到文件的途径。如果你是91手机助手的使用者,你一定熟悉它。打开91手机助手的文件管理,想提取那个就提取那个。把文件直接拖出来放到你的计算机里就行了。
4) MagicISO/UltraISO/WinImage软件
由于factoryfs.rfs是镜像文件,你可以用某些镜像解包软件来打开刷机文件factoryfs.rfs。常用的软件有MagicISO和UltraISO。论坛里有介绍和下载链接。我在上一节的例子中就是用到MagicISO。类似的软件有很多,你们可能各有利器。最近,也用过WinImage,结果相同。
注意:这些软件只能用于解包提取文件之用,不能进行RFS打包操作。
5) 在Linux下通过对factoryfs.rfs的解包
在Linux环境下,通过对factoryfs.rfs进行解包操作是提取ROM的高级手段。在下一节详细叙述。
3. RFS的解包和打包
先强调一下,我们这一节讲的RFS文件的解包和打包不是为了提取文件之用。我们的目的并不仅仅停留在提取ROM文件上的层面上。更重要的是,我们不但要对factoryfs.rfs能解包,我们需要对包内的内容进行修改后还要能够再打包成RFS文件格式。其最终目的是为了定制自己的ROM刷机包。从技术上讲,RFS文件的打包只能在Linux系统下进行。我们在这一节就介绍如何在Linux系统下对RFS文件的解包和打包。
1) 在计算机的Linux系统下
假定计算机已经安装了Linux操作系统和配置了java环境。我个人用的是Ubuntu 10.04,目前最新版本是11.04。下面是对factoryfs.rfs的解包和RFS打包过程。在Linux下主要使用mount和umount两个命令,要求具有超级用户权限。操作步骤如下:
a)先创建一个子目录:/home/sunny/Work
b)把factoryfs.rfs复制到/home/sunny/Work这个子目录
c)再在Work之下创建一个子目录System
d)在用户终端/home/sunny/Work输入
$ su
Password:XXXXXXXX(你的Root口令)
输入“Password”后,获得超级用户权限,提示符变成
root@ubuntu :/home/sunny/Work
#
e)在超级用户终端/home/sunny/Work# 输入下列命令,挂载 RFS文件factoryfs.rfs 为一个磁盘:
# mount –o loop factoryfs.rfs System
进入“磁盘”System目录,你就可以看到factoryfs.rfs解包后的所有内容。像对待正常文件夹一样,你可以用“文件夹”浏览器查看 System文件夹里面的内容,但是不能删除和添加文件。
f)在超级用户终端,你可以用rm和cp命令任意删除和添加应用程序。你也可以把文件从System目录复制出来(提取文件)。由于/home/sunny/Work/System是factoryfs.rfs挂载的磁盘,修改System下的内容就是在修改factoryfs.rfs的内容。所有美化、修改、编辑工作都在此进行。
g)修改好/System的内容后,在超级用户终端执行下面的语句卸载该“磁盘” ,这个操作等价于“打包”过程。为此,首先退到目录/home/sunny/Work,输入下列命令:
# umount System
h)卸载System“磁盘”后,我们就得到修改好了的factoryfs.rfs。/home/sunny/Work 目录下的factoryfs.rfs就是修改和打包后可用的文件了。System目录什么都没有了(空目录)。
i)关于factoryfs.rfs的打包。在以上的操作过程中,好像没有“打包”操作,怎么就得到新的factoryfs.rfs文件了呢?事实上,在这个操作过程中factoryfs.rfs根本就没有被“解开”,是通过挂载磁盘完成的,修改工作也是在“磁盘”上做的。因而也就没有“打包”过程。这与制作Motorola XT502 NB0刷机包的过程不同。玩习惯了XT502的NB0刷机包,还一直想着如何打包呢。
2) 利用手机操作系统
我们Android手机的操作系统实际上就是Linux系统,是简化的Linux系统。你可以在该Linux系统中做很多事情,像在计算机的Linux系统中一样。我们可以利用它来实现RFS文件的“打包”,从而获得RFS文件(例如:factoryfs.rfs)。我们在上一节不是用它来“解包”提取过文件了吗?
这里,我们利用手机并结合Windows系统来完成factoryfs.rfs的“打包”操作,或称提取factoryfs.rfs。要求手机获得Root权限。步骤如下:
a)在Windows下安装ADB驱动(ADB工具包已经在第一讲给出)。
b)用USB数据线把手机连接计算机。
c)手机要在“设置”-“应用程序”-“开发”下勾“USB测试”
d)在DOS下输入(假定ADB安装在C:/ADB/目录内):
C:\ADB> adb shell
$ su
# dd if=dev/block/stl9 of=/sdcard/factoryfs.rfs bs=4096
几分钟之后,再次出现“#”提示符。输入:
# exit
$ exit
在SD卡上产生了打包好的factoryfs.rfs文件,大小为278M。
e)把factoryfs.rfs文件从SD卡拷贝到计算机,待用。用MagicISO打开检查一下,是不是你要的内容。
f)如果要提取其它cache.rfs和dbdata.rfs文件就用下列命令:
dd if=/dev/block/stl10 of=/sdcard/dbdata.rfs bs=4096
dd if=/dev/block/stl11 of=/sdcard/cache.rfs bs=4096
注意:用了某些优化内核时,所提取出来的RFS文件无法用MagicISO或UltraISO打开。需要选取合适的内核。