【第二讲】ROM的提取和RFS文件的解包打包

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


主要参考

介绍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
相关文章
相关标签/搜索