当前位置:主页 > 刷机教程 >

RFS格式文件的解包和打包

分类栏目:刷机教程

11331

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