编译TWRP-recovery教程及源码地址

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/recovery1 `

删除了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!”这样的确认信息。

 

 ivan@HQW-PC:~/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

 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分区格式5 

没有misc分区(从recovery.fstab中可以发现)

 

OK,分析完了这些之后,我们开始着手配置文件吧

然后打开:BoardConfig.mk 这个文件

因为编译TWRP多了很多需要手动设置硬件方面的配置参数,没有默认设置的,所以我们需要写入这些

 

# Platform)

 TARGET_CPU_ABI := armeabi-v7

 TARGET_CPU_ABI2 := armeabi

 TARGET_ARCH_VARIANT := armv7

 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 或者以下)

 

 OK教程到此结束

<think> 嗯,用户这次明确询问TWRP源码编译的方法和指南,结合此前提供的站内引用内容,我需要整合出清晰实用的技术路线。用户应该是个安卓设备开发者或高级玩家,尝试自行编译TWRP,所以需要具体到环境搭建和编译指令的细节。 从引用[1][3]看,OmniROM确实是官方推荐的源码基础,这里必须强调环境配置的关键点:Python 2.7的兼容性在Ubuntu新版中可能需要容器方案,引用[3]的repo sync指令线程数-j24需要根据实际RAM调整。用户可能忽略设备树的匹配问题,所以设备文件克隆步骤要单独说明——像huawei nemo示例那样保留brand/model层级至关重要。 注意到引用[2][4]提供了替代方案:Action-Recovery-Builder适合不熟悉Linux环境的用户,而mkvendor.sh脚本则是处理非官方支持设备的折中方案。这部分作为补充选项比较合适,避免初学者被源码编译劝退。 编译失败的高频风险点有三个:首先是设备树overlay文件缺失导致lunch菜单不识别设备,其次是Java版本冲突(Android 6.0要求OpenJDK 8),最后是镜像生成阶段vendor库缺失。解决方案需要分散在步骤中提示,比如引用[4]的boot.img替代方案本质是利用prebuilt内核。 相关问题的设计要覆盖后续需求:编译优化指向ccache加速(这对反复调试的用户很实用),刷机验证强调fastboot模式风险,设备树定制则关联到内核头文件处理这类进阶操作。用户如果卡在某个环节,大概率会接着问这三个方向的问题。 </think> 以下是基于官方实践推荐的TWRP源码编译详细指南,整合关键引用内容并优化操作逻辑: --- ### **TWRP源码编译核心步骤** #### 1. **环境准备** - **系统要求**:Ubuntu 18.04+ (推荐22.04 LTS) - **依赖安装**: ```bash sudo apt update && sudo apt install git-core gnupg flex bison build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev \ x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip ``` #### 2. **源码同步** - **初始化OmniROM仓库** (TeamWin官方合作源)[^1][^3]: ```bash mkdir ~/twrp-build && cd ~/twrp-build repo init -u git://github.com/minimal-manifest-twrp/platform_manifest_twrp_omni.git -b twrp-6.0 ``` - **同步源码** (耗时约1-3小时): ```bash repo sync -j$(nproc) # 根据CPU核心数调整线程 ``` #### 3. **设备树配置** - **获取设备树文件** (以华为设备为例)[^3]: ```bash mkdir -p device/huawei cd device/huawei git clone https://github.com/TeamWin/android_device_huawei_nemo.git nemo cd ../.. ``` > 提示:替换`huawei/nemo`为你的设备品牌/型号,需确认[官方支持列表](https://github.com/TeamWin) #### 4. **编译配置** - **初始化构建环境**: ```bash source build/envsetup.sh lunch omni_nemo-eng # 格式: omni_<设备代号>-eng ``` - **生成vendor配置** (无官方设备树时)[^4]: ```bash ./build/tools/device/mkvendor.sh huawei c8813 ./path/to/boot.img ``` #### 5. **执行编译** ```bash mka recoveryimage -j$(nproc) # 输出路径: out/target/product/<设备代号>/recovery.img ``` > 编译时间约30-90分钟,取决于硬件性能 #### 6. **刷入验证** ```bash fastboot flash recovery recovery.img fastboot reboot recovery ``` --- ### **常见问题解决** 1. **设备未识别** - 检查`lunch`菜单中的设备代号是否与设备树文件夹名一致 - 确认设备树包含`<device>_<model>.mk`文件 2. **源码同步失败** 临时解决方案: ```bash repo sync --fail-fast --force-sync ``` 3. **依赖缺失错误** 安装缺失库: ```bash sudo apt install libssl-dev libffi-dev python-is-python2 ``` --- ### **替代方案推荐** - **自动化编译**:使用[Action-Recovery-Builder](https://github.com/Simo-Ofb/Action-Recovery-Builder)项目,通过GitHub Actions云编译[^2] - **设备适配指南**:参考[TWRP Porting Guide](https://twrp.me/faq/portingguide.html) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值