您的位置:首页 > 其它

A850/A870 TWRP Recovery简繁中文版编译及修改教程[2013.6.16更新]

2013-05-20 22:26 477 查看
本教程前半部分讲关于如何编译twrp,后半部分才是讲如何修改完成品的twrp。

源代码下载:
除了主线以外,各分支对应不同的版本,请分别下载 https://github.com/benjaminwan/TWRP-in-chs A850 Device配置文件下载 https://github.com/benjaminwan/twrp_device_pantech_ef49k
A870 Device配置文件下载 https://github.com/benjaminwan/twrp_device_pantech_ef52l
一、编译环境
编译需要Linux,推荐使用Ubuntu 64位版,如果你的CPU支持vt-x,则可以在虚拟机里安装,如果不支持,则只能安装在真实的计算机里。
如果是虚拟机,至少分配2G内存和60G硬盘。
本人使用Lubuntu 12.10 64bit。
关于ubuntu的安装、配置、相关知识、命令……,请自行科普,此处略过。

另外编译需要cm9,请参考此篇文章对linux编译需要的支持软件进行安装,并从github上同步cm9代码下来:http://wiki.cyanogenmod.org/w/Build_for_mako
需要注意的是,同步代码使用的命令需要改成
repo init -u git://github.com/CyanogenMod/android.git -b cm-9.1.0

二、编译twrp
1、假设cm9源代码放在/opt/cm9
先把cm9/bootable/recovery这个目录内文件删除。

2、把下载好的中文版twrp源代码放入cm9/bootable/recovery目录

3、把下载好的device配置文件放到cm9/device/pantech/ef49k

4、在/opt/cm9目录下打开终端命令行(ubuntu的话在此目录下按F4键就可以跳出命令行)
输入source build/envsetup.sh回车
输入lunch回车
找到cm_ef49k-eng,并输入前面对应的数字,比如说5,回车
输入make -j3 recoveryimage回车
如果没有问题,则最终文件会生成在cm9/out/target/product/ef49k/recovery.img

5、编译完成后,如果想编译另一个版本twrp,则同样的,替换cm9/bootable/recovery目录下所有文件,再make clean清除已编译的文件,再次重新编译make-j3 recoveryimage。
----------------------------------------------------------------------------------------------------------------------------------------------
下面是一些配置项:

6、如果你想更改twrp中文字体大小,可以打开cm9/bootable/recovery/minuitwrp/graphics_cn.c
修改此处#include "font_cn_34x34.h",当前文件夹下的font_cn_aaxaa.h就是不同大小的字体。

7、在device配置文件中选择分辨率配置文件:打开cm9/device/pantech/ef49k/BoardConfig.mk
修改DEVICE_RESOLUTION := 720x1280,注意此处配置的分辨率要对应上一条提到的路径下分辨率文件夹,比如v2.4.1.0没有1080x1920这个分辨率,那么就得从v2.5.0.0中复制过去参照着修改。

8、如果翻译有误,可以修改cm9/bootable/recovery/gui/devices/720x1280/ui.xml
其中720x1280为屏幕分辨率配置文件,其它分辨率没有汉化,请参照720x1280的ui.xml自行汉化

9、关于内核的选择,如果你想换成以K版210内核来编译,那么可以把cm9/device/pantech/ef49k/BoardConfig.mk中的# Kernel 210下面5行去除#符号,再把# Kernel 212下面5行加上#符号,依葫芦画瓢,也可以自行替换成你需要的内核。

10、关于编译用于android4.0系统的twrp,必须要换成kernel158,并且启用#kernel 3.0下的内容,并注释掉# Kernel 3.4下面的内容。需要注意的是,#Kernel 3.0的配置本人只是随手写的,并没有实际测试过,可能内核基地址和ramdisk偏移地址不一定正确,需要自行调整。

11、关于配置更多的备份分区,在cm9/device/pantech/ef49k/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、分区配置,ef49k/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/查看都有哪些分区,或者用工具打开备份的分区表并导出分区信息。
这里本人留下了2种配置方式的范例,recovery.fstab为按分区名配置,recovery_old.fstab为按分区号配置.

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,cm9/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以后在设置中增加了屏幕超时项,而且默认是打开的,有些手机屏幕超时自动关闭后却无法再唤醒(A850存在这个问题),所以可以更改默认为关闭状态以避免出现这个问题:
修改recovery/data.cpp
mValues.insert(make_pair("tw_screen_timeout_secs", make_pair("60", 1)));

60即代表超时的时间,可改为0即可关闭屏幕超时。
而后面的1则代表此项是否存储。

三、修改
并不是所有人会都提供源代码和配置文件甚至教程……
假设你已经有了一个别人编译好的twrp,且没有源代码和编译配置文件,而你想要修改一些配置或界面文字,该怎么办呢?
需要注意的是CPU不同的机型不可以拿来修改,因为二进制代码不兼容。
CPU相同的手机则可以拿来修改,比如A850K的用于A850L,或A850用于A860(APQ8064),或A840用于A830(MSM8960),或小米2S用于OPPO X909(APQ8064),同型号、同品牌当然最好,不同品牌也是有一定成功率。

1、如果手机品牌、型号不同的话,一定要替换内核。
Recovery.img和boot.img都是由二个部分组成:kernel和ramdisk.gz
其中kernel是编译好的二进制文件,无法再解开修改。
而ramdisk.gz则是打包好的文件,可以再进一步解开更改。
修改工具在这里下载http://download.csdn.net/detail/benjaminwan/5416883

2、首先假设你有一个可用于自己手机的官方recovery或twrp,以及一个想要修改的其它手机的twrp
以下以实例来说明如何解压,操作之前命令行先su取得root权限。



首先把mkbootimg和split_bootimg.pl复制,并与需要处理的recovery.img放在一起。
更改mkbootimg和split_bootimg.pl的执行权限,右键属性,把执行改成任何人。
或者用命令来改权限chmod 777 mkbootimg,注意linux命令区分大小写
然后执行./split_bootimg.pl recovery.img,注意记下内核传递参数console=NULL,115200,n8 androidboot.hardware=qcom user_debug=31msm_rtb.filter=0x3F ehci-hcd.park=3 loglevel=0 vmalloc=0x12c00000



recovery.img-kernel和recovery.img-ramdisk.gz即为解压出来的2个文件

3、修改ramdisk.gz
在当前目录下新建一个ramdisk文件夹



命令行进入这个文件夹,并执行gzip -dc ../*-ramdisk.gz | cpio -i



4、介绍一些ramdisk文件夹下的修改项目:
default.prop文件
ro.secure=0//开启ROOT
ro.debuggable=1//启用USB调试

init.rc文件,修改adb设备驱动id
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

ueventd.*.rc,有可能会有1~3个文件不等,这是关于内核驱动设备的权限的定义,可以从官方recovery和可用的recovery中解压替换。

fstab.xxx,挂载点定义,可以从官方recovery和可用的recovery中解压替换

/etc/recovery.fstab,分区定义,可以从官方recovery和可用的recovery中解压,但一般官方的会避开某些分区,而第三方的则很多偷懒没有配置,有2种配置方法,可以使用分区名来配置或直接使用分区号来配置,上面讲过了,这里就不再重复。

/res/ui.xml,可以修改界面显示文字,如果你的手机是1080x1920分辨率的,而要修改的twrp却是720x1280分辨率的,那么可以参考v2.5.0.0源代码的1080x1920的ui.xml来修改。

5、重新打包ramdisk.gz
在ramdisk目录下执行find . |cpio -o -H newc | gzip > ../ramdisk.gz



会在上一级目录下生成ramdisk.gz

6、重新打包recovery.img
回到初始目录,把你自己手机用的内核改名为kernel复制进来
执行./mkbootimg --cmdline 'console=NULL,115200,n8androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3loglevel=0 vmalloc=0x12c00000' --kernel kernel --ramdisk ramdisk.gz -o myrecovery.img--base 0x80200000 --ramdisk_offset
0x02000000
其中’console=xxx’这项可以从解压官方recovery时取得。
--base0x80200000 这是基地址,算法如下图第一个红框数值减去0x8000,即0x80208000-0x8000=0x80200000
--ramdisk_offset0x02000000 ramdisk偏移地址,把第二个红框地址减去基地址,即0x82200000-0x80200000=0x02000000
如果这2个地址不会算也不要紧,可以等生成以后,用winhex或ultraedit直接修改。
最后改完后,要保证3个红框中的内容与官方recovery一样。



最后,如果修改不成功,也不要惊讶,不存在绝对能成功的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐