把玩"魔術師" -- 幫 boot.img 換 kernel
This document is provided as is. You are welcomed to use it for non-commercial purpose.Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼
從 Android 的架構圖中,以及自己的經驗,kernel 是一部 Android 手機,尤其是 如觸控螢幕、相機、GPS 等硬體設備,是否能正確運作的重要元素。有時候,我們 取得了一個 ROM,或許你只想把它的 kernel 換掉以便測試在同樣的環境下,使用 不同的 kernel 是否可以得到更好的硬體支援,那麼幫 boot.img 更換 kernel 的步驟就很重要了。 假設我們已經有了 Magic 32A 的 kernel 以及 wlan.ko,且假設我們已經取得了 給 Magic 32B 的 boot.img,因此我們需要手動產生給 32A 的 boot.img, 這是因為 32A 的 address 和 32B 的不同所導致。假設你已經依據文件將 kernel 編譯好了,也有了 boot.img;一般來說,其步驟包含:
- 下載 PortTools.rar。這個檔案包含了一個 Linux 的執行檔以及幾個 Perl 的執行檔,請將其 解壓所後放置於 ~/tools(或者你喜歡的任意目錄)。
- 將 boot.img 從 ~/froyo/out/target/product/sapphire 複製進來。
- 將 zImage 從 ~/froyo/kernel/arch/arm/boot 或者 CM6 EBI1/32A kernel 的壓縮檔內複製進來。
- 將解壓縮的檔案改變成可執行:
chmod 755 mkbootimg-H repack-H.pl unpack-H.pl
- 將 kernel 以及 ramdisk 從 boot.img 萃取出來,指令如下:
unpack-H.pl boot.img mkdir ramdisk cd ramdisk gunzip -c ../boot.img-ramdisk.gz | cpio -i cd ..
- 將適合的 kernel (給 32A 用的)複製進來,並取名為 zImage;
然後執行以下指令來產生適當的 boot.img:
mkbootimg --kernel zImage --ramdisk boot.img-ramdisk.gz --cmdline 'no_console_suspend=1 console=null' --base 0x19200000 -o boot.img
- 除了 kernel 之外,一般的說法是 kernel 啟動的過程有可能去啟動無線網路,
如果無線網路裝置無法啟動,將會造成無法開機的現象;因此建議將 boot.img 和
wlan.ko 包在一起。包在一起的常用方式有兩種,兩者所需的工具也略有不同,我們
分別描述如下:
- [使用 Brian 的 Port-blank]: 下載 port-blank.zip 並解壓縮到
~/port 目錄內,然後執行下列指令將 boot.img 和 wlan.ko 複製到
適當的目錄:
cp boot.img ~/port/ cp wlan.ko ~/port/system/lib/modules/
zip -r port.zip * java -jar ~/tools/signapk.jar ~/tools/testkey.x509.pem ~/tools/testkey.pk8 port.zip update_signed.zip
- [使用 AnyKernel]: 下載 Koush's AnyKernel,下載方式請執行下列
指令:
cd ~ git clone git://github.com/koush/AnyKernel.git -b 32A
cd ~/AnyKernel zip -r port.zip * java -jar ~/tools/signapk.jar ~/tools/testkey.x509.pem ~/tools/testkey.pk8 port.zip update_signed.zip
- [使用 Brian 的 Port-blank]: 下載 port-blank.zip 並解壓縮到
~/port 目錄內,然後執行下列指令將 boot.img 和 wlan.ko 複製到
適當的目錄:
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
沒有留言:
張貼留言