A840 TWRP Recovery英简繁版编译教程[2013.6.16更新]

本文是A840 TWRP Recovery的编译教程,详细介绍了在Ubuntu环境下编译的过程,包括源代码下载、环境配置、编译步骤以及如何修改字体大小、内核选择、备份分区等。此外,还提供了关于解决屏幕超时问题的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于如何修改完成品请参考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则代表此项是否存储。


评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值