TShopping

 找回密碼
 註冊
搜索
查看: 5125|回復: 0
打印 上一主題 下一主題

[教學] Android ROM 之boot、recovery解包打包

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2013-9-9 19:05:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
大家都知道安卓的核心更換呢,那是在boot.img裡面,那麼如何在WINDOWS下去解開它呢,LINUX的自己略過。。。。

首先下載 booting.exe,這得感謝製作bootimg.exe的作者,本來是為華為的機器做的分解工具,不過我們也可以拿來分解boot.img、recovery.img等,OK!先來談談這兩個文件的基礎,部分來自網絡。

boot和recovery映像的文件結構
boot和recovery映像並不是一個完整的文件系統,它們是一種android自定義的文件格式,該格式包括了2K的文件頭,後面緊跟著是用gzip壓縮過的內核,再後面是一個ramdisk內存盤,然後緊跟著第二階段的載入器程序(這個載入器程序是可選的,在某些映像中或許沒有這部分)。此類文件的定義可以從源代碼android-src/system/core/mkbootimg找到一個叫做bootimg.h的文件。
(譯者的話,原文是一個叫做mkbootimg.h的文件,但從Android 2.1的代碼來看,該文件名應該是改為bootimg.h了)。
/*
** +-----------------+
** | boot header | 1 page
** +-----------------+
** | kernel | n pages
** +-----------------+
** | ramdisk | m pages
** +-----------------+
** | second stage | o pages
** +-----------------+
**
** n = (kernel_size + page_size - 1) / page_size
** m = (ramdisk_size + page_size - 1) / page_size
** o = (second_size + page_size - 1) / page_size
**
** 0. all entities are page_size aligned in flash
** 1. kernel and ramdisk are required (size != 0)
** 2. second is optional (second_size == 0 -> no second)
** 3. load each element (kernel, ramdisk, second) at
** the specified physical address (kernel_addr, etc)
** 4. prepare tags at tag_addr. kernel_args[] is
** appended to the kernel commandline in the tags.
** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
** 6. if second_size != 0: jump to second_addr
** else: jump to kernel_addr
*/
ramdisk映像是一個最基礎的小型文件系統,它包括了初始化系統所需要的全部核心文件,例如:初始化init進程以及init.rc(可以用於設置很多系統的參數)等文件。如果你您希望瞭解更多關於此文件的信息可以參考以下網址:
http://git.source.android.com/?p=kernel/common.git;a=blob;f=Documentation/filesystems/ramfs-rootfs-initramfs.txt
以下是一個典型的ramdisk中包含的文件列表:
./init.trout.rc
./default.prop
./proc
./dev
./init.rc
./init
./sys
./init.goldfish.rc
./sbin
./sbin/adbd
./system
./data


recovery映像包含了一些額外的文件,例如一個叫做recovery的二進製程序,以及一些對該程序支持性的資源圖片文件(當你您按下home+power組合鍵的時候就會運行這個recovery程序)。
典型的文件列表如下:
  1. ./res
  2. ./res/images
  3. ./res/images/progress_bar_empty_left_round.bmp
  4. ./res/images/icon_firmware_install.bmp
  5. ./res/images/indeterminate3.bmp
  6. ./res/images/progress_bar_fill.bmp
  7. ./res/images/progress_bar_left_round.bmp
  8. ./res/images/icon_error.bmp
  9. ./res/images/indeterminate1.bmp
  10. ./res/images/progress_bar_empty_right_round.bmp
  11. ./res/images/icon_firmware_error.bmp
  12. ./res/images/progress_bar_right_round.bmp
  13. ./res/images/indeterminate4.bmp
  14. ./res/images/indeterminate5.bmp
  15. ./res/images/indeterminate6.bmp
  16. ./res/images/progress_bar_empty.bmp
  17. ./res/images/indeterminate2.bmp
  18. ./res/images/icon_unpacking.bmp
  19. ./res/images/icon_installing.bmp
  20. ./sbin/recovery
複製代碼
看到以上結構的時候就已經很奇特了,那麼怎麼來解開它,以及打包呢!馬上揭曉!

看到我叫大家百度BOOTIMG.EXE,也許大家又在大叫坑爹了,沒辦法,本人天生懶人一個啊!下載這個東西之後,那就一切皆有可能啦!解開後,至於修改,那麼就八仙過海,各顯神通了!

工具主要語言為python,分兩處版本,源文件及windows下可執行文件exe,內容及用法完全一致。

運行方法:

bootimg.py 功能 參數

目前支持以下功能:

--repack-ramdisk, 生成 ramdisk
--unpack-ramdisk, 解開 ramdisk
--repack-bootimg, 生成 bootimg (包括boot.img及recovery.img)
--unpack-bootimg, 解開 bootimg
--unpack-updata, 解開 updata
--unpack-yafffs, 解開 yafffs
--unpack-rle, 解開rle,生成raw格式及png圖片(如果pil可用, exe裡有pil)
--repack-rle, 生成rle,可支持多種格式


下面一一說明功能中的參數。

--unpack-updata [文件]
[文件]為空時,默認使用UPDATA.APP
解開後,會有四個文件,boot.img, recovery.img, system.img, userdata.img
這些都是刷機時可能需要的。

--unpack-bootimg [文件]
[文件]為空時,默認使用boot.img
解開後,會有兩個文件,kernel和ramdisk.gz
同時,注意輸出,比如base, cmdline, name等等

--repack-bootimg [base] [cmdline]
[base]為空時,使用0x200000 (C8600默認)
[cmdline]為空時,使用mem=211 console=null androidboot.hardware=qcom (c8600適用)
生成bootimg時,會使用kernel和ramdisk.gz(如果存在ramdisk.cpio.gz,優先使用),生成boot.img

實際上啊,就是在WINDOWS下更方便而已,在這裡要感謝製作這個軟件的人,非常感謝中!

  1. 開始-運行-cmd
  2. d:回車
  3. cd boot回車
  4. bootimg --unpack-bootimg
複製代碼


僅需要以上命令就會解開boot.img了!

如果是recovery.img那麼改名為boot那麼不是照樣能行了,呵呵,看到木有,哈哈!分解就是那麼簡單,按照上面命令,合成就如下了:

bootimg --repack-bootimg

OK!好了,修改大家就自己去奮鬥吧,其實說實話,安卓本來基於LINUX就是在那系統下玩的,用WINDOWS的就比較吃虧了。
如上,在windows下編輯的完全壓力很大的說,前面談那麼多啥base基址,cmdline命令行啊這些,就是為了在微軟下用這個工具打包時候好做這些工作,看圖,分解boot.img後出現的情況


遊客,如果您要查看本帖隱藏內容請回覆



到這裡就完全打包解包無壓力了,額,recovery解包打包,就直接把他搞成boot.img封包後再搞回去就行了的。

 

臉書網友討論

bootimg.exe

2.29 MB, 下載次數: 7

售價: 5 金T幣  [記錄]

華為的機器做的分解工具

*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-20 02:11 , Processed in 1.565693 second(s), 26 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表