Android 系統的rom最主要的就是3個文件:boot.img、system.img、userdata.img。其中boot.img 存放着內核以及Android系統的配置信息,比如android系統各文件夾的讀寫權限,adb 的權限。所以如果你要修改文件夾的寫權限,adb的root權限,修改boot.img對應的地方就ok了。system.img中存放的是系統的各種庫,系統預裝的app等,userdata.img是一下用戶的配置信息。今天這里介紹怎么解開boot.img文件,修改對應的文件,使system文件夾有寫權限,adb 登錄后為root用戶。下面所使用的方法需要一定的linux系統基礎,如果你對linux系統一點都不了解,請慎重進行下面的操作。
需要的工具:split_bootimg.pl,mkbootimg,mkbootfs
1.拆包boot.img,需要用到一個perl腳本split_bootimg.pl。在linux終端里輸入以下命令:
./split_bootimg.pl boot.img

執行上述操作后, boot.img分成了兩部分:boot.img-kernel和boot.img-ramdisk.gz,boot.img-kernel 是內核部分,這部分我們不能修改。boot.img-ramdisk.gz解壓后得到的boot.img-ramdisk文件才是我們要修改的部分。
2.用file boot.img-ramdisk 命令查看該文件格式,發現它是ASCII cpio archive格式,要用特殊的命令打開。

解壓及打開該文件的命令如下:
gzip -dc ../boot.img-ramdisk.gz | cpio -i

這樣boot.img-ramdisk中的內容全部解壓到了ramdisk目錄下。
3.adb root,找到ramdisk目錄下的 default.prop 文件,將其中的 ro.secure=1,修改為ro.secure=0;ro.debuggable=0修改為ro.debuggable=1。這樣你的adb就是root了。
4.文件夾可寫,找到ramdisk目錄下的init.rc 文件,找到
mount yaffs2 mtd@system /system ro remount 這一行(不同的機子可能不一樣,但是"mount"、"/system ro remount"都是一樣的),其中的ro代表readonly,將其改成rw,就可讀寫了,這個改的是/system文件夾。
在取得了adb root權限后,這一步完全不需要修改,在adb 登錄后通過執行:mount -o remount,rw /system可以達到一樣的效果,只是前面的修改是永久有效的,后面這種是臨時的,重啟后就無效了。
好,現在文件都已經修改完成了,只需要打包了。
5.在ramdisk目錄下執行:
cpio -i -t -F ../boot.img-ramdisk | cpio -o -H newc -O ./boot.img-ramdisk_new
在當前目錄下生成boot.img-ramdisk_new,使用如下命令打包:
gzip boot.img-ramdisk_new
最后一步就是要生成boot.img了,這里需要一個工具mkbootimg,這個android源代碼里編譯而成的,如果你沒有源代碼,也可以直接去網上下載http://code.google.com/p/android-serialport-api/downloads/detail?name=android_bootimg_tools.tar.gz&can=2&q=。使用如下命令生成boot.img
mkbootimg --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz -o newboot.img
該工具是32位的,如果在64位系統下運行則會出現"./mkbootimg: command not found"的錯誤,需要安裝以下文件:
sudo apt-get install lib32stdc++6 lib32z1 lib32z1-dev
sudo apt-get install ia32-libs
第5步也可以這樣做:
# mkbootfs ./ramdisk | gzip > ramdisk.img
# mkbootimg --cmdline "androidboot.hardware=qcom loglevel=1" --base 0x00200000 --pagesize 4096 --kernel boot.img-kernel --ramdisk ramdisk.img -o NewBoot.img
最后使用fastboot flash boot newboot.img (或者刷機工具)將新的boot.img刷進系統,就ok了。因為只修改了boot.img部分,所以你先前裝好的apk,下載的東西會完好無損的保存着,系統和原先一模一樣,所以只有你備份了一個可用的boot.img,你就可以隨便刷你自己的boot.img了,萬一修改的boot.img啟動不了,可以把備份的boot.img刷回去,系統一點改變都沒有。
