【第二講】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
相關文章
相關標籤/搜索