如何编译自己的twrp(翻译自官方文档)

馋奶兔 提交于 2020-01-08 15:51:47

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

自己编译TWRP

TWRP的3.x版本全部开源了,可以自己来编译了。这个教程不是一步一步来教你的傻瓜式教程。如果你对基本的linux的命令不熟悉,那么你可能做不到编译AOSP,注:编译TWRP需要在编译AOSP的环境里进行。

目前可以在以下版本的系统源码里编译TWRP:Omni 5.1、Omni 6.0、Omni 7.1、Omni 8.1、CM 12.1、CM 13.0、CM 14.1、CM 15.1 ,建议使用Omni 7.1。如果在CM系统源码里编译,可能会遇到一些小问题。如果不知道怎么解决这些问题,就替换成Omni吧。

如果使用CM,需要将TWRP源码放到 bootable/recovery-twrp 文件夹下面,并且在你的 BoardConfig.mk 里面设置变量 RECOVERY_VARIANT := twrp ,TWRP源码地址

选择最新的可用的分支。如果在Omni源码里编译,是不需要这一步的,因为Omni已经包含了TWRP源码。但是如果用旧版本的Omni源码,可能需要最新的分支(最新的分支在旧版本的编译树里面是可以编译成功的)。

如果只需要编译TWRP,你可以尝试在最小的树里面编译,可以尝试使用这个manifest。这个应该可以在大多数的情况下正常编译,但是你需要在这个manifest提供更多的仓库。地址:https://github.com/minimal-manifest-twrp

编译前的准备

	注意:如果你添加或修改了flag,需要在编译前执行 `make clean` 或者 `make clobber` ,否则修改不会生效。

	现在有了源码,你需要根据你编译的设备设置或修改一些flag。找到你设备的 `BoardConfig.mk` 文件。这个文件一般在 `devices/manufacturer/codename` 目录下面,(如:devices/xiaomi/libra)。

	你的 `BoardConfig.mk` 文件需要包含 ` architecture` 和 `platform` 设置,一般情况下别人都会去创建这个文件的,但是如果你想编译自己的设备,你就需要自己添加这些了。如果没有这些配置,recovery可能在启动期间会出现 `seg fault` 错误,并且屏幕一直会循环出现TWRP的图标。

	我们通常将自己的flag放在 `BoardConfig.mk` 最下面,并以#twrp开头,可以使用 ` TW_THEME` 来设置主题,TWRP现在使用缩放和拉伸来适应不同的屏幕。目前有5种设置方式:portrait_hdpi、portrait_mdpi、landscape_hdpi、landscape_mdpi、watch_mdpi。对于竖着的设备(如手机),选择720x1280或更高的方案。对于横着的设备(如平板),需要选择1280x720或更高的方案:TW_THEME := portrait_hdpi

	主题是不会旋转的,现在也没有旋转选项,如果你发现屏幕旋转了,你需要设置一些flag使屏幕旋转正常(这个在最后说明)。

	还需要设置以下flag:
  • RECOVERY_SDCARD_ON_DATA := true --开启优化处理 /data/media 目录,用来存储(需要设备刚开始发货的时候,比如Galaxy Nexus)这个设置在这些设备上面不需要设置。如果没有设置这个,并且fstab没有下面几个的引用:/sdcard、/internal_sd、/internal_sdcard、/emmc,将会用虚拟存储来进行自动处理。

  • BOARD_HAS_NO_REAL_SDCARD := true -- 如果TWRP不适合恢复分区,则会关闭SDCARD分区功能,来节省一些空间。

  • TW_NO_BATT_PERCENT := true -- 在不支持电量显示的设备上面关闭电量显示

  • TW_CUSTOM_POWER_BUTTON := 107 -- 给锁屏自定义电源按钮的快捷键

  • TW_NO_REBOOT_BOOTLOADER := true -- 从重启菜单里移除重启到Bootloader按钮

  • TW_NO_REBOOT_RECOVERY := true -- 从重启菜单里移除重启到Recovery按钮

  • RECOVERY_TOUCHSCREEN_SWAP_XY := true -- 互换触摸x和y轴的映射

  • RECOVERY_TOUCHSCREEN_FLIP_Y := true -- 反转触摸的y轴值

  • RECOVERY_TOUCHSCREEN_FLIP_X := true -- 反转触摸的x轴值

  • TWRP_EVENT_LOGGING := true -- 开启触摸事件日志,用来帮助调试触摸屏的问题(不要在发布的时候开启这个,会很快占满日志文件)。

  • BOARD_HAS_FLIPPED_SCREEN := true -- 颠倒屏幕

      还可以在recovery源码里的Android.mk查看其他的一些编译设置,其他大部分的设置并不是常用的,在这里就不说明了。
    

RECOVERY.FSTAB

	TWRP2.5及以上版本支持新的resovery.fstab的一些特性,可以用来扩展TWRP的备份/还原功能,不用添加fstab的设置,这些是会自动处理的。

	注意TWRP的3.2.0版本只支持fstab的2.0及以上版本,你还需要在九版本的的TWRP上面使用旧的格式(比如下面的格式)。3.2.0版本还支持v1版本的fstab。要在编译里面最大化TWRP的功能,你可以创建twrp.fstab并且使用 `PRODUCT_COPY_FILES` 在TWRP启动的时候将文件放到 `/etc/twrp.fstab`,如果在ramdisk找到了twrp.fstab,会把 `/etc/recovery.fstab` 重命名为 `/etc/recovery.fstab.bak`,接着把 `/etc/twrp.fstab` 重命名为 `/etc/recovery.fstab`。这个会替换fstab的两个文件为设备上的两个文件,用来兼容设备上其他的recovery的功能。

代码: PRODUCT_COPY_FILES += device/lge/hammerhead/twrp.fstab:recovery/root/etc/twrp.fstab

	TWRP里面的fstab可以给每个分区列表包含一些 “flags”。

	下面是一个Galaxy S4的fstab的例子,我们可以引用:
/boot       emmc        /dev/block/platform/msm_sdcc.1/by-name/boot
/system     ext4        /dev/block/platform/msm_sdcc.1/by-name/system
/data       ext4        /dev/block/platform/msm_sdcc.1/by-name/userdata length=-16384
/cache      ext4        /dev/block/platform/msm_sdcc.1/by-name/cache
/recovery   emmc        /dev/block/platform/msm_sdcc.1/by-name/recovery
/efs        ext4        /dev/block/platform/msm_sdcc.1/by-name/efs                            flags=display="EFS";backup=1
/external_sd     vfat       /dev/block/mmcblk1p1    /dev/block/mmcblk1   flags=display="Micro SDcard";storage;wipeingui;removable
/usb-otg         vfat       /dev/block/sda1         /dev/block/sda       flags=display="USB-OTG";storage;wipeingui;removable
/preload    ext4        /dev/block/platform/msm_sdcc.1/by-name/hidden                            flags=display="Preload";wipeingui;backup=1
/modem      ext4        /dev/block/platform/msm_sdcc.1/by-name/apnhlos
/mdm		emmc		/dev/block/platform/msm_sdcc.1/by-name/mdm
	Falgs可以添加到分区列表的尾部,使用空格(空格或Tab)隔开。Flag只会影响被添加的这个分区,不会影响其他的分区,Flag的值使用分号分割,如果值里面有空格,值需要用加引号。

代码: /external_sd vfat /dev/block/mmcblk1p1 flags=display="Micro SDcard";storage;wipeingui;removable 这个分区的flag设置了分区显示名称为"Micro SDcard", wipeingui使这个分区可以在advanced wipe菜单里使用,removable表示有时候这个分区不存在,防止在启动时显示挂载错误。下面是全部的flag列表:

  • removable -- 表示有时候这个分区不存在,防止在启动时显示挂载错误
  • storage -- 此分区可以用来存储,可以在备份、恢复、安装zip的时候使用
  • settingsstorage -- 只有一个分区应该设置为存放设置的分区,这个分区用来存放TWRP的设置文件
  • canbewiped -- 这个分区可以通过后端系统来清除,但是可能不会显示在界面上来手动清除
  • userrmrf -- 重写清除的普通格式类型,并且只允许使用rm -rf命令来清除这个分区
  • backup= -- 必须使用等号,可以为1或0,1代表这个分区显示在备份/恢复的列表里面,0代表不显示在备份/恢复的列表里面
  • wipeingui -- 使这个分区显示在advanced wipe菜单界面,允许清除的时候选择
  • wipeduringfactoryreset -- 在恢复出厂设置时清除这个分区
  • ignoreblkid -- blkid是用来确定TWRP用的是什么文件系统,这个会让TWRP跳过或忽略blkid,只使用fstab里面指定的文件系统
  • retainlayoutversion -- 使TWRP保留设备上面的/data里面的.layoutversion文件,就像Sony Xperia S会使用/data/media,但是还会有一个独立的分区/sdcard
  • symlink= -- TWRP挂载分区时运行额外的挂载命令,一般是使用/data/media创建/sdcard
  • display= -- 界面上显示的这个分区的名称
  • storagename= -- 在存储列表界面上显示的这个分区的存储名称
  • backupname= --
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!