1. 程式人生 > >教你如何編譯TWRP—案例:C8813 轉秋葉隨風

教你如何編譯TWRP—案例:C8813 轉秋葉隨風

TWRP這個是一個老外的開源專案,全稱Team-Win-Recovery-Project。
Source:https://github.com/TeamWin/Team-Win-Recovery-Project
專案網址:http://teamw.in/project/twrp2
目前更新到 twrp 2.5的版本了。
廢話少說,開始講解如何編譯TWRP了
我的工作環境:ubuntu 12.04(推薦) openjdk  原始碼目錄  ~/android/yemod/
機器配置:E1230 v2  8G記憶體,個人配置
首先你必須要有一份CM程式碼,不管是CM7,9,10,10.1都可以,這裡我使用CM10.1程式碼(基於android 4.2.2)
如何同步CM10.1程式碼,請開啟搜尋引擎搜尋,這裡就不說明了,或者搜尋我的新浪部落格,我原來寫過CM7的同步方式
開啟終端 cd到你的原始碼目錄裡面 比如我的  cd ~/android/yemod/
由於CM自帶的是CWM,但今天我們講的是 TWRP,所以我們需要刪除TWRP 輸入命令
rm -rf bootable/recovery
刪除了CWM之後,我們把 TWRP的程式碼同步下來
git clone git://github.com/TeamWin/Team-Win-Recovery-Project.git -b twrp2.4 recovery
這裡我們使用分支為 twrp2.4  儲存目錄為 recovery
程式碼同步完成之後,我們的初始化工作就搞定了。
下一步就是如何編譯適配各種機器的TWRP了
今天我們就拿C8813來做例子吧
首先我們需要拿到官方的韌體包UPDATE.APP 或者UPDATA.APP
然後使用指令碼解壓這個韌體包
指令碼下載地址:git://github.com/ivan19871002/huawei_firmware_unpacker.git

把指令碼和官方韌體包放到同一個目錄終端輸入
./split_updata.pl UPDATE.APP
稍等騷年,會解壓出很多檔案,有可能指令碼解壓出來的recovery.img不是你需要的,因為華為不同的機器解壓出來的都有不同
一般來說 boot.img 和 recovery.img大小都在4M-10M 之間,system.img 就是最大的,找到了boot.img system.img recovery.img之後
我們可以製作卡刷包,但是今天我們講的是如何製作TWRP,所以我們只用到recovery.img就行了
大家可以拿廚房去測試,廚房裡面有一項是解壓recovery.img和boot.img的,拿官方韌體解壓出來的檔案一個一個去解壓,如果解壓成功的不是boot 就是recovery的img檔案
找到解壓成功的目錄 裡面如果存在 boot.img-ramdisk/etc/recovery.fstab 那麼就證明 是recovery.img
OK,如果我們拿到了正確的recovery.img我們就開始下一步吧
依然是終端 cd 到原始碼根目錄 執行此命令:. build/envsetup.sh (注:build 前面是個空格然後是 點)
初始化環境,然後執行 make -j4 otatools    編譯出需要的工具,機器配置不好的同鞋可能需要時間比較久,不急慢慢等。
編譯結束之後我們可以在原始碼目錄/home/ivan/android/yemod/out/host/linux-x86/  這裡看到已經編譯出來很多東西了
這個時候依然是在剛剛編譯過 otatools的終端,再次執行:
./build/tools/device/mkvendor.sh huawei c8813 /your/path/to/the/recovery.img (recovery.img可以用 boot.img替代)
如果所有都工作正常,你將看到”Done!”這樣的確認資訊。
[email protected]
:~/android/cm10$ ./build/tools/device/mkvendor.sh huawei c8813 ./recovery.img
Arguments: huawei c8813 ./recovery.img
Output will be in /home/ivan/android/yemod/device/huawei/c8813
11018 塊
Done!
Use the following command to set up your build environment:
lunch full_c8813-eng
And use the follwowing command to build a recovery:
. build/tools/device/makerecoveries.sh full_c8813-eng
mkvendor.sh指令碼也將在你的android原始碼樹中建立以下目錄:
huawei/c8813
如果已經建立成功了,那麼我們開始配置吧
開啟進入裝置C8813裝置的目錄,使用開始我們解包官方韌體中的boot.img-ramdisk/etc/recovery_emmc.fstab 替代 該目錄下的recovery.fstab目錄
因為C8813使用了EMMC分割槽格式,所以要使用recovery_emmc.fstab
我們分析一下C8813這個機器的硬體,
CPU架構Armv7
解析度480*854
EMMC EXT4分割槽格式
沒有misc分割槽(從recovery.fstab中可以發現)
OK,分析完了這些之後,我們開始著手配置檔案吧
然後開啟:BoardConfig.mk 這個檔案
因為編譯TWRP多了很多需要手動設定硬體方面的配置引數,沒有預設設定的,所以我們需要寫入這些
# Platform
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
ARCH_ARM_HAVE_TLS_REGISTER := true
ARCH_ARM_HAVE_NEON :=true
ARCH_ARM_HAVE_VFP := true
由於C8813使用的是EXT4分割槽所以我們還要寫入
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_USES_MMCUTILS := true
BOARD_HAS_LARGE_FILESYSTEM := true
我們設定沒有select按鈕
BOARD_HAS_NO_SELECT_BUTTON := true
解析度 480*854
DEVICE_RESOLUTION := 480×854
沒有misc分割槽
BOARD_HAS_NO_MISC_PARTITION := true
OK基本配置完畢,開始編譯吧
終端 切換到原始碼目錄,
. build/envsetup.sh && breakfast c8813
等初始化完畢之後,輸入make recoveryimage -j8 (如果機器配置高你可以把 8 改成16,如果機器不行 請設定4 或者以下)
靜靜等待吧。