How to compile twrp(编译属于你自己的twrp_recovery)

[TOC]

How to compile twrp

一、前言

在很久之前就有了自己编译 twrp 和 rom 的想法,但碍于设备条件,一直没有机会实现。刚好这段时间有空,就开始查阅资料实现。

二、硬性要求

  1. 具有一定的科学上网能力。(必须!!!!)
  2. 硬盘空间 >= 200G。
  3. 会基本的Linux命令操作
  4. 运行内存>=16G(推荐16G以上,当然差的不是很多可以通过增大swap分区来解决)

三、教程正文

  1. 配置好Ubuntu环境

    1. 配置虚拟机或者Windows安装虚拟机都可以。网上关于此的教程较多,在此不进行过多的赘述。Ubuntu版本推荐 18.04或 22.04(自用版本)
  2. 安装必要的软件依赖

    1. 把apt 的源更换为国内的镜像

      1. ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
      2. 阿里/中科大也可
    2. ```shell

      安装一些必要的依赖

      sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev git

      可选 这两个工具是为了可以刷入手机

      sudo apt install adb fastboot

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18

      3. 配置git(如果你没有配置过请配置)

      1.

      3. 下载 repo 工具。

      1. 使用清华源安装 [教程](https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/)

      1. ```shell
      # 下载
      curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
      chmod +x repo
      mv repo ~/usr/bin/
      #or mv repo ~/bin/
      # 将以下内容写入 ~/.bashrc 文件内
      export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
      # 重启终端模拟器
      1. 查看 PATH 可使用 echo $PATH 命令
      2. .bashrc 文件(bash rc-running configuration)这个文件主要保存个人的一些个性化设置,如命令别名、路径等。也即在同一个服务器上,只对某个用户的个性化设置相关。普通用户为 /home/用户名/ 目录,root 为 /root/ 。改文件在==每次启动bash==都会被加载
  3. 使用repo初始化本地仓库,使用AOSP tree 构建 TWRP。

    1. ```shell

      创建文件夹

      mkdir twrp&&cd twrp

      这里使用 aosp 最小设备树

      repo init -u https://github.com/minimal-manifest-twrp/platform_manifest_twrp_aosp.git -b twrp-12.1
      1
      2
      3
      4
      5
      6

      5. 同步源码

      1. ```shell
      repo sync -j8
      # -j xxx 代表使用多少个线程
  4. 准备 devices tree(dt文件)

    1. 直接从 github 获取

    2. github 搜索 设备代号(可百度搜) + twrp —–> 这里以k30pro 为例

      1. lmi twrp image-20221027221632595

      2. 下载到 ./device/xiaomi(手机厂商)/lmi(设备代号)/

        1. image-20221027222023975

        2. ```shell
          #确保你在刚刚创建的twrp 文件内
          git clone 上面的链接 device/xiaomi/lmi/

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13

          2. 我是大佬自己写dt文件(大佬不需要看教程)--->后续我会写一个

          3. 使用 twrpdtgen 生成

          1. ```shell
          #安装python
          apt install python3
          # 安装cpio 必须
          apt install cpio
          #使用 pip 安装
          # python2.7 及python3.4以上已内置,没有的额外安装
          pip3 install twrpdtgen
      3. 提取 boot.img /recovery.img(具有recovery独立分区的手机)

        1. 可以通过下载线刷包解包后获取
          1. 小米卡刷/线刷包下载
      4. 使用 twrpdtgen 生成dt tree

        1. ```shell
          python3 -m twrpdtgen recovery.img/boot.img绝对路径

          提示 Done!即成功

          1
          2
          3
          4
          5
          6

          2. 将 twrpdtgen 生成的 dt tree 移动到 twrp/devices中

          1. ```shell
          mv output/xiaomi(厂商代号) device/

  5. 开始编译

    1. 确保你现在在源码根目录 也就是 twrp 文件夹里

      1. 不确定的可以使用 pwd 命令,查看
    2. 配置环境

      1. ```shell
        . build/envsetup.sh
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15

        3. 开始编译

        1. ```shell
        # 1.直接在命令行输入
        export ALLOW_MISSING_DEPENDENCIES=true

        # 2.
        lunch
        #会输出一系列,选择你要编译的序号即可,一般为 omni_lmi(代号)-eng
        #or
        lunch omni_lmi-eng

        #3.
        mka recoveryimage
        1. 编译成功!
          1. 当出现

            build completed successfully

            。即证明你已经编译成功了!
  6. 刷入 recovery.img

    1. 重启设备进入 fastboot模式
      adb reboot fastboot
    2. 刷入 recovery
      fast flash recovery /out/target/product/lmi/recovery.img(可能会有变化)

三、常见问题

  1. Q:为什么提示 github unable resolve 。
    A: 因为国内的特殊环境,github 偶尔不能访问,如果可以的话请挂好梯子后进行编译。