1. 程式人生 > >A840 TWRP Recovery英簡繁版編譯教程[2013.6.16更新]

A840 TWRP Recovery英簡繁版編譯教程[2013.6.16更新]

關於如何修改完成品請參考A850編譯教程後半部分

原始碼下載:

各分支對應不同的版本,請分別下載

https://github.com/benjaminwan/TWRP-in-chs

Device配置檔案下載

https://github.com/benjaminwan/twrp_device_pantech_ef44s

一、編譯環境

編譯需要Linux,推薦使用Ubuntu 64位版,如果你的CPU支援vt-x,則可以在虛擬機器裡安裝,如果不支援,則只能安裝在真實的計算機裡。

如果是虛擬機器,至少分配2G記憶體和60G硬碟。

本人使用Lubuntu 12.10 64bit。

關於ubuntu的安裝、配置、相關知識、命令……,請自行科普,此處略過。

 請參考此篇文章對linux編譯需要的支援軟體進行安裝,並從github上同步cm9程式碼下來:

http://wiki.cyanogenmod.org/w/Build_for_mako

中文版編譯需要cm9,需要注意的是,同步程式碼使用的命令需要改成

repo init -u git://github.com/CyanogenMod/android.git -b cm-9.1.0

英文版編譯需要cm10.0,需要注意的是,同步程式碼使用的命令需要改成

repo init -u git://github.com/CyanogenMod/android.git -b jellybean


二、編譯twrp

中文版與英文版編譯方法相同,只是編譯英文版需要cm10,以下就以中文版編譯為例。

1、假設cm9原始碼放在/opt/cm9

先把cm9/bootable/recovery這個目錄內檔案刪除。

2、把下載好的中文版twrp原始碼放入cm9/bootable/recovery目錄

3、把下載好的device配置檔案放到cm9/device/pantech/ef44s

4、在/opt/cm9目錄下開啟終端命令列(ubuntu的話在此目錄下按F4鍵就可以跳出命令列)

輸入source build/envsetup.sh回車

輸入lunch回車

找到cm_ef44s-eng,並輸入前面對應的數字,比如說5,回車

輸入make -j3 recoveryimage回車

如果沒有問題,則最終檔案會生成在cm9/out/target/product/ef44s/recovery.img

5、編譯完成後,如果想編譯另一個版本twrp,則同樣的,替換cm9/bootable/recovery目錄下所有檔案,再make clean清除已編譯的檔案,再次重新編譯make-j3 recoveryimage。

6、如果你想更改twrp中文字型大小,可以開啟bootable/recovery/minuitwrp/graphics_cn.c

修改此處#include "font_cn_34x34.h",當前資料夾下的font_cn_aaxaa.h就是不同大小的字型。

7、在device配置檔案中選擇解析度配置檔案:開啟device/pantech/ef49k/BoardConfig.mk

修改DEVICE_RESOLUTION := 720x1280,注意此處配置的解析度要對應上一條提到的路徑下解析度資料夾,比如v2.4.1.0沒有1080x1920這個解析度,那麼就得從v2.5.0.0中複製過去參照著修改。

8、如果翻譯有誤,可以修改bootable/recovery/gui/devices/720x1280/ui.xml

其中720x1280為螢幕解析度配置檔案,其它解析度沒有漢化,請參照720x1280的ui.xml自行漢化

9、關於核心的選擇,kernel166是正式機166系統的核心,同理kernel212和kernel216對應正式機212和216系統的核心,而kernel_ics_ws20則用於工程機ws20,如果你想換成以212核心來編譯,那麼可以把device/pantech/ef44s/BoardConfig.mk中的# Kernel 212下面5行去除#符號,再把# Kernel 216下面5行加上#符號,依葫蘆畫瓢,也可以自行替換成你需要的核心。

10、關於編譯用於android4.0系統的twrp,必須要換成kernel166,並且啟用#kernel 3.0下的內容,並註釋掉# Kernel 3.4下面的內容。

11、關於配置更多的備份分割槽,在device/pantech/ef44s/BoardConfig.mk最底部

一共只能配置3項,本人已經配置了2項,SP1是基帶分割槽,SP2是rawdata分割槽(存有IMEI串碼)。

SP1_NAME:= "modem"

SP1_BACKUP_METHOD:= image

SP1_MOUNTABLE:= 0

SP2_NAME:= "rawdata"

SP2_BACKUP_METHOD:= image

SP2_MOUNTABLE:= 0

如果還要增加一項,以下作為範例講解:

SP3_NAME:= "分割槽名稱" #這裡的分割槽名稱必須在ef49k/recovery.fstab中已經定義了,否則配置後不會識別到正確的分割槽內容。

SP2_DISPLAY_NAME:= "顯示名稱"#此項為可選項,比如分割槽名稱是modem,而顯示名稱則可以叫做fotamodem,修改後在“備份”選單裡可以看到效果,如果不配置,則顯示名稱與分割槽名稱相同。

SP3_BACKUP_METHOD:= image或files  #以映象或檔案的形式做備份,如果是ext4格式的分割槽,比如system分割槽,可以選擇files

SP3_MOUNTABLE:= 0或1  #是否可以掛載,在掛載選單中可以看到效果。

12、分割槽配置,recovery.fstab,有2種配置方法,可以按分割槽名來配置,也可以按分割槽號來配置,如下第一行是按核心自動識別到的分割槽名來配置,而第二行則是按分割槽表的分割槽序號來配置,效果相同

/modem            vfat           /dev/block/platform/msm_sdcc.1/by-name/modem

/modem            vfat           /dev/block/mmcblk0p1

獲取分割槽配置資訊可以在正常系統下,用re管理器開啟/dev/block/platform/msm_sdcc.1/檢視都有哪些分割槽,或者用工具開啟備份的分割槽表並匯出分割槽資訊。

13、關於格式化內建儲存,BoardConfig.mk中

RECOVERY_SDCARD_ON_DATA:= true此項能讓twrp識別/data/media內的資料,避免內建儲存在清除data時被刪除。

14、關於對sd卡分割槽功能,twrp有對sd卡進行分割槽的功能,但是為了避免小白對內建儲存進行誤分割槽導致黑磚,在BoardConfig.mk中

BOARD_HAS_NO_REAL_SDCARD:= true此項開啟後可關閉分割槽功能。

15、卡刷方式配置,在BoardConfig.mk中

TW_FLASH_FROM_STORAGE:= true此項開啟可以允許從當前位置讀取zip卡刷包來刷入,如果不配置則會把卡刷包讀取到/tmp後再刷入,因為/tmp是虛擬記憶體,這樣的話,大的卡刷包可能造會造成記憶體不足而無法刷入。

16、配置內外儲存掛載點和掛載名稱,在BoardConfig.mk中

這個沒什麼好說的,和正常系統一樣就行了。

TW_INTERNAL_STORAGE_PATH:= "/data/media"

TW_INTERNAL_STORAGE_MOUNT_POINT:= "data"

TW_EXTERNAL_STORAGE_PATH:= "/external_sd"

TW_EXTERNAL_STORAGE_MOUNT_POINT:= "external_sd"

17、修改adb裝置驅動id,bootable/recovery/etc/init.rc

write/sys/class/android_usb/android0/idVendor 18D1

write/sys/class/android_usb/android0/idProduct D001(預設值)

因為谷歌官方提供的adb裝置驅動沒有PID為D001的裝置,所以D001會讓官方驅動識別不到,得手動強制安裝,所以這裡就改成了4EE0,讓驅動識別成Google Nexus裝置

這是驅動裡對應的條目;Google Nexus (generic)

%SingleBootLoaderInterface%= USB_Install, USB\VID_18D1&PID_4EE0

[2013.6.16更新]

18、2.4.4.0以後在設定中增加了螢幕超時項,而且預設是開啟的,有些手機螢幕超時自動關閉後卻無法再喚醒(A840沒有這個問題),所以可以更改預設為關閉狀態以避免出現這個問題:

修改recovery/data.cpp

mValues.insert(make_pair("tw_screen_timeout_secs", make_pair("60", 1)));

60即代表超時的時間,可改為0即可關閉螢幕超時。

而後面的1則代表此項是否儲存。