當前位置:編程學習大全網 - 源碼下載 - 如何編輯boot.img裏面的ramdisk

如何編輯boot.img裏面的ramdisk

首先妳要有壹個用戶解鎖fastboot的手機,這樣才能允許妳刷入第三方ROM

其次妳要能找到當前版本所對應的boot.img或sec_boot.img(帶簽名),通常能拿到的也就是刷機包裏面解出來的sec_boot.img,通過cat mtd出來的不知道行不行=。=

工具:

split_bootimg.pl google壹下,很好找

mkbootfs和mkbootimg 可以從網上下,最好是自己直接編譯

1)sec_boot.img是經過簽名的,需要把文件前0x1000個字節刪除,也就是ANDROID! 8個字符前面所有字節刪除,保存為boot.img

2) 運行perl split_bootimg.pl boot.img解出kernel和ramdisk文件,同時記下運行結果中的“Command line: vmalloc=384M mem=2044m@0x200000。。。。”壹長串字符備用

3)運行指令把ramdisk的文件解出來

mkdir ramdisk

cd ramdisk

gzip -dc ../boot.img-ramdisk.gz | cpio -i

cd ..

4)修改其中的文件,例如我覺得default.prop裏面的persist.sys.usb.config=manufacture,adb不太爽,想改成=adb,修改保存。如果妳想adb有root權限的話,就去改ro.secure和ro.debuggable

5)重新打包

mkbootfs ./ramdisk | gzip > ramdisk-new.gz

當然如果妳自己編譯的mkbootfs也沒有加到path裏,就把編譯完的程序考到當前目錄,運行./mkbootfs...

生成boot-new.img

mkbootimg --cmdline '單引號裏面這壹段拷貝剛才記下的Command line冒號後面的壹長串' --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot-new.img

6) 現在如果把生成的boot-new.img直接刷進去,手機就起不來了,問題在於kernel,ramdisk,second stage,tags的地址,

自己編譯的mkbootimg查看壹下.c文件就知道base=0x10000000,生成的boot-new.img是按照這個規則來的:

kernel地址=base + 0x00008000,ramdisk地址=base + 0x01000000,

second stage地址=base + 0x00f00000,tags地址=base + 0x00000100。

這跟原始sec_boot.img裏面的地址是不壹樣的,本想找到正確的base值,但原始img的幾個地址並非此規律,拿不到源碼只能幹瞪眼嘍,

最簡單的辦法就是用16進制編輯器將boot-new.img對應的4個地址修改為原始值,如圖:

  • 上一篇:什麽是編譯器
  • 下一篇:兒童玩具都有哪些分類?
  • copyright 2024編程學習大全網