本教程前半部分讲关于如何编译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一样。

最后,如果修改不成功,也不要惊讶,不存在绝对能成功的方法。

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

  1. 使用TWRP Recovery刷入CM13等第三方ROM教程

    http://www.miui.com/thread-4492914-1-1.html 首先,可以使用论坛里发布的中文TWRP或者我改的http://www.miui.com/forum.php?mo ...

  2. TWRP Recovery 编译适配教程

    TWRP Recovery的强悍,使得它成为了刷机领域当之无愧的首选. 很多设备刷机的第一步,正是选择一款适合的TWRP,然后刷上去.目前, 多个品牌的热门机型都有官方适配了,且一些开发者也给官方未覆 ...

  3. 为华为荣耀5c(nem-tlooh)编译最新twrp recovery

    ubuntu18.04 配置编译环境 apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-d ...

  4. 三星s9android recovery,三星S9+刷第三方中文twrp recovery工具和教程

    三星S9+手机即使要获得root权限?刷第三方ROM包,那么三星S9+手机要先刷入第三方recovery才行,今天114手机乐园给你们分享一下三星S9+刷入第三方twrp recovery工具和教程. ...

  5. java utf8 简繁转换 类库_在Java中进行中文繁体简体转换,基于OpenCC(Open Chinese Convert)方案...

    一.OpenCC介绍 OpenCC (Open Chinese Convert,开放中文转换) 是一个用于中文简繁转换的开源项目,支持词汇级别的转换.异体字转换和地区习惯用词转换(中国大陆.台湾.香港 ...

  6. 网站必备之简繁切换功能实现 1

    前言 一个优秀的网站为了能够更好地照顾不同的用户,一般都会提供简繁两种版本字体切换,提高用户的体验.例如 : Hexo 官网 .之所以 Hexo 能得到了不少内地忠实粉丝的追捧,是因为 Hexo 的官 ...

  7. opencc在linux环境中,android-opencc,中文简繁转换项目OpenCC的安卓版

    android-opencc,中文简繁转换项目OpenCC的安卓版 发布时间:2016-05-12 11:59:43来源:红联作者:baihuo android-opencc基于OpenCC的源代码, ...

  8. Thermoflow GT Pro v19.0 Multilanguage-ISO 1CD(多语言版,包括简繁、体中文;电力及热电联产工业中热能工程软件)

    Thermoflow, Inc.产品: Thermoflow GT Pro v19.0  Multilanguage-ISO 1CD(多语言版,包括简繁.体中文:电力及热电联产工业中热能工程软件) T ...

  9. CVCode简繁转换的扩展:GBK与Big5转换

    CVCode使用码表对照的方式实现简繁转换,在Unicode盛行的今天仍然是有其现实意义的.   较常见的应用是,企业内有台籍员工,也有大陆员工,而且简体和繁体的OS都有使用,这样在MIS系统中如何保 ...

最新文章

  1. vue 组件属性监听_Vue.js 监听属性
  2. 简单搞定linux逻辑卷
  3. vpx8运行待解决问题
  4. 如何在Ubuntu上安装GCC编译器
  5. C语言:---gdb多线程调试
  6. 数据交互智能终端设想
  7. linux race window,java开发环境(QTrace)
  8. 一个简单的任务处理队列
  9. ubuntu 18.04 安装 LNMP
  10. 推荐几个我珍藏的公众号~超级无敌!
  11. Atitit.软件仪表盘(4)--db数据库子系统-监测
  12. 前端面试被问到项目中的难点有哪些?
  13. The Last Non-zero Digit
  14. 安全问题层出不穷 加密手机悄然兴起
  15. 天道酬勤~我如此惬意
  16. 苹果中国应用商店改为人民币结算 可网银充值
  17. 【前端html页面数据导出为pdf文件】
  18. 工程建设项目综合信息管理系统
  19. 计算机网络 交换机工作原理
  20. iCheck的使用示例

热门文章

  1. 智能空调安卓APP远程控制空调开关和温度(TCP/IP协议)
  2. preprocess
  3. [hdu4343]interval query
  4. Eclipse 菜单介绍
  5. 数十亿数量级评论系统的SQL调优实战
  6. JUnit 生命周期方法
  7. Java校验身份证号工具类
  8. java8 stream流 将一个list转换成list
  9. canvas编写的dota版连连看 demo放出
  10. EmEditor 添加代码格式化功能