SunnyOK系列讲座索引-提取rom


SunnyOK系列讲座索引

【第一讲】如何用Odin刷机 - 新手必读 
http://bbs.gfan.com/android-1653492-1-1.html

【第二讲】I897卡刷或CWM刷机教程 
http://bbs.gfan.com/android-1701867-1-1.html

【第三讲】APK应用程序的解包、修改、编辑、打包及应用 
http://bbs.gfan.com/android-1744646-1-1.html

【第四讲】ROM的提取和RFS文件的解包打包 
http://bbs.gfan.com/android-1822477-1-1.html

【第五讲】如何制作或定制Odin刷机包ROM 
http://bbs.gfan.com/android-1849329-1-1.html


【第六讲】如何制作刷机补丁和CWM刷机包ROM 
http://bbs.gfan.com/android-1896274-1-1.html


------------------------------------------------


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文件后,看到的内容见下面截图。
SunnyOK系列讲座索引-提取rom_第1张图片 

有几个文件夹是我们熟悉的:/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文件,见截图。
SunnyOK系列讲座索引-提取rom_第2张图片 

b) 文件夹/ framework
/framework对应于手机上的文件夹/system/framework,里面存放的是ROM与主题有关的文件,包括三星框架文件framework-res.apk和framework-res.apk。在MagicISO窗口点击framework,进入/framework目录,看到两个框架apk文件,还有java文件。见截图如下。要修改主题,进行美化,就要与这些文件打交道。
SunnyOK系列讲座索引-提取rom_第3张图片 



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打开。需要选取合适的内核。 


主要参考

介绍PIT文件(分区信息表)- 与刷机友分享
http://bbs.gfan.com/android-1568237-1-1.html

【第二讲】I897卡刷或CWM刷机教程 - 新手必读
http://bbs.gfan.com/android-1701867-1-1.html

提取ROM文件的软件,适合部分rom定制
http://bbs.gfan.com/viewthread.php?tid=694760&extra=&page=1

Extract .rfs files
http://forum.xda-developers.com/showthread.php?t=751827
http://forum.xda-developers.com/archive/index.php/t-751827.html

Howto: Extract files from Samsung RFS
http://forum.samdroid.net/f28/howto-extract-files-samsung-rfs-1693/

Stock System Dump DJ20 & DL17
http://androidforums.com/continuum-all-things-root/278946-request-stock-system-dump-dj20-dl17.html

ADB Backup
http://forum.xda-developers.com/showthread.php?t=873620

你可能感兴趣的:(提取rom)