欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
如何解包/編輯/打包boot.img文件 - shenhaocn - 博客園

感謝本文的作者:Alansj, DarkriftX, RyeBrye, Will, Try OP9, Tonyb486, Timmmm, Lxrose還有好多不知名的作者們在wiki上的不懈努力。

來(lái)源:http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images 

 

目錄
1、背景知識
2、boot和recovery映像的文件結構
3、對映像文件進(jìn)行解包、編輯、打包的常規方法
3.1、另一種解包、編輯、打包的方法
4、將新的映像刷回到手機
5、解包、編輯、打包為我們帶來(lái)了什么
6、本文講的內容與使用update.zip刷機包不是一碼事

正文
1、背景知識

Android手機的文件系統有許多存儲器組成,以下是在adbshell下面的輸出:
#cat /proc/mtd
dev:    size   erasesize  name
mtd0: 
00040000 00020000 "misc"
mtd1: 
00500000 00020000 "recovery"
mtd2: 
00280000 00020000 "boot"
mtd3: 
04380000 00020000 "system"
mtd4: 
04380000 00020000 "cache"
mtd5: 04ac0000 
00020000 "userdata"

 

注意,不同的手機在上述存儲設備的順序可能會(huì )各不相同!一定要檢查您的手機,確定在以下的操作中選擇正確的設備號(mtdX,這個(gè)X的序號一定要檢查清楚)。

在本向導中,我們主要描述對"recovery"和"boot"的存儲設備進(jìn)行操作;"system"存儲設備保存了android系統目錄的所有數據(在系統啟動(dòng)后會(huì )掛載到“system/”目錄);“userdata”存儲設備將保存了android數據目錄中的所有數據(在系統啟動(dòng)后會(huì )掛載到“data/”目錄,里面是會(huì )有很多應用數據以及用戶(hù)的preference之類(lèi)的配置數據)。

從上面的輸出可以看出來(lái),recovery和boot分區對應著(zhù)/dev/mtd/mtd1和/dev/mtd/mtd2,在你您開(kāi)始做任何修改之前一定要做兩件事情,第一件事情,一定要先對這兩個(gè)分區進(jìn)行備份。
可以使用如下命令進(jìn)行備份:
# cat /dev/mtd/mtd1 > /sdcard/recovery.img
# cat 
/dev/mtd/mtd2 > /sdcard/boot.img

 

(注意added bylxros,只有手機獲取了ROOT權限以后才能夠執行上述的備份命令)

第二件事情,你您應該把你您最喜歡的update.zip刷機包放置到你您的sd卡的根目錄上面。如此一來(lái),即使你您在后續的操作中出了問(wèn)題,也可以啟動(dòng)到recovery模式進(jìn)行恢復。

另外一個(gè)你您需要知道的重要文件是在android系統目錄下的/system/recovery.img,此文件是mtd1存儲設備的完全拷貝。這個(gè)文件在每次關(guān)機的時(shí)候,會(huì )自動(dòng)地被寫(xiě)回到mtd1存儲設備里面。

這會(huì )意味著(zhù)兩個(gè)事情:
(1)任何對/dev/mtd/mtd1中數據的直接修改都會(huì )在下一次重啟手機以后消失。
(2)如果希望對/dev/mtd/mtd1進(jìn)行修改,最簡(jiǎn)單的做法是用你您自己的recovery.img替換掉/system/recovery.img。當你您創(chuàng )建自己的update.zip刷機包的時(shí)候(特別是在做刷機包的適配的時(shí)候),如果你您忘記替換這個(gè)/system/recovery.img,這個(gè)recovery.img就會(huì )在關(guān)機的時(shí)候被燒寫(xiě)到mtd1里面去或許會(huì )變磚。一定要注意這一點(diǎn)!

(譯者的話(huà),關(guān)于這個(gè)/system/recovery.img文件,在2.1的android的平臺里面并沒(méi)有找到,或許這個(gè)機制已經(jīng)out了?!或者偶本人對這段話(huà)的理解不夠深入?!希望明白的朋友不吝斧正)

2、boot和recovery映像的文件結構
boot和recovery映像并不是一個(gè)完整的文件系統,它們是一種android自定義的文件格式,該格式包括了2K的文件頭,后面緊跟著(zhù)是用gzip壓縮過(guò)的內核,再后面是一個(gè)ramdisk內存盤(pán),然后緊跟著(zhù)第二階段的載入器程序(這個(gè)載入器程序是可選的,在某些映像中或許沒(méi)有這部分)。此類(lèi)文件的定義可以從源代碼android-src/system/core/mkbootimg找到一個(gè)叫做bootimg.h的文件。

(譯者的話(huà),原文是一個(gè)叫做mkbootimg.h的文件,但從Android2.1的代碼來(lái)看,該文件名應該是改為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映像是一個(gè)最基礎的小型文件系統,它包括了初始化系統所需要的全部核心文件,例如:初始化init進(jìn)程以及init.rc(可以用于設置很多系統的參數)等文件。如果你您希望了解更多關(guān)于此文件的信息可以參考以下網(wǎng)址:
http://git.source.android.com/?p=kernel/common.git;a=blob;f=Documentation/filesystems/ramfs-rootfs-initramfs.txt
以下是一個(gè)典型的ramdisk中包含的文件列表:
./init.trout.rc
.
/default.prop
.
/proc
.
/dev
.
/init.rc
.
/init
.
/sys
.
/init.goldfish.rc
.
/sbin
.
/sbin/adbd
.
/system
.
/data

 


recovery映像包含了一些額外的文件,例如一個(gè)叫做recovery的二進(jìn)制程序,以及一些對該程序支持性的資源圖片文件(當你您按下home+power組合鍵的時(shí)候就會(huì )運行這個(gè)recovery程序)。
典型的文件列表如下:
./res
.
/res/images
.
/res/images/progress_bar_empty_left_round.bmp
.
/res/images/icon_firmware_install.bmp
.
/res/images/indeterminate3.bmp
.
/res/images/progress_bar_fill.bmp
.
/res/images/progress_bar_left_round.bmp
.
/res/images/icon_error.bmp
.
/res/images/indeterminate1.bmp
.
/res/images/progress_bar_empty_right_round.bmp
.
/res/images/icon_firmware_error.bmp
.
/res/images/progress_bar_right_round.bmp
.
/res/images/indeterminate4.bmp
.
/res/images/indeterminate5.bmp
.
/res/images/indeterminate6.bmp
.
/res/images/progress_bar_empty.bmp
.
/res/images/indeterminate2.bmp
.
/res/images/icon_unpacking.bmp
.
/res/images/icon_installing.bmp
.
/sbin/recovery

 


3、對映像文件進(jìn)行解包、編輯、打包的常規方法

(注意,下面我給你您介紹的是手工命令行方式進(jìn)行解包以及重新打包的方法,但是我仍然創(chuàng )建了兩個(gè)perl腳本,這兩個(gè)腳本可以讓你您的解包和打包工作變得輕松許多。

可以參考本文的附件

unpack-bootimg.zip  http://android-dls.com/files/apps/unpack-bootimg.zip

repack-bootimg.zip  http://android-dls.com/files/apps/repack-bootimg.zip


如果你您很擅長(cháng)使用16進(jìn)制編輯器的話(huà),你您可以打開(kāi)boot.img或者recovery.img,然后跳過(guò)開(kāi)始的2K的頭數據,然后尋找一大堆0的數據,在這一堆0的數據后面,緊跟著(zhù)1F8B這兩個(gè)數字(1F 8B是gzip格式的文件的結束標記)。從此文件開(kāi)始的地方(跳過(guò)2K的頭),一大堆0后面緊跟著(zhù)到1F8B這兩個(gè)數字為止的全部數據,就是gzip壓縮過(guò)的linux內核。從1F8B后面緊跟著(zhù)的數據一直到文件的結尾包含的全部數據,就是ramdisk內存盤(pán)的數據。你您可以把把內核和ramdisk兩個(gè)文件分別保存下來(lái),在進(jìn)行分別的修改和處理。我們可以通過(guò)un-cpio和un-gzip操作來(lái)讀取ramdisk文件中的數據,可以使用如下的命令來(lái)實(shí)現這個(gè)目的,以下操作會(huì )生成一個(gè)目錄,直接cd進(jìn)去就可以看到ramdisk中的數據了:

gunzip -c ../your-ramdisk-file | cpio -i

 


此命令可以將ramdisk中的所有的文件解包到當前的工作目錄下面,然后就可以對它進(jìn)行編輯了。

當需要重新打包ramdisk的時(shí)候,就需要re-cpio然后re-gzip這些數據和目錄,可以通過(guò)如下命令來(lái)實(shí)現:(cpio會(huì )把所有當前目錄下面的文件都打包進(jìn)去,因此,在進(jìn)行此步驟之前,請把不需要的文件都清除掉。)

find . | cpio --H newc | gzip > ../newramdisk.cpio.gz

 


最后一步就是通過(guò)mkbootimg這個(gè)工具,把kernel和ramdisk打包在一起,生成一個(gè)boot.img:

mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel your-kernel-file --ramdisk newramdisk.cpio.gz -o mynewimage.img

 


這里的mkbootimg工具會(huì )在編譯android的源代碼的時(shí)候會(huì )在~/android-src/out/host/linux-x86/bin目錄下面自動(dòng)生成。
下載地址:
http://git.source.android.com/?p=platform/system/core.git;a=tree;f=mkbootimg

現在,如果不想背這些復雜的命令或者擺弄那個(gè)讓人眩暈的16進(jìn)制編輯器的話(huà),可以嘗試使用我編寫(xiě)的用于解包和打包的perl腳本了。希望這些腳本能夠節約各位的鍵盤(pán)。

3.1、另一種解包、編輯、打包的方法
下載split_bootimg.zip文件,在此zip文件中包含一個(gè)perl文件,split_bootimg.pl腳本,該腳本可以讀取boot.img頭(根據Android源碼中的bootimg.h讀?。ernel和ramdisk讀取出來(lái),此腳本也會(huì )輸出內核命令行和板子名字。http://android-dls.com/files/linux/split_bootimg.zip

(注意,不要使用從/dev/mtd/mtd2直接拷貝出來(lái)的boot.img,此映像可能在讀取過(guò)程遭到損壞。)
下面是一個(gè)從TC4-RC28更新中提取出來(lái)的boot.img進(jìn)行解包操作:
% ./split_bootimg.pl boot.img 
Page size: 2048 (0x00000800)
Kernel size: 1388548 (0x00153004)
Ramdisk size: 141518 (0x000228ce)
Second size: 0 (0x00000000)
Board name: 
Command line: no_console_suspend=1
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... complete.

 


解包ramdisk的命令如下:
% mkdir ramdisk
% cd ramdisk
% gzip -dc ../boot.img-ramdisk.gz | cpio -i
% cd ..

 


解碼完畢后,就可以修改了(例如,在default.prop設置ro.secure=0等等)

使用mkbootfs工具(mkbootfs工具是編譯完畢Android源代碼以后,就會(huì )在~/android-src/out/host/linux-x86/bin自動(dòng)生成)來(lái)重新創(chuàng )建ramdisk,可以使用如下命令來(lái)操作:
% mkbootfs ./ramdisk | gzip > ramdisk-new.gz

 


使用mkbootimg來(lái)重新創(chuàng )建boot.img,mkbootimg也可以在~/android-src/out/host/linux-x86/bin目錄中可以找到:
% mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot-new.img

 

(注意:console=null的命令行選現是從TC4-RC30的boot.img引入的,用以去掉rootshell)

4、將新的映像刷回到手機
可以將recovery.img拷貝到/system目錄下面,然后重新啟動(dòng)手機,讓手機自動(dòng)為你您刷寫(xiě)到mtd里面(工作原理在上面已經(jīng)提過(guò)了)。對于boot.img可以通過(guò)將其拷貝到sd卡的根目錄,然后通過(guò)手機內的刷寫(xiě)工具將此映像寫(xiě)入到手機中。

例如,使用adb工具Android SDK中的一個(gè)工具)將boot.img拷貝到手機的sd卡的根目錄:
adb push ./mynewimage.img /sdcard

 

然后通過(guò)adb shell登錄手機(獲取過(guò)ROOT的)的shell交互模式,利用命令行進(jìn)行交互:
# cat /dev/zero > /dev/mtd/mtd2
   write: No space left on device [this is ok, you can ignore]
# flash_image boot /sdcard/mynewimage.img

 

然后重啟手機。

如果手機能夠正常啟動(dòng),那么祝賀你您,你您的修改和替換已經(jīng)成功了;如果不能夠順利啟動(dòng),則需要重新啟動(dòng)進(jìn)入recovery模式,并且使用update.zip來(lái)恢復。

5、解包、編輯、打包為我們帶來(lái)了什么
可以修改手機開(kāi)機啟動(dòng)時(shí)候的畫(huà)面,具體的操作的地址為:
http://forum.xda-developers.com/showthread.php?t=443431

6、本文講的內容與使用update.zip刷機包不是一碼事

您可以很容易地在其他論壇上看到關(guān)于如何自制update.zip刷機包的方法,也可以下載到很多在網(wǎng)絡(luò )上共享的自制刷機包。例如:近期的多數刷機包都來(lái)自對rc30包的修改和調整。在update.zip刷機包里面會(huì )包括新的boot.img,recovery.img以及整個(gè)system/目錄下的若干文件的替換和更新。如果您希望自己自制boot.img以及recovery.img,建議您選取相對較新的更新和版本。(選用較老的映像的話(huà),或許會(huì )出現兼容性問(wèn)題)。 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Android手機ROOT權限
如何修改Android系統的Ramdisk以及boot鏡像
android 主要鏡像(image)解析
Android Recovery 的流程分析
Recovery相關(guān)原理分析
boot.img的解包與打包
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久