[Android] werty100:
This thread is going to help you creating a device tree to make compatible to build TWRP for your device.

Inspired by this thread:http://xdaforums.com/showthread.php?t=1943625

Requirements:

CM Source(Most compatible)

Knowledge about the risk and what are you doing

A working device tree of your phone

First we need to download TWP booteable recovery:

https://github.com/omnirom/android_bootable_recovery

Then remplace it with CM one.

After this we need our device tree:

Search for it on github or where you even want

For making life easier I recommend to look for other TWRP devices of same branch product etc...

Open BoardConfig.mk:

At the end add this FLAGS:

#TWRP

DEVICE_RESOLUTION := your resolution

Then use the following flags according to your device

More FLAGS:

In addition to the resolution, we have the following build flags:

RECOVERY_GRAPHICS_USE_LINELENGTH := true -- fixes slanty looking graphics on some devices

RECOVERY_SDCARD_ON_DATA := 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)

BOARD_HAS_NO_REAL_SDCARD := true -- disables things like sdcard partitioning and may save you some space if TWRP isn't fitting in your recovery patition

TW_INCLUDE_DUMLOCK := true -- includes HTC Dumlock for devices that need it

This is how you would define dual storage for devices that have dual storage devices. For devices that have internal storage we usually define that as /emmc. Note that the mount point must match something in the recovery.fstab These flags are somewhat deprecated in TWRP 2.5+ but they are still used for a few things.

TW_INTERNAL_STORAGE_PATH := "/data/media"

TW_INTERNAL_STORAGE_MOUNT_POINT := "data"

TW_EXTERNAL_STORAGE_PATH := "/sdcard"

TW_EXTERNAL_STORAGE_MOUNT_POINT := "sdcard"

TW_NO_BATT_PERCENT := true -- disables the display of the battery percentage for devices that don't support it properly

TW_CUSTOM_POWER_BUTTON := 107 -- custom maps the power button for the lockscreen

TW_NO_REBOOT_BOOTLOADER := true -- removes the reboot bootloader button from the reboot menu

TW_NO_REBOOT_RECOVERY := true -- removes the reboot recovery button from the reboot menu

TW_NO_USB_STORAGE := true -- removes the USB storage button on devices that don't support USB storage

RECOVERY_TOUCHSCREEN_SWAP_XY := true -- swaps the mapping of touches between the X and Y axis

RECOVERY_TOUCHSCREEN_FLIP_Y := true -- flips y axis touchscreen values

RECOVERY_TOUCHSCREEN_FLIP_X := true -- flips x axis touchscreen values

TW_ALWAYS_RMRF := true -- forces the rm -rf option to always be on (needed for some Motorola devices)

TW_NEVER_UNMOUNT_SYSTEM := true -- never unmount system (needed for some Motorola devices)

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

TW_DEFAULT_EXTERNAL_STORAGE := true -- defaults to external storage instead of internal on dual storage devices (largely deprecated)

HAVE_SELINUX := true -- includes SELinux support for backup/restore, required for CM10.2 and requires CM10.0 or higher (CM9 and below do not have libselinux)

TWRP_EVENT_LOGGING := true -- enables touch event logging to help debug touchscreen issues (don't leave this on for a release - it will fill up your logfile very quickly)

Here's some flags that may help you, but are not specific to TWRP (works in CWM too):

This flag has multiple options, but can be used to set different graphics modes that may be need to correct color space issues on some devices:

TARGET_RECOVERY_PIXEL_FORMAT := "BGRA_8888"

TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888"

TARGET_RECOVERY_PIXEL_FORMAT := "RGB_565"

BOARD_HAS_FLIPPED_SCREEN := true -- flips the screen upside down for screens that were mounted upside-down

TARGET_PREBUILT_RECOVERY_KERNEL := path/to/kernel -- use to specify a kernel specifically for building recovery

(ONLY IF IN YOU BOARDCONFIG IS THIS LINE:TARGET_RECOVERY_INITRC :=)

After we finnish it we need to PATH init.rc:

on init

export PATH /sbin

export LD_LIBRARY_PATH .:/sbin

(ONLY IF IN YOU BOARDCONFIG IS THIS LINE:TARGET_RECOVERY_INITRC :=)

Then we need to path the fstab;

EXAMPLE

Before

# Android fstab file.

# 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

#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>

/dev/block/mmcblk0p6 /modemfs ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait,check

/dev/block/mmcblk0p10 /system ext4 errors=panic wait

/dev/block/mmcblk0p11 /data ext4 nosuid,nodev,noatime,noauto_da_alloc,journal_async_commit,nomblk_io_submit,errors=panic wait,check

/dev/block/mmcblk0p12 /cache ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait,check

/dev/block/mmcblk0p9 /boot emmc defaults defaults

/dev/block/mmcblk0p9 /recovery emmc defaults defaults

# Internal SD Card

/devices/sdi4/mmc_host/mmc1/mmc1 auto auto nosuid,nodev wait,voldmanaged=sdcard0:14,nonremovable

# USB Disk

/devices/platform/musb-ux500.0/musb-hdrc /storage/usbdisk auto defaults

After

# mount point fstype device [device2] fstype2

/boot emmc /dev/block/mmcblk0p9

/system ext4 /dev/block/mmcblk0p10

/data ext4 /dev/block/mmcblk0p11

/cache ext4 /dev/block/mmcblk0p12

/sdcard vfat /dev/block/mmcblk0p14

More information:

*RECOVERY.FSTAB*

TWRP 2.5 and higher supports some new recovery.fstab features that you can use to extend TWRP's backup/restore capabilities. You do not have to add fstab flags as most partitions are handled automatically.

Note that TWRP does not currently support the "fstab 2" version of fstab files seen in AOSP 4.3 / CM10.2. You will still need to use the "old" format of fstab for TWRP. To maximize TWRP's compatibility with your build tree, you can create a twrp.fstab and use PRODUCT_COPY_FILES to place the file in /etc/twrp.fstab When TWRP boots, if it finds a twrp.fstab in the ramdisk it will rename /etc/recovery.fstab to /etc/recovery.fstab.bak and then rename /etc/twrp.fstab to /etc/recovery.fstab. Effectively this will "replace" the fstab 2 file that your device files are providing with the TWRP fstab allowing you to maintain compatibility within your device files and with other recoveries.

The fstab in TWRP can contain some "flags" for each partition listed in the fstab.

Here's a sample TWRP fstab for the Galaxy S4 that we will use for reference:

Code:

/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/mdmFlags are added to the end of the partition listing in the fstab separated by white space (spaces or tabs are fine). The flags affect only that partition but not any of the others. Flags are separated by semicolons. If your display name is going to have a space, you must surround the display name with quotes.

Code:

/external_sd vfat /dev/block/mmcblk1p1 flags=display="Micro SDcard";storage;wipeingui;removable

The flags for this partition give it a display name of "Micro SDcard" which is displayed to the user. wipeingui makes this partition available for wiping in the advanced wipe menu. The removable flag indicates that sometimes this partition may not be present preventing mounting errors from being displayed during startup. Here is a full list of flags:

removable -- indicates that the partition may not be present preventing mounting errors from being displayed during boot

storage -- indicates that the partition can be used as storage which makes the partition available as storage for backup, restore, zip installs, etc.

settingsstorage -- only one partition should be set as settings storage, this partition is used as the location for storing TWRP's settings file

canbewiped -- indicates that the partition can be wiped by the back-end system, but may not be listed in the GUI for wiping by the user

userrmrf -- overrides the normal format type of wiping and only allows the partition to be wiped using the rm -rf command

backup= -- must be succeeded by the equals sign, so backup=1 or backup=0, 1 indicates that the partition can be listed in the backup/restore list while 0 ensures that this partition will not show up in the backup list.

wipeingui -- makes the partition show up in the GUI to allow the user to select it for wiping in the advanced wipe menu

wipeduringfactoryreset -- the partition will be wiped during a factory reset

ignoreblkid -- blkid is used to determine what file system is in use by TWRP, this flag will cause TWRP to skip/ignore the results of blkid and use the file system specified in the fstab only

retainlayoutversion -- causes TWRP to retain the .layoutversion file in /data on devices like Sony Xperia S which sort of uses /data/media but still has a separate /sdcard partition

symlink= -- causes TWRP to run an additional mount command when mounting the partition, generally used with /data/media to create /sdcard

display= -- sets a display name for the partition for listing in the GUI

storagename= -- sets a storage name for the partition for listing in the GUI storage list

backupname= -- sets a backup name for the partition for listing in the GUI backup/restore list

length= -- usually used to reserve empty space at the end of the /data partition for storing the decryption key when Android's full device encryption is present, not setting this may lead to the inability to encrypt the device

canencryptbackup= -- 1 or 0 to enable/disable, makes TWRP encrypt the backup of this partition if the user chooses encryption (only applies to tar backups, not images)

userdataencryptbackup= -- 1 or 0 to enable/disable, makes TWRP encrypt only the userdata portion of this partition, certain subfuldes like /data/app would not be encrypted to save time

subpartitionof= -- must be succeeded by the equals sign and the path of the partition it is a subpartition of. A subpartition is treated as "part" of the main partition so for instance, TWRP automatically makes /datadata a subpartition of /data. This means that /datadata will not show up in the GUI listings, but /datadata would be wiped, backed up, restored, mounted, and unmounted anytime those operations are performed on /data. A good example of the use of subpartitions is the 3x efs partitions on the LG Optimus G:

Code:

/efs1 emmc /dev/block/mmcblk0p12 flags=backup=1;display=EFS

/efs2 emmc /dev/block/mmcblk0p13 flags=backup=1;subpartitionof=/efs1

/efs3 emmc /dev/block/mmcblk0p14 flags=backup=1;subpartitionof=/efs1

This lumps all 3 partitions into a single "EFS" entry in the TWRP GUI allowing all three to be backed up and restored together under a single entry.

For compiling:

make -j4 bootimage( if your device has recovvery inside boot)

OR

make -j4 recoveryimage (if your device can flash recovery.img