JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Check out
this
script by
@yuweng
to auto(matically|magically) compile TWRP for your device!
Lately the TWRP Compiling
guide
, has been seeing a lot of newbies who were struggling with TWRP flags to ensure they compile a usable build. So without delay, here we go!
If no input has been suggested, assume true/false
CREDITS :
@Android-Andi
for some explanations
here
@SdtBarbarossa
for some more explanations
here
@yuweng
for HUGE amount of explanations provided through PM!
# Automatically implies these:
BOARD_HAS_NO_REAL_SDCARD := true
TW_USE_TOOLBOX := true
TW_EXCLUDE_SUPERSU := true
TW_EXCLUDE_MTP := true
TW_OEM_BUILD := true
# Add EXT4 support
TARGET_USERIMAGES_USE_EXT4 := true
# Disable/enable SELinux. Only suggested when you want to enable SELinux support
TWHAVE_SELINUX := true
# Remove MTP support
TW_EXCLUDE_MTP := true
# No screen timeout
TW_NO_SCREEN_TIMEOUT := true
# disables things like sdcard partitioning and may save you some space if TWRP isn't fitting in your recovery patition
BOARD_HAS_NO_REAL_SDCARD := true
# this enables proper handling of /data/media on devices that have this folder for storage (most Honeycomb and devices that originally shipped with ICS like Galaxy Nexus
RECOVERY_SDCARD_ON_DATA := true
# HTC Dumlock for those devices which need it
TW_INCLUDE_DUMLOCK := true
Partition defines
TW_EXTERNAL_STORAGE_MOUNT_POINT
# If your device has recovery as a second ramdisk of boot.img
TW_HAS_NO_RECOVERY_PARTITION := true
# To prevent /boot partition not found error
TW_HAS_NO_BOOT_PARTITION := true
# Removes the 'Reboot bootloader' button
TW_NO_REBOOT_BOOTLOADER := true
# Removes the 'Reboot recovery' button
TW_NO_REBOOT_RECOVERY := true
# Disable the battery percentage for devices where it doesn't work properly
TW_NO_BATT_PERCENT := true
# Same as above, for CPU Temperature
TW_NO_CPU_TEMP := true
# Allows you to map a custom keycode for power button, takes in a number, usually three digits
TW_CUSTOM_POWER_BUTTON := 107
# Always use rm -rf to wipe
TW_ALWAYS_RMRF := true
# Prevent TWRP from unmounting /system
TW_NEVER_UNMOUNT_SYSTEM := true
# Removes USB Storage capability
TW_NO_USB_STORAGE := true
# Inject TWRP as a second ramdisk for Samsung devices, which keep recoveries that way.
TW_INCLUDE_INJECTTWRP := true
TW_INCLUDE_BLOBPACK --
NEED HELP
# Specify a path to the lun file on device
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/class/android_usb/android0/f_mass_storage/lun0/file"
# Not very sure, I guess it allows you to simply pop in the lunfile itself
BOARD_UMS_LUNFILE :=
TW_HAS_DOWNLOAD_MODE -- For Samsung devices
TW_NO_SCREEN_BLANK --
NEED HELP
TW_SDEXT_NO_EXT4 -- Blocks EXT4 FS for SD-EXT partitions
# Forces use of /proc/cpuinfo for determining device id. Look here :
https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/data.cpp#l183-l184
TW_FORCE_CPUINFO_FOR_DEVICE_ID := true
# For older devices. See here :
https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/Android.mk#l383
TW_NO_EXFAT_FUSE := true
# Decryption support for /data
TW_INCLUDE_CRYPTO -- General decryption modules
# On some device, TWRP backup folder name will show 0000000000 bcos cpuinfo has no serial number. Using this flag then it will use ro.product.model as the folder name instead of all 0000000000
TW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID := true
# Set the path to the sysfs entry which controls the brightness
TW_BRIGHTNESS_PATH := /sys/devices/platform/s3c24xx-pwm.0/pwm-backlight.0/backlight/pwm-backlight.0/backlight
# A seconday path for the above
TW_SECONDARY_BRIGHTNESS_PATH :=
# Max brightness to prevent display damage
TW_MAX_BRIGHTNESS := 255
# Default brightness for TWRP
TW_DEFAULT_BRIGHTNESS := 150
# Custom battery readout path, don't use the given path though, it is intended to be used for a full diagnostic.
TW_CUSTOM_BATTERY_PATH := /sys/class/power_supply/battery/batt_attr_text
# CPU temp sysfs path, if it is zero all the time.
TW_CUSTOM_CPU_TEMP_PATH := true
# Remove the ability to encrypt backups with a password
TW_EXCLUDE_ENCRYPTED_BACKUPS := true
# Timezone fixes for some Qcom devices.
TARGET_RECOVERY_QCOM_RTC_FIX
TW_NO_LEGACY_PROPS --
NEED HELP
# Supply a custom init.rc for the recovery
TARGET_RECOVERY_INITRC := device/htc/pico/ramdisk/recovery/init.recovery.rc
# Set the default language, if not english
TW_DEFAULT_LANGUAGE := en-US
# Specify architecture
TARGET_ARCH := arm
# For people who would want to have ToyBox rather than Busybox
TW_USE_TOOLBOX := true
# Remove exFAT formatting binaries
TW_NO_EXFAT := true
# Remove SuperSU and stop TWRP prompts to install it
TW_EXCLUDE_SUPERSU := true
# An awesome way to take screenshots. Back-end improvement, no noticeable user side changes. Screenshots work without it too
TW_INCLUDE_FB2PNG := true
BOARD_USES_BML_OVER_MTD --
NEED HELP
# include Logcat daemon for help in debugging
TWRP_INCLUDE_LOGCAT := true
# See here :
https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/Android.mk#L435
TARGET_RECOVERY_DEVICE_MODULES := true
TARGET_USERIMAGES_USE_F2FS -- Include mkfs.f2fs for formatting partitions as F2FS
# Include a custom hardwarekeyboard.cpp . Can't see the point though.
TWRP_CUSTOM_KEYBOARD := device/lge/hammerhead/recovery/hardwarekeyboard.cpp
# Log touch input
TWRP_EVENT_LOGGING := true
#
@yuw
neg :My experience on MTK tablet, typical is RECOVERY_TOUCHSCREEN_SWAP_XY & RECOVERY_TOUCHSCREEN_FLIP_Y is use is pair as MTK vendor tend to use landscape LCD but a normal portrait Touch Screen !
TW_X_OFFSET -- X-Axis offset for borked displays
TW_Y_OFFSET -- Y-Axis offset for borked displays
# Smartwatch optimisation
TW_ROUND_SCREEN := true
TW_THEME -- New flag, takes in the following : portrait_mdpi, landscape_mdpi, portrait_hdpi,landscape_hdpi,watch_mdpi . It should be caps but when I was compiling a minute ago, it threw me an error and asked to de-caps it. So, see for yourself what works
TW_CUSTOM_THEME -- Use a custom theme like materialised by
@z31s1g
. Give the path to the contents here.
TWRP_NEW_THEME -- Old is gold. Put false to use the old one.
TW_EXTRA_LANGUAGES -- Set to true and enable localisation
TW_MTP_DEVICE -- Specify a custom device name for MTP
TW_TARGET_USES_QCOM_BSP -- Qcom specific enhancements
TARGET_PREBUILT_KERNEL -- Use a prebuilt kernel rather than building from source
TARGET_RECOVERY_PIXEL_FORMAT -- Use RGBA,RGBX,ARGB and whatever, I don't remember, see the main thread for that info.
TARGET_RECOVERY_OVERSCAN_PERCENT -- Defines the padding to leave around the screen edges
BOARD_USE_CUSTOM_RECOVERY_FONT -- Specify a .ttf file to use as default font
BOARD_CUSTOM_GRAPHICS -- include customised graphics backends if 3.0.0-0 broke stuff for you
TARGET_CUSTOM_KERNEL_HEADERS --
NEED HELP
TW_NEW_ION_HEAP --
NEED HELP
Self Explanatory
RECOVERY_TOUCHSCREEN_FLIP_Y
RECOVERY_GRAPHICS_FORCE_USE_LINELENGTH -- Fixes slanty graphics
TW_DISABLE_DOUBLE_BUFFERING --
NEED HELP
TARGET_RECOVERY_FORCE_PIXEL_FORMAT --
NEED HELP FOR POSSIBLE INPUTS
BOARD_HAS_FLIPPED_SCREEN -- For people whose screens were mounted the wrong side across
TW_IGNORE_MAJOR_AXIS_0 --
NEED HELP
TW_IGNORE_MT_POSITION_0 --
NEED HELP
TW_IGNORE_ABS_MT_TRACKING_ID --
NEED HELP
TW_INPUT_BLACKLIST --
NEED HELP
TW_WHITELIST_INPUT --
NEED HELP
TARGET_HW_DISK_ENCRYPTION --
NEED HELP
TW_HAVE_X86_ACCELERATED_PIXELFLINGER -- Improvements for x86 based devices
ARCH_ARM_HAVE_NEON -- Take advantage of ARM-NEON optimisations
TW_DISABLE_TTF:= true
# building of an OEM friendly TWRP. excludes SuperSu, uses Toolbox instead busybox, disables themeing. MORE INFOS TO BE ADDED
TW_OEM_BUILD := true
# Adds EXT4 formatting binaries
TARGET_USERIMAGES_USE_EXT4 := true
# exclude mtp from twrp (disable if you are not able to fix it device/kernel side, safes some space)
TW_EXCLUDE_MTP := true
# screen will stay awake
TW_NO_SCREEN_TIMEOUT := true
# needed on devices without a recovery partition (some devices have recovery included im boot.img)
TW_HAS_NO_RECOVERY_PARTITION := true
# removes the reboot option to boot into boooader, needed e.g. on samsung devices which use Download mode instead
TW_NO_REBOOT_BOOTLOADER := true
# add an option in reboot menu to reboot into Download Mode
TW_HAS_DOWNLOAD_MODE := true
# some devices don't have a temp sensor, disable in such case to stop spamming recovery.log
TW_NO_CPU_TEMP := true
# recursive delete by default instead fotmatting (available optional inside recovery settings too)
TW_ALWAYS_RMRF := true
# system won't be unmounted,
TW_NEVER_UNMOUNT_SYSTEM := true
# don't blank screen (available optional inside recovery settings too)
TW_NO_SCREEN_BLANK := true
# deprecated, use TW_INCLUDE_CRYPTO instead
TW_INCLUDE_JB_CRYPTO := true
# add support for encryption
TW_INCLUDE_CRYPTO := true
# use a custom init.rc in recovery, add the path. Example:
TARGET_RECOVERY_INITRC := device/samsung/p3100/rootdir/init.twrp.rc
# ToyBox (disables busybox?)
TW_USE_TOOLBOX := true
# exclude SuperSu e.g. to save some space or for different other reasons (supersu still included bx default?)
TW_EXCLUDE_SUPERSU := true
# include f2fs support (make sure your kernel supports f2fs!)
TARGET_USERIMAGES_USE_F2FS := true
# device resolution - deprecated, use TW_THEME instead
DEVICE_RESOLUTION :=
# define the theme for your device resolution, note: you can also use smaller/bigger themes because the theme get scaled for your deviceresolution anyway):
# 240x240 280x280 320x320
TW_THEME := watch_mdpi
# 320x480 480x800 480x854 540x960
TW_THEME := portrait_mdpi
# 720x1280 800x1280 1080x1920 1200x1920 1440x2560 1600x2560
TW_THEME := portrait_hdpi
# 800x480 1024x600 1024x768
TW_THEME := landscape_mdpi
# 1280x800 1920x1200 2560x1600
TW_THEME := landscape_hdpi
# auto copy files placed in device/$VENDOR/$DEVICENAME/recovery/root inside recovery ramdisk (e.g. init.recivery*.rc which get removed from recoveryramdisk by default). example:
TARGET_RECOVERY_DEVICE_DIRS += device/samsung/espresso-common
# path to a prebuild kernel (can be used if you are unable to compile a kernel yourself, e.g. if no kernel source available)
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/prebuilt/zImage
# swap x anf y axis for touch
RECOVERY_TOUCHSCREEN_SWAP_XY := true
# flip x axis for touch
RECOVERY_TOUCHSCREEN_FLIP_X := true
# flip y axis for touch,
RECOVERY_TOUCHSCREEN_FLIP_Y := true
Gesendet von meinem LG-H815 mit Tapatalk
---------- Post added at 05:23 PM ---------- Previous post was at 05:19 PM ----------
# don't include default init.recovery.usb.rc, provide your own or use needed defines inside init.recovery.$DEVICE.rc
TW_EXCLUDE_DEFAULT_USB_INIT := true
Gesendet von meinem LG-H815 mit Tapatalk
Thanks sir for the suggestions. I can see I've included the descriptions for most of them already, but I'll be sure to attribute to and add the rest tomorrow. I would be grateful if you could shed some light on the ones I've marked "NEED HELP"
I've done those stuff offline from your gist[emoji14]have seen this thread after that but maybe you like the way i showed the defines as it's setup the way you would do in your BoardConfig.mk.
Haven't done those flags i am not sure about myself, maybe
@_that
or
@Dees_Troy
can bring light to some of them.
Gesendet von meinem LG-H815 mit Tapatalk
This thread is a great idea.
Especially with the update to twrp 3.0 with new flags.
I've been lucky enough to be able to guess/puzzle out/grab from other device trees enough to build and use the recovery on my personal devices, but information like this is very helpful to have consolidated.
Thanks for sharing.
I've done those stuff offline from your gist[emoji14]have seen this thread after that but maybe you like the way i showed the defines as it's setup the way you would do in your BoardConfig.mk.
Haven't done those flags i am not sure about myself, maybe
@_that
or
@Dees_Troy
can bring light to some of them.
Gesendet von meinem LG-H815 mit Tapatalk
TW_CUSTOM_THEME := /path/to/theme/
this one is used to replace the stocktheme with a different one (like material-play)
the theme will be directly in ramdisk
TW_INCLUDE_INJECTTWRP := true — adds ability to inject TWRP into some Samsung boot images for Samsung devices that have recovery as a second ramdisk in the boot image
the second flag is quotes by dees_troy!
TW_NEW_ION_HEAP
this has sonething to do with 3.10 kernels and a different naming in /include/linux/ion.h ... like a switch between old heap_mask and new heap_id_mask
Sent from my Xperia T using XDA Free mobile app
Nice initiative with this thread, this has been oh say 2 years too long in the making haha.
TARGET_RECOVERY_FORCE_PIXEL_FORMAT
Not sure but I would imagine it overrides what TWRP detects nor do I see the difference between it and TARGET_RECOVERY_PIXEL_FORMAT. The only possible varible right now is RGB_565. BGRA_8888, RGBA_8888 and RGBX_8888 are not yet implemented.
TW_INPUT_BLACKLIST
Black list input devices that interfere with touch. For multiple input devices the delimiter is \x0a. You would basically build a special TWRP with TWRP_EVENT_LOGGING := true. Put it on the device and read the more verbose log to see what inputs you want to blacklist.
EDIT: Ah here is a copy of the wording I had in one of my xda posts about the subject and the commit link
https://github.com/omnirom/android_bootable_recovery/commit/5742a40b87dfdc26df3bd9fe94197ae414ece546
Usage:
TW_INPUT_BLACKLIST := accelerometer
TW_INPUT_BLACKLIST := "accelerometer\x0agyroscope"
This can be used to fix touch input on devices where an input
device is breaking touch processing in TWRP.
We are using new line chars to separate multiple devices and in
the make file you specify the new line character with \x0a which
is the hex code in ASCII for a new line.
The new line character might be a bit of a pain to use as a
delimeter, but it is highly unlikely that an OEM will ever name
an input device with a new line character in the name.
Change-Id: I255136b7a686909a23e649918c661843153c2853
and here is an example from my BoardConfig
TW_INPUT_BLACKLIST := "accelerometer\x0admard06\x0alis3dh_acc\x0alis3de_acc"
On a side note is there a link somewhere to fixing graphics issues induced in 3.0? I see a lot of talk about it but nothing substantial.
On a side note is there a link somewhere to fixing graphics issues induced in 3.0? I see a lot of talk about it but nothing substantial.
Every version has new flags introduced & also flags deprecated...
TARGET_USES_LOGD
=>
Source
TW_SCREEN_BLANK_ON_BOOT
( Deprecated on android-6.0 =>
Source
, on some legacy devices,
TWRP
will not boot without this flag)
There are other build flags which you can locate by scanning the Android.mk files in the recovery source. Most of the other build flags are not often used and thus I won't document them all here.
Source
Use
the_silver_searcher
, its extremely fast ! :good:
cd ~/cm/bootable
ag -ia "[URL="https://gerrit.omnirom.org/#/c/16610/"]TW_INCLUDE_JPEG[/URL]" recovery/
recovery/minuitwrp/resources.cpp
34:#ifdef TW_INCLUDE_JPEG
256:#ifdef TW_INCLUDE_JPEG
361:#ifdef TW_INCLUDE_JPEG
367:#ifdef TW_INCLUDE_JPEG
recovery/minuitwrp/Android.mk
61:ifneq ($(TW_INCLUDE_JPEG),)
64: LOCAL_CFLAGS += -DTW_INCLUDE_JPEG
176:ifneq ($(TW_INCLUDE_JPEG),)
recovery/prebuilt/Android.mk
126:ifneq ($(TW_INCLUDE_JPEG),)
ag -ia "[COLOR="Blue"]TW_FLASH_FROM_STORAGE[/COLOR]" recovery/
recovery/Android.mk
262:#ifeq ($(TW_FLASH_FROM_STORAGE), true) [COLOR="Blue"]Making this the default behavior[/COLOR]
263: LOCAL_CFLAGS += -DTW_FLASH_FROM_STORAGE
As the code says, its already the default therefore you don't need to specify it again on BoardConfig.mk
ag -ia "[URL="https://gerrit.omnirom.org/#/c/14099/"]TW_INCLUDE_NTFS_3G[/URL]" recovery/
recovery/Android.mk
440:ifeq ($(TW_INCLUDE_NTFS_3G),true)
recovery/prebuilt/Android.mk
201:ifeq ($(TW_INCLUDE_NTFS_3G),true)
At the
omnirom
gerrit, you'll find all commits though you gotta search for it or try
this
or
this
for
TWRP
related
ag -ia "[COLOR="blue"]TW_BOARD_CUSTOM_GRAPHICS[/COLOR]" recovery/
recovery/minuitwrp/Android.mk
14:ifneq ($(TW_BOARD_CUSTOM_GRAPHICS),)
16: $(warning * TW_BOARD_CUSTOM_GRAPHICS support has been deprecated in TWRP. *)
ag -ia "[COLOR="Blue"]TW_DISABLE_TTF[/COLOR]" recovery/
recovery/minuitwrp/Android.mk
165:ifeq ($(TW_DISABLE_TTF), true)
167: $(warning * TW_DISABLE_TTF support has been deprecated in TWRP. *)
recovery/prebuilt/Android.mk
192:ifneq ($(TW_DISABLE_TTF), true)
__bionic_open_tzdata: couldn't find any tzdata when looking for localtime!
__bionic_open_tzdata: couldn't find any tzdata when looking for GMT!
__bionic_open_tzdata: couldn't find any tzdata when looking for posixr!
Fix tzdata on recovery.log =>
Source
Typically, when you have already downloaded the base repo, re-syncing it will only take a few seconds
Menu 2
Part of the original
mkvendor.sh
script is adapted for the extraction of boot or recovery.img which also does the git initialization. If the ramdisk can be unpack then the
recovery.fstab
will be copied to the device tree folder, if not then it will create a basic
MTK
recovery.fstab,
boot.mk
& also
BOARD_CUSTOM_BOOTIMG_MK
. If you're not building for
MTK
then remove that line from BoardConfig.mk
You will need to add/ remove
TWRP
flags accordingly & manual edit on the
TARGET_CPU_VARIANT
either cortex-a7 or cortex-a9 for older
MTK
, refer to your device spec. Possible values are cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a15, krait, scorpion. Use generic for devices that do not have a CPU similar to any of the supported cpu variants
You will need to manual edit on the recovery.fstab to suit your device or
TWRP-ify
the extracted stock recovery.fstab
Menu 3
When you have build earlier, subsequent build will only take few minutes bcos of
CCACHE
... :good:
Menu 4
Done, test TWRP on your device to make sure it is working properly if not then add or remove flags accordingly & use
Menu 3
to build again
Menu 5
Choose either
Option 1
or 2, Option 2 is recommended & it won't take long if you are using
Part-Source
.
Menu 6
bash script
itself is self-explanatory.
Thanks
to the
OP
, he has offer to take over the maintenance of this script so hit your
Thanks
button to him... :good: If you found any error/ bug or have any new ideas/ features for this script then
pm
the
OP
or do a
git pull
request... :good:
Above is the detail explanation on the script
GUI
front-end, here i'll explained what the script actually does.
Menu 1
This menu will create a
local_manifest.xml
to remove unwanted projects based on your selection. When select
Full-Source
, it will also create l
ocal_manifest.xml
to remove existing recovery & replace it with TWRP based on your selection.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="android_bootable_recovery" />
<project path="bootable/recovery" name="omnirom/android_bootable_recovery" revision="[COLOR="Blue"]android-6.0[/COLOR]" />
</manifest>
Part-Source
It is normal that OmniROM & CM will consistently add new projects to their repo when they introduce new features or functions to it. The beauty of this
Part-Source
is that even when projects grows, this script will
grep -v
only the needed projects for building
TWRP
on any base repo.
This
Part-Source
is the extreme minimal for building
TWRP
therefore some of the additional projects are needed when you use particular
TWRP
flags. As of today ( March 2016 ), it will build a fully working TWRP with only
44
projects on both OmniROM 4.4 & CM 11 base repo. In the future,
Teamwin
may also add a new feature or function then you will also need to add additional projects to it too or OP will update it based on your feedback. Refer to
compile.log
for details.
# Optional => TARGET_USERIMAGES_USE_F2FS := true
[COLOR="Red"]#[/COLOR]grep -v f2fs-tools ~/x > ~/x.tmp;mv ~/x.tmp ~/x
If you use
TARGET_USERIMAGES_USE_F2FS := true
then remove the remark
#
# Optional => TW_INCLUDE_NTFS_3G := true
[COLOR="Red"]#[/COLOR]grep -v external/ntfs-3g ~/x > ~/x.tmp;mv ~/x.tmp ~/x
if you use
TW_INCLUDE_NTFS_3G := true
then remove the remark
#
# Optional => TW_USE_TOOLBOX := true
[COLOR="red"][B]#[/B][/COLOR]grep -v external/toybox ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="Red"]#[/COLOR]grep -v external/mksh ~/x > ~/x.tmp;mv ~/x.tmp ~/x
If you use
TW_USE_TOOLBOX := true
then remove the remark
#
.
toybox
available on android-6.0/ cm-13.0 only, don't have such projects on android-4.4 but it'll work, refer to the end for more info.
# un-remark the below required for x64
[COLOR="Red"]#[/COLOR]grep -v linux-x86/aarch64/aarch64-linux-android-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/aarch64/aarch64-linux-android-4.9 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
TARGET_CPU_ABI2 := armeabi-v7a
TARGET_ARCH_VARIANT := armv8-a
TARGET_CPU_VARIANT := generic
TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv7-a-neon
TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := cortex-a7
If you are building
x64
TWRP then remove the remark
#
& update
BoardConfig.mk
accordingly. Take note, not available on android-4.4/ cm-11.0 base repo, use later base repo.
# un-remark the below required for kernel compiling if not using TARGET_PREBUILT_KERNEL
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.6 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.7 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
if you are building your own kernel then remove the remark
#
# Optional for x86 SoC
[COLOR="Red"]#[/COLOR]grep -v linux-x86/x86/i686-linux-android-4.7 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/x86/x86_64-linux-android-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/x86/x86_64-linux-android-4.9 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
TARGET_ARCH := [COLOR="blue"]x86[/COLOR]
TARGET_CPU_ABI := armeabi
TARGET_ARCH_VARIANT := [COLOR="blue"]x86[/COLOR]
TARGET_CPU_VARIANT := [COLOR="blue"]x86[/COLOR]
if you are building for
Intel
SoC then remove the remark
#
& edit the
BoardConfig.mk
accordingly
This script has been tested & it works on any base repo from OmniROM android-4.4, 5.0, 5.1 & 6.0 & Cyanogenmod cm-11.0, cm-12.0, cm12.1 & cm13.0 using Full-Source or Part-Source but why use Full-Source to build TWRP when Part-Source works, most importantly, you are not building OmniROM or Cyanogenmod but
TWRP
....

Using android-4.4/ cm-11.0 base repo has its advantage, compiled
TWRP
size will be smaller & it can build all version.
If you use android-6.0/ cm-13.0 then obviously you can only build
TWRP
android-6.0 only, just edit the line
62, 63
for OmniROM or
72, 73
for
CM
accordingly. Building TWRP android-
4.4
on cm-13.0 or on OmniROM android-6.0 will result in a build error ! Later base repo won't build TWRP older version !
Above syncing cm-13.0 & as you can see, it is also using source from cm-10.1, 10.2 & 11. Syncing all to the same ~/omni or ~/cm folder will do.
Sometimes on certain devices, OmniROM android-4.4 or Cyanogenmod cm-11.0 base repo just won't boot then you can try by editing this line to
android-5.0
or
cm-12.0
& updating it will only take a very short time if you use
Part-Source
.
Menu 2
Device tree
This script will create a barebone minimal device tree for building
TWRP
. Anything less will result in a build error. It will create five files which is just sufficient to build a fully working
TWRP
using prebuilt kernel. It will build kernels too, just update the correct
kernel config
to BoardConfig.mk & remove the remark
#
needed projects for building kernels. However, i don't see the needs to build the same kernel with every TWRP new build, it will take a longer time to build, most importantly, you are not building a ROM.
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/cm_[COLOR="blue"]device name that you have key-in[/COLOR].mk
AndroidProduct.mk
TARGET_CPU_ABI := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_VARIANT := [COLOR="blue"]cortex-a9[/COLOR] [COLOR="Red"]<= You only need to change this to suit your device[/COLOR]
BOARD_RECOVERYIMAGE_PARTITION_SIZE := [COLOR="Red"]0x105c0000[/COLOR] [COLOR="red"]<= You need to update this so that build will error out when the size exceed your recovery partition size[/COLOR]
BOARD_FLASH_BLOCK_SIZE := 131072
TARGET_PREBUILT_KERNEL := device/TD2/9300/kernel
BOARD_MKBOOTIMG_ARGS := --base 10000000 --pagesize 2048 --kernel_offset 00008000 --ramdisk_offset 01000000 --tags_offset 00000100
[COLOR="Blue"]#MTK common twrp flags[/COLOR] [COLOR="Red"]<= You only need to change the below flags to suit your device[/COLOR]
TW_NO_EXFAT := true
TWHAVE_SELINUX := true
TW_DISABLE_TTF := true [COLOR="red"]<= Will error out on TWRP android-6.0[/COLOR]
[COLOR="red"]#[/COLOR]TW_USE_TOOLBOX := true [COLOR="red"]<= You'll need extra projects for this flag, edit the script accordingly[/COLOR]
TW_NO_EXFAT_FUSE := true
TW_THEME := [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/gui/Android.mk#l96-L100"]portrait_mdpi[/URL]
[COLOR="red"]#[/COLOR]RECOVERY_SDCARD_ON_DATA := true [COLOR="red"]<= For [URL="https://twrp.me/faq/datamedia.html"]data/media[/URL] device[/COLOR]
TW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID := true
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/devices/platform/mt_usb/gadget/lun%d/file"
BoardConfig.mk
# Inherit device configuration
$(call inherit-product, device/[COLOR="blue"]TD2[/COLOR]/[COLOR="blue"]9300[/COLOR]/device_[COLOR="blue"]9300[/COLOR].mk)
## Device identifier. This must come after all inclusions
PRODUCT_DEVICE := [COLOR="blue"]9300[/COLOR]
PRODUCT_NAME := cm_[COLOR="blue"]9300[/COLOR]
PRODUCT_BRAND := [COLOR="blue"]TD2[/COLOR]
PRODUCT_MODEL := [COLOR="blue"]9300[/COLOR]
PRODUCT_MANUFACTURER := TD2
$(call inherit-product, build/target/product/[URL="https://github.com/CyanogenMod/android_build/blob/cm-11.0/target/product/full_base_telephony.mk"]full_base_telephony.mk[/URL])
# Time Zone data [COLOR="red"]<= This have been disable as some device will not boot, to enable it just remove the remark [B]#[/B] below[/COLOR]
[COLOR="red"]#[/COLOR]PRODUCT_COPY_FILES += \
[COLOR="Red"]#[/COLOR]bionic/libc/zoneinfo/tzdata:recovery/root/system/usr/share/zoneinfo/tzdata
PRODUCT_BUILD_PROP_OVERRIDES += \
PRODUCT_MODEL="i9300" \ [COLOR="Red"]<= This is where Menu 2 will get the ro.product.device & ro.product.model info[/COLOR]
TARGET_DEVICE="bird77_a_cu_ics2"
PRODUCT_NAME := full_[COLOR="Blue"]9300[/COLOR]
PRODUCT_DEVICE := [COLOR="blue"]9300[/COLOR]
device_(device-name).mk
&
cm.mk
will be auto-created based on what you have key-in for the
vendor
&
device
name at
Menu 2
For building recovery, you don't need to use
full.mk
, using it will result in need of extra projects on the
Part-Source
& it will also copy the extra
fstab.goldfish
&
ueventd.goldfish.rc
to the root of the ramdisk
/boot emmc /dev/bootimg
/recovery emmc /dev/recovery
/system ext4 /dev/block/mmcblk0p3
/cache ext4 /dev/block/mmcblk0p4
/data ext4 /dev/block/mmcblk0p5
/emmc vfat /dev/block/mmcblk0p6 flags=display="Phone Storage";settingsstorage
/sdcard vfat /dev/block/mmcblk1p1 flags=display="SD Card";storage;removable
/sd-ext auto /dev/block/mmcblk1p2
/nvram emmc /dev/nvram flags=display="Nvram";backup=1
/uboot emmc /dev/uboot flags=display="Uboot";backup=1
#/boot emmc /dev/block/platform/mtk-msdc.0/by-name/boot flags=display="Boot";backup=1
#/recovery emmc /dev/block/platform/mtk-msdc.0/by-name/recovery flags=display="Recovery";backup=1
#/system ext4 /dev/block/platform/mtk-msdc.0/by-name/system flags=display="System";backup=1
#/cache ext4 /dev/block/platform/mtk-msdc.0/by-name/cache flags=display="Cache"
#/data ext4 /dev/block/platform/mtk-msdc.0/by-name/userdata flags=encryptable=/dev/block/platform/mtk-msdc.0/by-name/metadata
#/nvram emmc /dev/block/platform/mtk-msdc.0/by-name/nvram flags=display="Nvram";backup=1;flashimg=1
#/external_sd auto /dev/block/mmcblk1p1 flags=display="External SDcard";storage;wipeingui;removable;backup=0
#/usbotg auto /dev/block/sda1 flags=display="Usb-Otg";storage;removable;backup=0
#/boot mtd boot
#/recovery mtd recovery
#/cache yaffs2 cache
#/data yaffs2 userdata
#/misc mtd misc
#/system yaffs2 system
#/sdcard vfat /dev/block/mmcblk0p1
#/sd-ext ext4 /dev/block/mmcblk0p2
recovery.fstab
- Edit or delete whatever that is not relevant to your device. Use
osm0sis AIK
to unpack your stock recovery.img &
TWRP-ify
the recovery.fstab... :good:
# Sec Class: Intel Confidential (IC)
# Android fstab file.
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID068 /system ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID069 /data ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID070 /cache ext4 defaults defaults
/dev/block/mmcblk1p1 /sdcard vfat defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID076 /nvm_fs_partition ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID074 /misc emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID071 /boot emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID119 /recovery emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID120 /recoverym emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID001 /mobilevisor emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID013 /splash_screen emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID115 /mvconfig emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID118 /secvm emmc defaults defaults
Most latest Android devices are using fstab version 2 AKA
fstab 2
while
TWRP
is using
fstab 1
. Eg. Above is my
Intel X3
stock recovery.fstab
# mount point fstype device [device2]
/boot emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID071
/recovery emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID119 flags=display=recovery;backup=1
/imei emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID022 flags=display=imei;backup=1
/mobilevisor emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID001 flags=display=mobilevisor;backup=1
/mvconfig emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID115 flags=display=mvconfig;backup=1
/secvm emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID118 flags=display=secvm;backup=1
/system ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID068
/data ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID069
/cache ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID070
/nvm_fs_partition ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID076
/external_sd vfat /dev/block/mmcblk1p1 flags=display="Micro SDCard";storage;removable
/usbotg auto /dev/block/sda1 flags=display=USB-OTG;storage;removable
My
TWRP-ify
recovery.fstab. Typically, for
ext4
partition, you don't need to specify
flags=display=
&
backup=1
, it will be taken care of by
TWRP
, for more info regarding
fstab flags
then refer to Main Thread for
*RECOVERY.FSTAB*
... :good:
osm0sis
's unpackbootimg also support
--dt <filename>
:good:
Some devices require
additional info
for factory update.zip then add it accordingly to the device tree, typically is your
device_(device-name).mk
. Look at other device tree
here
&
here
&
here
for reference. On
CM
base repo, you can also use
mkvendor.sh
... :good: However, you will need to manually edit certain files as no
DEV
has been updating it, currently it will result in a build error even when using Full-Source !
Do take note that even an
extra space
on some of the lines at
BoardConfig.mk
will result in a build error !
Menu 3
Below are the commands to build TWRP, thats it !
export LC_ALL=C
source build/envsetup.sh
lunch [COLOR="blue"]omni[/COLOR]_S939-eng [COLOR="blue"]<= S939 is the device name[/COLOR]
[COLOR="Blue"]OR[/COLOR]
lunch [COLOR="blue"]cm[/COLOR]_S939-eng
make -j4 recoveryimage
Menu 4
Below command generically will work on most Android devices.
Updates
: Has updated this menu to support this, just key-in
/path-to-your-device-recovery-partition
adb push [COLOR="blue"]$OUT[/COLOR]/recovery.img /data/local/tmp
adb shell su -c "dd if=/data/local/tmp/recovery.img of=/[COLOR="blue"]path-to-your-device-recovery-partition[/COLOR]"
To use the
$OUT
path, you must first source it then lunch your device name, refer to previous
Menu 3
for info.
Menu 5
Option 1 is
make clean
Option 2 is wipe the whole repo base folder except the hidden
.repo
folder. As mention on the script GUI front-end, after that, use
Menu 1
will have all the files extracted out.
Menu 6
This menu is using
curl
to create github repo.
It is for you to publish your device tree either for diagnostic & debugging when you ask for help. It is also for you to share a working build so that others can refer to it when they make a build of their own or git clone yours & build it themselves.
Many newbies make mistake by using other
DEV
's device tree which is normally meant for building ROMs, using it to build
TWRP
therefore will result in alot of build errors !
Above script can also be use to build
TWRP
for any Android devices that uses standard Android header,
except for
Menu 4
which is specifically for
MTK
devices only. Just edit the script to add support for your device... :good:
Updated support for other devices
This project was actually started way back at
2013
& this is the main reason why
TWRP
doesn't build is bcos of the tedious, confusing & wrong
Build Environment
setup, it is all so different on so many different linux distros & OSes version, i went on to developed
Easy Magic TWRP
....

Now i use Intel device & this script did build a working
TWRP
for it too.... :laugh:
That's why i strongly recommends
BBQLinux
for beginners,
Thanks
to
RD
codeworkx
, i can guarantee that any
Build Error
is not cause by wrong
BE
setup as its already built-in on
BBQLinux
... :good:
The other reason
TWRP
doesn't boot is bcos of wrong
mkbootimg
repack arguments,
Thanks
to
RD
osm0sis
for his awesome
unpackbootimg
... :good:
Since many newbies are having problems with building
TWRP
& flooding the
TWRP
thread
here
This guide isn't going to be a step-by-step, word-for-word type of guide. If you're not familiar with basic Linux commands and/or building in AOSP then you probably won't be able to do this.
Which is actually meant for intermediate users, i've offered to share this script when
OP
decided to open up a new thread here for TWRP flags.... :good:
Credits Updates
Hacker432
for testing & feedbacks on this script, now it uses the
ATC
folder so that it'll support other languages other than English & TWRP will boot now when build on cm-12.1 base repo... :good:
OP
for giving this script a glamour name
ATC
aka
AIO-TWRP-Compiler
... :laugh: :highfive: :good:
My TWRP doesn't boot
Try unpack/ repack your stock
3e
recovery.img with
AIK
, push it to your device & if it doesn't boot then obviously your device is not using standard Android header & so does this script will not build a bootable TWRP. Try
google
your device info on how they did it, Eg.
Sony
devices uses
BOARD_CUSTOM_BOOTIMG_MK
for repacking
boot & recovery.img
& update it accordingly to your BoardConfig.mk
adb shell cat /proc/last_kmsg
[COLOR="Blue"]OR[/COLOR]
adb shell cat /proc/last_kmsg > kmsg.txt
[U][COLOR="blue"]On Android-6.0 Marshmallow[/COLOR][/U]
adb shell cat /sys/fs/pstore/console-ramoops
[COLOR="blue"]OR[/COLOR]
adb shell cat /sys/fs/pstore/console-ramoops > kmsg.txt
Source
Extreme minimal, TWRP require
this
only one flag
TW_THEME :=
to build or it will error out. You will also need other flags as well, refer to the
OP
. Some devices won't boot when certain
TWRP
flag is used or not used bcos its not compatible with your device kernel ! Most legacy device doesn't support
TTF
&
TWRP
won't boot so you have to build with TWRP android-
5.1
with
TW_DISABLE_TTF := true
flag
[URL="https://github.com/TeamWin/android_device_kazam_thunder_q45/blob/cm-10.2/BoardConfig.mk#l49"]TW_NO_EXFAT := true[/URL] [COLOR="Red"]<= To disable exfat[/COLOR]
[URL="https://github.com/TeamWin/android_device_kazam_tornado_348/blob/android-4.4/BoardConfig.mk#l50"]TW_NO_EXFAT_FUSE := true[/URL] [COLOR="Red"]<= To disable exfat[/COLOR]
[URL="https://github.com/carliv/device_elephone_p6000/blob/cm-11.0/BoardConfig.mk#l110"]TW_USE_TOOLBOX := true[/URL] [COLOR="red"]<= Using this flag will use toolbox instead of busybox[/COLOR]
Above are some of the flags that can cause TWRP not to boot up. If you are using
Part-Source
then you need to add additional projects to support these flags as most of them are disabled on the script. Just remove the remarks
#
from the script for that particular projects. More detail info refer to above post #11
Part-Source
.
Refer to the most bottom
Bug Report
on how to obtain
recovery.log
, without it nobody is able to help you.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l122-l130"]TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888[/URL]
TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
TARGET_RECOVERY_PIXEL_FORMAT := BGRA_8888
The other reason it doesn't boot is that it actually does
boot
up but the screen is blank ! Try
adb shell
& it should work on this scenario.
Try different pixel format one at a time, one of them should work.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l114-l116"]TARGET_RECOVERY_FORCE_PIXEL_FORMAT := RGB_565[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l79"]RECOVERY_GRAPHICS_FORCE_USE_LINELENGTH := true[/URL]
[URL="https://gerrit.omnirom.org/#/c/13948/"]TW_DISABLE_DOUBLE_BUFFERING := true[/URL]
When not setting any pixel format, the default is
RGB565
& it should work on most Android devices. You can also try the above when non of them works.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#L14-L19"]TW_BOARD_CUSTOM_GRAPHICS[/URL]
If your existing device tree uses this & all the above doesn't work then drop by at
TWRP
IRC
channel to get further help.
Source
Miscellaneous Tips
As mentioned many times, most of the time build error is bcos of wrong
BE
setup, use
BBQLinux
& you'll get over it. If you have already build on other distro then refer to
here
on how to use this script or migrate the source code
.repo
to
BBQLinux
.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/variables.h#l173"]TARGET_USE_CUSTOM_LUN_FILE_PATH[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l828"]TW_BRIGHTNESS_PATH[/URL] [COLOR="blue"]<= If not define, TWRP will look for it [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l840-l841"]here[/URL][/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l855"]TW_SECONDARY_BRIGHTNESS_PATH[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l1076"]TW_MAX_BRIGHTNESS[/URL] [COLOR="blue"]<= If not define, TWRP will [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l56-l58"]set it[/URL][/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l967"]TW_CUSTOM_BATTERY_PATH[/URL] [COLOR="Blue"]<= If not define, TWRP will use [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l972"]this[/URL] or [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l986"]this[/URL] [/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l937"]TW_CUSTOM_CPU_TEMP_PATH[/URL] [COLOR="blue"]<= if not define, TWRP will use [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l942"]this[/URL][/COLOR]
TWRP
has everything specified to standard Android path unless when it doesn't work then you'll need to find that out yourself. Do take note that some device doesn't support certain feature such as CPU temperature, battery level, mount USB storage & etc then refer to the
OP
for flags to disable it.
adb shell
echo 0 > /sys/devices/platform/i2c-gpio.24/i2c-24/24-002c/backlight/lcd-backlight/brightness
echo 255 > /sys/devices/platform/i2c-gpio.24/i2c-24/24-002c/backlight/lcd-backlight/brightness
If brightness doesn't work, look for
lcd-backlight/brightness
, Eg. above command should be able to change the level of brightness if that is the correct path as indicated at
myAndroid.txt
.
Sync corruption
git
&
repo
is like a
Super Intelligent Source Code Auto-Resume Downloader
when working together . . . :good:
You can stop it at any time, restart it back & it will auto-resume.
cm
repo & source code is located at ~/cm/
.repo
,
omni
at ~/omni/
.repo
it is a hidden folder & to view
hidden folder
via File Manager, you need to press
Ctrl
+
h
Sometimes you have corruption then
repo sync
wouldn't work & normally you just need to delete
manifests
,
manifests.git
,
manifests.xml
with a
repo init
&
repo sync
then you'll be back to normal.
If still this doesn't solve the problem then delete everything
EXCEPT
the folder
project-objects
&
projects
, both of this is the actual source code folder.
After this a
repo init
then
repo sync
& everything will be back to normal, i
guarantee
, done this many times, no worries . . . :laugh:
Sometimes when you have severe data corruption, above technique will not work then manually cd ~/cm or ~/omni then repo init then repo sync & see what repo & git has to say then follow the on-screen instructions to remove the corrupted projects.
And finally all corrupted projects has been removed, subsequent
repo sync
& all files will be auto-extracted out.
Corrupted .repo folder
i've make a back up of my
.repo
folder using
tar.gz
compression years ago & when extracting out, normally will end with data corruptions except if you use
lrzip
... :good: You will need to manually remove all the text files such as
hooks
,
pre-auto-gc
&
commit-msg
which is supposed to be a symlink files.
You will need to manually delete all the
pre-auto-gc.txt
file. You might need to
repo sync --force-sync
many times to overwrite all the corrupted projects & after that, you won't be getting any of these error messages again.
Syncing work tree error
- Doesn't check out all files
This operation must be run in a work tree
Zip & attach the ~/AIO-TWRP-Compiler/
compile.log
to your post when replying.
Refer to
here
on how to submit a proper
TWRP
bug report . . . :good:
How to obtain recovery log
adb pull /tmp/recovery.log -> Attach to your post
At
TWRP
->
BackUp
-> After
Backup
go to
Advanced
->
Copy Log to SDCard
Typically you will find the
recovery.log
at
Typical Internal SdCard
/emmc/TWRP/BACKUPS/ [
Your Device Name
] / [
Backup date
] [
ro.mediatek.version.release
]
/data/media
/data/media/0
Typical External SdCard
/sdcard/TWRP/BACKUPS/ [
Your Device Name
] / [
Backup date
] [
ro.mediatek.version.release
]
Attach it to your post.
At
TWRP
console (Square button at button) -> You can view the log
If
TWRP
crash when executing certain menu/ function/ feature then you can use My Master Shifu
_that
gdb
technique for debugging & submit the back trace to
Teamwin
so that they can fix it... :good:
Try
IRC
channel to get help directly, prepare all required info such as recovery.log, compile.log &
android log
, refer to
here
for the best timing . . .
TWRP FAQ
Thanks
bro... :highfive: The script initially includes
BE
setup for Ubuntu that includes setting up of Python, Java, Make, Git, build packages, adb rules & etc, now its half the size bcos we don't need to do all that on
BBQLinux
...

It has went thru alot of revision, i lost track, one has
PhilZ Touch
on it, one revision will detect the device info such as graphics resolution, emmc or /data/media device & etc, you can actually do wonders with adb shell, automated alot of stuff for BoardConfig.mk, all in all, this script has about 4 years of work in it...
Thanks bro... :highfive: The script initially includes BE setup for Ubuntu that includes setting up of Python, Java, Make, Git, build packages, adb rules & etc, now its half the size bcos we don't need to do all that on BBQLinux...

It has went thru alot of revision, i lost track, one has PhilZ Touch on it, one revision will detect the device info such as graphics resolution, emmc or /data/media device & etc, you can actually do wonders with adb shell, automated alot of stuff for BoardConfig.mk, all in all, this script has about 4 years of work in it...
4 YEARS!!!!
@Dees_Troy
,
@bigbiff
,
@_that
this guy deserves a medal! And about the BE Setup, my good friend
@thewisenerd
had made an Android compiler which included a rather fancy dependencies check in a python program. I'll include it into
AIO-TWRP-COMPILER
as soon as I finish my school work for the week
Haha, they are all my Master Shifu's & they all have more experience than me on TWRP... :laugh: You are most welcome to add-in new features to it... :good:
Experience?? They're encyclopedias on TWRP. But it's worthless if every humbug on the planet wants to compile it and doesn't even know what "ls -R " is supposed to do

You're being a great help to everyone. I'll try and get them to try this when I can make it compatible for people who have already downloaded the source
mkdir ~/omni
cp -[COLOR="Blue"]R[/COLOR]f /path-to-your-existing-omnirom-folder/.repo ~/omni
[COLOR="blue"]OR[/COLOR]
mkdir ~/cm
cp -[COLOR="blue"]R[/COLOR]f /path-to-your-existing-cm-folder/.repo ~/cm
Remark or delete
these lines
& it'll work...
Updates - Migrating source code .repo to BBQLinux
So far my experience is that only
lrzip
is able to compress & extract source code
.repo
folder without data corruption... :good: Just open Ubuntu
Nautilus
File Manager & delete everything on your
cm
or
omnirom
except the hidden folder
.repo
This hidden
.repo
folder is where the actual source code are, zipping it will be enough for migration, a
repo init
&
repo sync
will have all the files extracted out on
BBQLinux
...
sudo apt-get install lrzip
cd /path-to-your-existing-[COLOR="Blue"]omnirom[/COLOR]-or-[COLOR="blue"]cm[/COLOR]-folder
lrztar -l .repo [COLOR="Blue"]<= Will take 10 to 20 minutes depending on your PC CPU, RAM & HDD[/COLOR]
[COLOR="blue"][U]To unzip it[/U][/COLOR]
copy [COLOR="Blue"].repo.tar.lrz[/COLOR] to [COLOR="Blue"]~/omni[/COLOR] or [COLOR="blue"]~/cm[/COLOR] folder accordingly
cd [COLOR="Blue"]~/omni[/COLOR] or [COLOR="blue"]~/cm[/COLOR]
lrzuntar .repo.tar.lrz
Experience?? They're encyclopedias on TWRP. But it's worthless if every humbug on the planet wants to compile it and doesn't even know what "ls -R " is supposed to do[emoji14]You're being a great help to everyone. I'll try and get them to try this when I can make it compatible for people who have already downloaded the source
I don't know what it does but I compiled twrp(2.8.7.0 because twrp 3 doesn't want to work with my phone)In one month of work xD
mkdir ~/omni
cp -rf /path-to-your-existing-omnirom-repo/.repo ~/omni
[COLOR="blue"]OR[/COLOR]
mkdir ~/cm
cp -rf /path-to-your-existing-cm-repo/.repo ~/cm
Remark or delete
these lines
& it'll work...
I use Ubuntu and I had several issues
Luckily I can compile without problems now
Thanks for your work
Inviato dal mio HUAWEI Y550-L03 utilizzando Tapatalk
Check out
this
script by
@yuweng
to auto(matically|magically) compile TWRP for your device!
Lately the TWRP Compiling
guide
, has been seeing a lot of newbies who were struggling with TWRP flags to ensure they compile a usable build. So without delay, here we go!
If no input has been suggested, assume true/false
CREDITS :
@Android-Andi
for some explanations
here
@SdtBarbarossa
for some more explanations
here
@yuweng
for HUGE amount of explanations provided through PM!
# Automatically implies these:
BOARD_HAS_NO_REAL_SDCARD := true
TW_USE_TOOLBOX := true
TW_EXCLUDE_SUPERSU := true
TW_EXCLUDE_MTP := true
TW_OEM_BUILD := true
# Add EXT4 support
TARGET_USERIMAGES_USE_EXT4 := true
# Disable/enable SELinux. Only suggested when you want to enable SELinux support
TWHAVE_SELINUX := true
# Remove MTP support
TW_EXCLUDE_MTP := true
# No screen timeout
TW_NO_SCREEN_TIMEOUT := true
# disables things like sdcard partitioning and may save you some space if TWRP isn't fitting in your recovery patition
BOARD_HAS_NO_REAL_SDCARD := true
# this enables proper handling of /data/media on devices that have this folder for storage (most Honeycomb and devices that originally shipped with ICS like Galaxy Nexus
RECOVERY_SDCARD_ON_DATA := true
# HTC Dumlock for those devices which need it
TW_INCLUDE_DUMLOCK := true
Partition defines
TW_EXTERNAL_STORAGE_MOUNT_POINT
# If your device has recovery as a second ramdisk of boot.img
TW_HAS_NO_RECOVERY_PARTITION := true
# To prevent /boot partition not found error
TW_HAS_NO_BOOT_PARTITION := true
# Removes the 'Reboot bootloader' button
TW_NO_REBOOT_BOOTLOADER := true
# Removes the 'Reboot recovery' button
TW_NO_REBOOT_RECOVERY := true
# Disable the battery percentage for devices where it doesn't work properly
TW_NO_BATT_PERCENT := true
# Same as above, for CPU Temperature
TW_NO_CPU_TEMP := true
# Allows you to map a custom keycode for power button, takes in a number, usually three digits
TW_CUSTOM_POWER_BUTTON := 107
# Always use rm -rf to wipe
TW_ALWAYS_RMRF := true
# Prevent TWRP from unmounting /system
TW_NEVER_UNMOUNT_SYSTEM := true
# Removes USB Storage capability
TW_NO_USB_STORAGE := true
# Inject TWRP as a second ramdisk for Samsung devices, which keep recoveries that way.
TW_INCLUDE_INJECTTWRP := true
TW_INCLUDE_BLOBPACK --
NEED HELP
# Specify a path to the lun file on device
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/class/android_usb/android0/f_mass_storage/lun0/file"
# Not very sure, I guess it allows you to simply pop in the lunfile itself
BOARD_UMS_LUNFILE :=
TW_HAS_DOWNLOAD_MODE -- For Samsung devices
TW_NO_SCREEN_BLANK --
NEED HELP
TW_SDEXT_NO_EXT4 -- Blocks EXT4 FS for SD-EXT partitions
# Forces use of /proc/cpuinfo for determining device id. Look here :
https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/data.cpp#l183-l184
TW_FORCE_CPUINFO_FOR_DEVICE_ID := true
# For older devices. See here :
https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/Android.mk#l383
TW_NO_EXFAT_FUSE := true
# Decryption support for /data
TW_INCLUDE_CRYPTO -- General decryption modules
# On some device, TWRP backup folder name will show 0000000000 bcos cpuinfo has no serial number. Using this flag then it will use ro.product.model as the folder name instead of all 0000000000
TW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID := true
# Set the path to the sysfs entry which controls the brightness
TW_BRIGHTNESS_PATH := /sys/devices/platform/s3c24xx-pwm.0/pwm-backlight.0/backlight/pwm-backlight.0/backlight
# A seconday path for the above
TW_SECONDARY_BRIGHTNESS_PATH :=
# Max brightness to prevent display damage
TW_MAX_BRIGHTNESS := 255
# Default brightness for TWRP
TW_DEFAULT_BRIGHTNESS := 150
# Custom battery readout path, don't use the given path though, it is intended to be used for a full diagnostic.
TW_CUSTOM_BATTERY_PATH := /sys/class/power_supply/battery/batt_attr_text
# CPU temp sysfs path, if it is zero all the time.
TW_CUSTOM_CPU_TEMP_PATH := true
# Remove the ability to encrypt backups with a password
TW_EXCLUDE_ENCRYPTED_BACKUPS := true
# Timezone fixes for some Qcom devices.
TARGET_RECOVERY_QCOM_RTC_FIX
TW_NO_LEGACY_PROPS --
NEED HELP
# Supply a custom init.rc for the recovery
TARGET_RECOVERY_INITRC := device/htc/pico/ramdisk/recovery/init.recovery.rc
# Set the default language, if not english
TW_DEFAULT_LANGUAGE := en-US
# Specify architecture
TARGET_ARCH := arm
# For people who would want to have ToyBox rather than Busybox
TW_USE_TOOLBOX := true
# Remove exFAT formatting binaries
TW_NO_EXFAT := true
# Remove SuperSU and stop TWRP prompts to install it
TW_EXCLUDE_SUPERSU := true
# An awesome way to take screenshots. Back-end improvement, no noticeable user side changes. Screenshots work without it too
TW_INCLUDE_FB2PNG := true
BOARD_USES_BML_OVER_MTD --
NEED HELP
# include Logcat daemon for help in debugging
TWRP_INCLUDE_LOGCAT := true
# See here :
https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/Android.mk#L435
TARGET_RECOVERY_DEVICE_MODULES := true
TARGET_USERIMAGES_USE_F2FS -- Include mkfs.f2fs for formatting partitions as F2FS
# Include a custom hardwarekeyboard.cpp . Can't see the point though.
TWRP_CUSTOM_KEYBOARD := device/lge/hammerhead/recovery/hardwarekeyboard.cpp
# Log touch input
TWRP_EVENT_LOGGING := true
#
@yuw
neg :My experience on MTK tablet, typical is RECOVERY_TOUCHSCREEN_SWAP_XY & RECOVERY_TOUCHSCREEN_FLIP_Y is use is pair as MTK vendor tend to use landscape LCD but a normal portrait Touch Screen !
TW_X_OFFSET -- X-Axis offset for borked displays
TW_Y_OFFSET -- Y-Axis offset for borked displays
# Smartwatch optimisation
TW_ROUND_SCREEN := true
TW_THEME -- New flag, takes in the following : portrait_mdpi, landscape_mdpi, portrait_hdpi,landscape_hdpi,watch_mdpi . It should be caps but when I was compiling a minute ago, it threw me an error and asked to de-caps it. So, see for yourself what works
TW_CUSTOM_THEME -- Use a custom theme like materialised by
@z31s1g
. Give the path to the contents here.
TWRP_NEW_THEME -- Old is gold. Put false to use the old one.
TW_EXTRA_LANGUAGES -- Set to true and enable localisation
TW_MTP_DEVICE -- Specify a custom device name for MTP
TW_TARGET_USES_QCOM_BSP -- Qcom specific enhancements
TARGET_PREBUILT_KERNEL -- Use a prebuilt kernel rather than building from source
TARGET_RECOVERY_PIXEL_FORMAT -- Use RGBA,RGBX,ARGB and whatever, I don't remember, see the main thread for that info.
TARGET_RECOVERY_OVERSCAN_PERCENT -- Defines the padding to leave around the screen edges
BOARD_USE_CUSTOM_RECOVERY_FONT -- Specify a .ttf file to use as default font
BOARD_CUSTOM_GRAPHICS -- include customised graphics backends if 3.0.0-0 broke stuff for you
TARGET_CUSTOM_KERNEL_HEADERS --
NEED HELP
TW_NEW_ION_HEAP --
NEED HELP
Self Explanatory
RECOVERY_TOUCHSCREEN_FLIP_Y
RECOVERY_GRAPHICS_FORCE_USE_LINELENGTH -- Fixes slanty graphics
TW_DISABLE_DOUBLE_BUFFERING --
NEED HELP
TARGET_RECOVERY_FORCE_PIXEL_FORMAT --
NEED HELP FOR POSSIBLE INPUTS
BOARD_HAS_FLIPPED_SCREEN -- For people whose screens were mounted the wrong side across
TW_IGNORE_MAJOR_AXIS_0 --
NEED HELP
TW_IGNORE_MT_POSITION_0 --
NEED HELP
TW_IGNORE_ABS_MT_TRACKING_ID --
NEED HELP
TW_INPUT_BLACKLIST --
NEED HELP
TW_WHITELIST_INPUT --
NEED HELP
TARGET_HW_DISK_ENCRYPTION --
NEED HELP
TW_HAVE_X86_ACCELERATED_PIXELFLINGER -- Improvements for x86 based devices
ARCH_ARM_HAVE_NEON -- Take advantage of ARM-NEON optimisations
Typically, when you have already downloaded the base repo, re-syncing it will only take a few seconds
Menu 2
Part of the original
mkvendor.sh
script is adapted for the extraction of boot or recovery.img which also does the git initialization. If the ramdisk can be unpack then the
recovery.fstab
will be copied to the device tree folder, if not then it will create a basic
MTK
recovery.fstab,
boot.mk
& also
BOARD_CUSTOM_BOOTIMG_MK
. If you're not building for
MTK
then remove that line from BoardConfig.mk
You will need to add/ remove
TWRP
flags accordingly & manual edit on the
TARGET_CPU_VARIANT
either cortex-a7 or cortex-a9 for older
MTK
, refer to your device spec. Possible values are cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a15, krait, scorpion. Use generic for devices that do not have a CPU similar to any of the supported cpu variants
You will need to manual edit on the recovery.fstab to suit your device or
TWRP-ify
the extracted stock recovery.fstab
Menu 3
When you have build earlier, subsequent build will only take few minutes bcos of
CCACHE
... :good:
Menu 4
Done, test TWRP on your device to make sure it is working properly if not then add or remove flags accordingly & use
Menu 3
to build again
Menu 5
Choose either
Option 1
or 2, Option 2 is recommended & it won't take long if you are using
Part-Source
.
Menu 6
bash script
itself is self-explanatory.
Thanks
to the
OP
, he has offer to take over the maintenance of this script so hit your
Thanks
button to him... :good: If you found any error/ bug or have any new ideas/ features for this script then
pm
the
OP
or do a
git pull
request... :good:
Above is the detail explanation on the script
GUI
front-end, here i'll explained what the script actually does.
Menu 1
This menu will create a
local_manifest.xml
to remove unwanted projects based on your selection. When select
Full-Source
, it will also create l
ocal_manifest.xml
to remove existing recovery & replace it with TWRP based on your selection.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="android_bootable_recovery" />
<project path="bootable/recovery" name="omnirom/android_bootable_recovery" revision="[COLOR="Blue"]android-6.0[/COLOR]" />
</manifest>
Part-Source
It is normal that OmniROM & CM will consistently add new projects to their repo when they introduce new features or functions to it. The beauty of this
Part-Source
is that even when projects grows, this script will
grep -v
only the needed projects for building
TWRP
on any base repo.
This
Part-Source
is the extreme minimal for building
TWRP
therefore some of the additional projects are needed when you use particular
TWRP
flags. As of today ( March 2016 ), it will build a fully working TWRP with only
44
projects on both OmniROM 4.4 & CM 11 base repo. In the future,
Teamwin
may also add a new feature or function then you will also need to add additional projects to it too or OP will update it based on your feedback. Refer to
compile.log
for details.
# Optional => TARGET_USERIMAGES_USE_F2FS := true
[COLOR="Red"]#[/COLOR]grep -v f2fs-tools ~/x > ~/x.tmp;mv ~/x.tmp ~/x
If you use
TARGET_USERIMAGES_USE_F2FS := true
then remove the remark
#
# Optional => TW_INCLUDE_NTFS_3G := true
[COLOR="Red"]#[/COLOR]grep -v external/ntfs-3g ~/x > ~/x.tmp;mv ~/x.tmp ~/x
if you use
TW_INCLUDE_NTFS_3G := true
then remove the remark
#
# Optional => TW_USE_TOOLBOX := true
[COLOR="red"][B]#[/B][/COLOR]grep -v external/toybox ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="Red"]#[/COLOR]grep -v external/mksh ~/x > ~/x.tmp;mv ~/x.tmp ~/x
If you use
TW_USE_TOOLBOX := true
then remove the remark
#
.
toybox
available on android-6.0/ cm-13.0 only, don't have such projects on android-4.4 but it'll work, refer to the end for more info.
# un-remark the below required for x64
[COLOR="Red"]#[/COLOR]grep -v linux-x86/aarch64/aarch64-linux-android-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/aarch64/aarch64-linux-android-4.9 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
TARGET_CPU_ABI2 := armeabi-v7a
TARGET_ARCH_VARIANT := armv8-a
TARGET_CPU_VARIANT := generic
TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv7-a-neon
TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := cortex-a7
If you are building
x64
TWRP then remove the remark
#
& update
BoardConfig.mk
accordingly. Take note, not available on android-4.4/ cm-11.0 base repo, use later base repo.
# un-remark the below required for kernel compiling if not using TARGET_PREBUILT_KERNEL
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.6 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.7 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/arm/arm-eabi-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
if you are building your own kernel then remove the remark
#
# Optional for x86 SoC
[COLOR="Red"]#[/COLOR]grep -v linux-x86/x86/i686-linux-android-4.7 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/x86/x86_64-linux-android-4.8 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
[COLOR="red"]#[/COLOR]grep -v linux-x86/x86/x86_64-linux-android-4.9 ~/x > ~/x.tmp;mv ~/x.tmp ~/x
TARGET_ARCH := [COLOR="blue"]x86[/COLOR]
TARGET_CPU_ABI := armeabi
TARGET_ARCH_VARIANT := [COLOR="blue"]x86[/COLOR]
TARGET_CPU_VARIANT := [COLOR="blue"]x86[/COLOR]
if you are building for
Intel
SoC then remove the remark
#
& edit the
BoardConfig.mk
accordingly
This script has been tested & it works on any base repo from OmniROM android-4.4, 5.0, 5.1 & 6.0 & Cyanogenmod cm-11.0, cm-12.0, cm12.1 & cm13.0 using Full-Source or Part-Source but why use Full-Source to build TWRP when Part-Source works, most importantly, you are not building OmniROM or Cyanogenmod but
TWRP
....

Using android-4.4/ cm-11.0 base repo has its advantage, compiled
TWRP
size will be smaller & it can build all version.
If you use android-6.0/ cm-13.0 then obviously you can only build
TWRP
android-6.0 only, just edit the line
62, 63
for OmniROM or
72, 73
for
CM
accordingly. Building TWRP android-
4.4
on cm-13.0 or on OmniROM android-6.0 will result in a build error ! Later base repo won't build TWRP older version !
Above syncing cm-13.0 & as you can see, it is also using source from cm-10.1, 10.2 & 11. Syncing all to the same ~/omni or ~/cm folder will do.
Sometimes on certain devices, OmniROM android-4.4 or Cyanogenmod cm-11.0 base repo just won't boot then you can try by editing this line to
android-5.0
or
cm-12.0
& updating it will only take a very short time if you use
Part-Source
.
Menu 2
Device tree
This script will create a barebone minimal device tree for building
TWRP
. Anything less will result in a build error. It will create five files which is just sufficient to build a fully working
TWRP
using prebuilt kernel. It will build kernels too, just update the correct
kernel config
to BoardConfig.mk & remove the remark
#
needed projects for building kernels. However, i don't see the needs to build the same kernel with every TWRP new build, it will take a longer time to build, most importantly, you are not building a ROM.
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/cm_[COLOR="blue"]device name that you have key-in[/COLOR].mk
AndroidProduct.mk
TARGET_CPU_ABI := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_VARIANT := [COLOR="blue"]cortex-a9[/COLOR] [COLOR="Red"]<= You only need to change this to suit your device[/COLOR]
BOARD_RECOVERYIMAGE_PARTITION_SIZE := [COLOR="Red"]0x105c0000[/COLOR] [COLOR="red"]<= You need to update this so that build will error out when the size exceed your recovery partition size[/COLOR]
BOARD_FLASH_BLOCK_SIZE := 131072
TARGET_PREBUILT_KERNEL := device/TD2/9300/kernel
BOARD_MKBOOTIMG_ARGS := --base 10000000 --pagesize 2048 --kernel_offset 00008000 --ramdisk_offset 01000000 --tags_offset 00000100
[COLOR="Blue"]#MTK common twrp flags[/COLOR] [COLOR="Red"]<= You only need to change the below flags to suit your device[/COLOR]
TW_NO_EXFAT := true
TWHAVE_SELINUX := true
TW_DISABLE_TTF := true [COLOR="red"]<= Will error out on TWRP android-6.0[/COLOR]
[COLOR="red"]#[/COLOR]TW_USE_TOOLBOX := true [COLOR="red"]<= You'll need extra projects for this flag, edit the script accordingly[/COLOR]
TW_NO_EXFAT_FUSE := true
TW_THEME := [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/gui/Android.mk#l96-L100"]portrait_mdpi[/URL]
[COLOR="red"]#[/COLOR]RECOVERY_SDCARD_ON_DATA := true [COLOR="red"]<= For [URL="https://twrp.me/faq/datamedia.html"]data/media[/URL] device[/COLOR]
TW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID := true
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/devices/platform/mt_usb/gadget/lun%d/file"
BoardConfig.mk
# Inherit device configuration
$(call inherit-product, device/[COLOR="blue"]TD2[/COLOR]/[COLOR="blue"]9300[/COLOR]/device_[COLOR="blue"]9300[/COLOR].mk)
## Device identifier. This must come after all inclusions
PRODUCT_DEVICE := [COLOR="blue"]9300[/COLOR]
PRODUCT_NAME := cm_[COLOR="blue"]9300[/COLOR]
PRODUCT_BRAND := [COLOR="blue"]TD2[/COLOR]
PRODUCT_MODEL := [COLOR="blue"]9300[/COLOR]
PRODUCT_MANUFACTURER := TD2
$(call inherit-product, build/target/product/[URL="https://github.com/CyanogenMod/android_build/blob/cm-11.0/target/product/full_base_telephony.mk"]full_base_telephony.mk[/URL])
# Time Zone data [COLOR="red"]<= This have been disable as some device will not boot, to enable it just remove the remark [B]#[/B] below[/COLOR]
[COLOR="red"]#[/COLOR]PRODUCT_COPY_FILES += \
[COLOR="Red"]#[/COLOR]bionic/libc/zoneinfo/tzdata:recovery/root/system/usr/share/zoneinfo/tzdata
PRODUCT_BUILD_PROP_OVERRIDES += \
PRODUCT_MODEL="i9300" \ [COLOR="Red"]<= This is where Menu 2 will get the ro.product.device & ro.product.model info[/COLOR]
TARGET_DEVICE="bird77_a_cu_ics2"
PRODUCT_NAME := full_[COLOR="Blue"]9300[/COLOR]
PRODUCT_DEVICE := [COLOR="blue"]9300[/COLOR]
device_(device-name).mk
&
cm.mk
will be auto-created based on what you have key-in for the
vendor
&
device
name at
Menu 2
For building recovery, you don't need to use
full.mk
, using it will result in need of extra projects on the
Part-Source
& it will also copy the extra
fstab.goldfish
&
ueventd.goldfish.rc
to the root of the ramdisk
/boot emmc /dev/bootimg
/recovery emmc /dev/recovery
/system ext4 /dev/block/mmcblk0p3
/cache ext4 /dev/block/mmcblk0p4
/data ext4 /dev/block/mmcblk0p5
/emmc vfat /dev/block/mmcblk0p6 flags=display="Phone Storage";settingsstorage
/sdcard vfat /dev/block/mmcblk1p1 flags=display="SD Card";storage;removable
/sd-ext auto /dev/block/mmcblk1p2
/nvram emmc /dev/nvram flags=display="Nvram";backup=1
/uboot emmc /dev/uboot flags=display="Uboot";backup=1
#/boot emmc /dev/block/platform/mtk-msdc.0/by-name/boot flags=display="Boot";backup=1
#/recovery emmc /dev/block/platform/mtk-msdc.0/by-name/recovery flags=display="Recovery";backup=1
#/system ext4 /dev/block/platform/mtk-msdc.0/by-name/system flags=display="System";backup=1
#/cache ext4 /dev/block/platform/mtk-msdc.0/by-name/cache flags=display="Cache"
#/data ext4 /dev/block/platform/mtk-msdc.0/by-name/userdata flags=encryptable=/dev/block/platform/mtk-msdc.0/by-name/metadata
#/nvram emmc /dev/block/platform/mtk-msdc.0/by-name/nvram flags=display="Nvram";backup=1;flashimg=1
#/external_sd auto /dev/block/mmcblk1p1 flags=display="External SDcard";storage;wipeingui;removable;backup=0
#/usbotg auto /dev/block/sda1 flags=display="Usb-Otg";storage;removable;backup=0
#/boot mtd boot
#/recovery mtd recovery
#/cache yaffs2 cache
#/data yaffs2 userdata
#/misc mtd misc
#/system yaffs2 system
#/sdcard vfat /dev/block/mmcblk0p1
#/sd-ext ext4 /dev/block/mmcblk0p2
recovery.fstab
- Edit or delete whatever that is not relevant to your device. Use
osm0sis AIK
to unpack your stock recovery.img &
TWRP-ify
the recovery.fstab... :good:
# Sec Class: Intel Confidential (IC)
# Android fstab file.
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID068 /system ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID069 /data ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID070 /cache ext4 defaults defaults
/dev/block/mmcblk1p1 /sdcard vfat defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID076 /nvm_fs_partition ext4 defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID074 /misc emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID071 /boot emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID119 /recovery emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID120 /recoverym emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID001 /mobilevisor emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID013 /splash_screen emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID115 /mvconfig emmc defaults defaults
/dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID118 /secvm emmc defaults defaults
Most latest Android devices are using fstab version 2 AKA
fstab 2
while
TWRP
is using
fstab 1
. Eg. Above is my
Intel X3
stock recovery.fstab
# mount point fstype device [device2]
/boot emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID071
/recovery emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID119 flags=display=recovery;backup=1
/imei emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID022 flags=display=imei;backup=1
/mobilevisor emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID001 flags=display=mobilevisor;backup=1
/mvconfig emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID115 flags=display=mvconfig;backup=1
/secvm emmc /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID118 flags=display=secvm;backup=1
/system ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID068
/data ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID069
/cache ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID070
/nvm_fs_partition ext4 /dev/block/platform/soc0/e0000000.noc/by-name/ImcPartID076
/external_sd vfat /dev/block/mmcblk1p1 flags=display="Micro SDCard";storage;removable
/usbotg auto /dev/block/sda1 flags=display=USB-OTG;storage;removable
My
TWRP-ify
recovery.fstab. Typically, for
ext4
partition, you don't need to specify
flags=display=
&
backup=1
, it will be taken care of by
TWRP
, for more info regarding
fstab flags
then refer to Main Thread for
*RECOVERY.FSTAB*
... :good:
osm0sis
's unpackbootimg also support
--dt <filename>
:good:
Some devices require
additional info
for factory update.zip then add it accordingly to the device tree, typically is your
device_(device-name).mk
. Look at other device tree
here
&
here
&
here
for reference. On
CM
base repo, you can also use
mkvendor.sh
... :good: However, you will need to manually edit certain files as no
DEV
has been updating it, currently it will result in a build error even when using Full-Source !
Do take note that even an
extra space
on some of the lines at
BoardConfig.mk
will result in a build error !
Menu 3
Below are the commands to build TWRP, thats it !
export LC_ALL=C
source build/envsetup.sh
lunch [COLOR="blue"]omni[/COLOR]_S939-eng [COLOR="blue"]<= S939 is the device name[/COLOR]
[COLOR="Blue"]OR[/COLOR]
lunch [COLOR="blue"]cm[/COLOR]_S939-eng
make -j4 recoveryimage
Menu 4
Below command generically will work on most Android devices.
Updates
: Has updated this menu to support this, just key-in
/path-to-your-device-recovery-partition
adb push [COLOR="blue"]$OUT[/COLOR]/recovery.img /data/local/tmp
adb shell su -c "dd if=/data/local/tmp/recovery.img of=/[COLOR="blue"]path-to-your-device-recovery-partition[/COLOR]"
To use the
$OUT
path, you must first source it then lunch your device name, refer to previous
Menu 3
for info.
Menu 5
Option 1 is
make clean
Option 2 is wipe the whole repo base folder except the hidden
.repo
folder. As mention on the script GUI front-end, after that, use
Menu 1
will have all the files extracted out.
Menu 6
This menu is using
curl
to create github repo.
It is for you to publish your device tree either for diagnostic & debugging when you ask for help. It is also for you to share a working build so that others can refer to it when they make a build of their own or git clone yours & build it themselves.
TW_DISABLE_TTF:= true
# building of an OEM friendly TWRP. excludes SuperSu, uses Toolbox instead busybox, disables themeing. MORE INFOS TO BE ADDED
TW_OEM_BUILD := true
# Adds EXT4 formatting binaries
TARGET_USERIMAGES_USE_EXT4 := true
# exclude mtp from twrp (disable if you are not able to fix it device/kernel side, safes some space)
TW_EXCLUDE_MTP := true
# screen will stay awake
TW_NO_SCREEN_TIMEOUT := true
# needed on devices without a recovery partition (some devices have recovery included im boot.img)
TW_HAS_NO_RECOVERY_PARTITION := true
# removes the reboot option to boot into boooader, needed e.g. on samsung devices which use Download mode instead
TW_NO_REBOOT_BOOTLOADER := true
# add an option in reboot menu to reboot into Download Mode
TW_HAS_DOWNLOAD_MODE := true
# some devices don't have a temp sensor, disable in such case to stop spamming recovery.log
TW_NO_CPU_TEMP := true
# recursive delete by default instead fotmatting (available optional inside recovery settings too)
TW_ALWAYS_RMRF := true
# system won't be unmounted,
TW_NEVER_UNMOUNT_SYSTEM := true
# don't blank screen (available optional inside recovery settings too)
TW_NO_SCREEN_BLANK := true
# deprecated, use TW_INCLUDE_CRYPTO instead
TW_INCLUDE_JB_CRYPTO := true
# add support for encryption
TW_INCLUDE_CRYPTO := true
# use a custom init.rc in recovery, add the path. Example:
TARGET_RECOVERY_INITRC := device/samsung/p3100/rootdir/init.twrp.rc
# ToyBox (disables busybox?)
TW_USE_TOOLBOX := true
# exclude SuperSu e.g. to save some space or for different other reasons (supersu still included bx default?)
TW_EXCLUDE_SUPERSU := true
# include f2fs support (make sure your kernel supports f2fs!)
TARGET_USERIMAGES_USE_F2FS := true
# device resolution - deprecated, use TW_THEME instead
DEVICE_RESOLUTION :=
# define the theme for your device resolution, note: you can also use smaller/bigger themes because the theme get scaled for your deviceresolution anyway):
# 240x240 280x280 320x320
TW_THEME := watch_mdpi
# 320x480 480x800 480x854 540x960
TW_THEME := portrait_mdpi
# 720x1280 800x1280 1080x1920 1200x1920 1440x2560 1600x2560
TW_THEME := portrait_hdpi
# 800x480 1024x600 1024x768
TW_THEME := landscape_mdpi
# 1280x800 1920x1200 2560x1600
TW_THEME := landscape_hdpi
# auto copy files placed in device/$VENDOR/$DEVICENAME/recovery/root inside recovery ramdisk (e.g. init.recivery*.rc which get removed from recoveryramdisk by default). example:
TARGET_RECOVERY_DEVICE_DIRS += device/samsung/espresso-common
# path to a prebuild kernel (can be used if you are unable to compile a kernel yourself, e.g. if no kernel source available)
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/prebuilt/zImage
# swap x anf y axis for touch
RECOVERY_TOUCHSCREEN_SWAP_XY := true
# flip x axis for touch
RECOVERY_TOUCHSCREEN_FLIP_X := true
# flip y axis for touch,
RECOVERY_TOUCHSCREEN_FLIP_Y := true
Gesendet von meinem LG-H815 mit Tapatalk
---------- Post added at 05:23 PM ---------- Previous post was at 05:19 PM ----------
# don't include default init.recovery.usb.rc, provide your own or use needed defines inside init.recovery.$DEVICE.rc
TW_EXCLUDE_DEFAULT_USB_INIT := true
Gesendet von meinem LG-H815 mit Tapatalk
Many newbies make mistake by using other
DEV
's device tree which is normally meant for building ROMs, using it to build
TWRP
therefore will result in alot of build errors !
Above script can also be use to build
TWRP
for any Android devices that uses standard Android header,
except for
Menu 4
which is specifically for
MTK
devices only. Just edit the script to add support for your device... :good:
Updated support for other devices
This project was actually started way back at
2013
& this is the main reason why
TWRP
doesn't build is bcos of the tedious, confusing & wrong
Build Environment
setup, it is all so different on so many different linux distros & OSes version, i went on to developed
Easy Magic TWRP
....

Now i use Intel device & this script did build a working
TWRP
for it too.... :laugh:
That's why i strongly recommends
BBQLinux
for beginners,
Thanks
to
RD
codeworkx
, i can guarantee that any
Build Error
is not cause by wrong
BE
setup as its already built-in on
BBQLinux
... :good:
The other reason
TWRP
doesn't boot is bcos of wrong
mkbootimg
repack arguments,
Thanks
to
RD
osm0sis
for his awesome
unpackbootimg
... :good:
Since many newbies are having problems with building
TWRP
& flooding the
TWRP
thread
here
This guide isn't going to be a step-by-step, word-for-word type of guide. If you're not familiar with basic Linux commands and/or building in AOSP then you probably won't be able to do this.
Which is actually meant for intermediate users, i've offered to share this script when
OP
decided to open up a new thread here for TWRP flags.... :good:
Credits Updates
Hacker432
for testing & feedbacks on this script, now it uses the
ATC
folder so that it'll support other languages other than English & TWRP will boot now when build on cm-12.1 base repo... :good:
OP
for giving this script a glamour name
ATC
aka
AIO-TWRP-Compiler
... :laugh: :highfive: :good:
My TWRP doesn't boot
Try unpack/ repack your stock
3e
recovery.img with
AIK
, push it to your device & if it doesn't boot then obviously your device is not using standard Android header & so does this script will not build a bootable TWRP. Try
google
your device info on how they did it, Eg.
Sony
devices uses
BOARD_CUSTOM_BOOTIMG_MK
for repacking
boot & recovery.img
& update it accordingly to your BoardConfig.mk
adb shell cat /proc/last_kmsg
[COLOR="Blue"]OR[/COLOR]
adb shell cat /proc/last_kmsg > kmsg.txt
[U][COLOR="blue"]On Android-6.0 Marshmallow[/COLOR][/U]
adb shell cat /sys/fs/pstore/console-ramoops
[COLOR="blue"]OR[/COLOR]
adb shell cat /sys/fs/pstore/console-ramoops > kmsg.txt
Source
Extreme minimal, TWRP require
this
only one flag
TW_THEME :=
to build or it will error out. You will also need other flags as well, refer to the
OP
. Some devices won't boot when certain
TWRP
flag is used or not used bcos its not compatible with your device kernel ! Most legacy device doesn't support
TTF
&
TWRP
won't boot so you have to build with TWRP android-
5.1
with
TW_DISABLE_TTF := true
flag
[URL="https://github.com/TeamWin/android_device_kazam_thunder_q45/blob/cm-10.2/BoardConfig.mk#l49"]TW_NO_EXFAT := true[/URL] [COLOR="Red"]<= To disable exfat[/COLOR]
[URL="https://github.com/TeamWin/android_device_kazam_tornado_348/blob/android-4.4/BoardConfig.mk#l50"]TW_NO_EXFAT_FUSE := true[/URL] [COLOR="Red"]<= To disable exfat[/COLOR]
[URL="https://github.com/carliv/device_elephone_p6000/blob/cm-11.0/BoardConfig.mk#l110"]TW_USE_TOOLBOX := true[/URL] [COLOR="red"]<= Using this flag will use toolbox instead of busybox[/COLOR]
Above are some of the flags that can cause TWRP not to boot up. If you are using
Part-Source
then you need to add additional projects to support these flags as most of them are disabled on the script. Just remove the remarks
#
from the script for that particular projects. More detail info refer to above post #11
Part-Source
.
Refer to the most bottom
Bug Report
on how to obtain
recovery.log
, without it nobody is able to help you.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l122-l130"]TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888[/URL]
TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
TARGET_RECOVERY_PIXEL_FORMAT := BGRA_8888
The other reason it doesn't boot is that it actually does
boot
up but the screen is blank ! Try
adb shell
& it should work on this scenario.
Try different pixel format one at a time, one of them should work.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l114-l116"]TARGET_RECOVERY_FORCE_PIXEL_FORMAT := RGB_565[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#l79"]RECOVERY_GRAPHICS_FORCE_USE_LINELENGTH := true[/URL]
[URL="https://gerrit.omnirom.org/#/c/13948/"]TW_DISABLE_DOUBLE_BUFFERING := true[/URL]
When not setting any pixel format, the default is
RGB565
& it should work on most Android devices. You can also try the above when non of them works.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-6.0/minuitwrp/Android.mk#L14-L19"]TW_BOARD_CUSTOM_GRAPHICS[/URL]
If your existing device tree uses this & all the above doesn't work then drop by at
TWRP
IRC
channel to get further help.
Source
Miscellaneous Tips
As mentioned many times, most of the time build error is bcos of wrong
BE
setup, use
BBQLinux
& you'll get over it. If you have already build on other distro then refer to
here
on how to use this script or migrate the source code
.repo
to
BBQLinux
.
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/variables.h#l173"]TARGET_USE_CUSTOM_LUN_FILE_PATH[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l828"]TW_BRIGHTNESS_PATH[/URL] [COLOR="blue"]<= If not define, TWRP will look for it [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l840-l841"]here[/URL][/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l855"]TW_SECONDARY_BRIGHTNESS_PATH[/URL]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l1076"]TW_MAX_BRIGHTNESS[/URL] [COLOR="blue"]<= If not define, TWRP will [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l56-l58"]set it[/URL][/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l967"]TW_CUSTOM_BATTERY_PATH[/URL] [COLOR="Blue"]<= If not define, TWRP will use [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l972"]this[/URL] or [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l986"]this[/URL] [/COLOR]
[URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l937"]TW_CUSTOM_CPU_TEMP_PATH[/URL] [COLOR="blue"]<= if not define, TWRP will use [URL="https://github.com/omnirom/android_bootable_recovery/blob/android-5.1/data.cpp#l942"]this[/URL][/COLOR]
TWRP
has everything specified to standard Android path unless when it doesn't work then you'll need to find that out yourself. Do take note that some device doesn't support certain feature such as CPU temperature, battery level, mount USB storage & etc then refer to the
OP
for flags to disable it.
adb shell
echo 0 > /sys/devices/platform/i2c-gpio.24/i2c-24/24-002c/backlight/lcd-backlight/brightness
echo 255 > /sys/devices/platform/i2c-gpio.24/i2c-24/24-002c/backlight/lcd-backlight/brightness
If brightness doesn't work, look for
lcd-backlight/brightness
, Eg. above command should be able to change the level of brightness if that is the correct path as indicated at
myAndroid.txt
.
Sync corruption
git
&
repo
is like a
Super Intelligent Source Code Auto-Resume Downloader
when working together . . . :good:
You can stop it at any time, restart it back & it will auto-resume.
cm
repo & source code is located at ~/cm/
.repo
,
omni
at ~/omni/
.repo
it is a hidden folder & to view
hidden folder
via File Manager, you need to press
Ctrl
+
h
Sometimes you have corruption then
repo sync
wouldn't work & normally you just need to delete
manifests
,
manifests.git
,
manifests.xml
with a
repo init
&
repo sync
then you'll be back to normal.
If still this doesn't solve the problem then delete everything
EXCEPT
the folder
project-objects
&
projects
, both of this is the actual source code folder.
After this a
repo init
then
repo sync
& everything will be back to normal, i
guarantee
, done this many times, no worries . . . :laugh:
Sometimes when you have severe data corruption, above technique will not work then manually cd ~/cm or ~/omni then repo init then repo sync & see what repo & git has to say then follow the on-screen instructions to remove the corrupted projects.
And finally all corrupted projects has been removed, subsequent
repo sync
& all files will be auto-extracted out.
Corrupted .repo folder
i've make a back up of my
.repo
folder using
tar.gz
compression years ago & when extracting out, normally will end with data corruptions except if you use
lrzip
... :good: You will need to manually remove all the text files such as
hooks
,
pre-auto-gc
&
commit-msg
which is supposed to be a symlink files.
You will need to manually delete all the
pre-auto-gc.txt
file. You might need to
repo sync --force-sync
many times to overwrite all the corrupted projects & after that, you won't be getting any of these error messages again.
Syncing work tree error
- Doesn't check out all files
This operation must be run in a work tree
Zip & attach the ~/AIO-TWRP-Compiler/
compile.log
to your post when replying.
Refer to
here
on how to submit a proper
TWRP
bug report . . . :good:
How to obtain recovery log
adb pull /tmp/recovery.log -> Attach to your post
At
TWRP
->
BackUp
-> After
Backup
go to
Advanced
->
Copy Log to SDCard
Typically you will find the
recovery.log
at
Typical Internal SdCard
/emmc/TWRP/BACKUPS/ [
Your Device Name
] / [
Backup date
] [
ro.mediatek.version.release
]
/data/media
/data/media/0
Typical External SdCard
/sdcard/TWRP/BACKUPS/ [
Your Device Name
] / [
Backup date
] [
ro.mediatek.version.release
]
Attach it to your post.
At
TWRP
console (Square button at button) -> You can view the log
If
TWRP
crash when executing certain menu/ function/ feature then you can use My Master Shifu
_that
gdb
technique for debugging & submit the back trace to
Teamwin
so that they can fix it... :good:
Try
IRC
channel to get help directly, prepare all required info such as recovery.log, compile.log &
android log
, refer to
here
for the best timing . . .
TWRP FAQ