TShopping

 找回密碼
 註冊
搜索
TShopping 精選文章 Android 手機開發 查看內容

Android ROM 之boot、recovery解包打包

2013-9-9 19:06| 發佈者: woff| 查看: 5751| 評論: 0|原作者: woff

摘要: 大家都知道安卓的核心更換呢,那是在boot.img裡面,那麼如何在WINDOWS下去解開它呢,LINUX的自己略過。。。。 首先下載 booting.exe,這得感謝製作bootimg.exe的作者,本來是為華為的機器做的分解工具,不過我們也 ...
 
大家都知道安卓的核心更換呢,那是在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中包含的文件列表:
復制代碼


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
復制代碼



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

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

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

bootimg --repack-bootimg

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

woff,如果您要查看本帖隱藏內容請回復
3.jpg



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


bootimg.exe

最新評論



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

GMT+8, 2024-5-8 08:35 , Processed in 0.065185 second(s), 21 queries .

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回頂部