Introduction
ဒီတခါ ကျွန်တော်ပြောပြမယ့် အကြောင်းအရာကတော့ SourceCode ကနေ Android Devices တွေအတွက် Custom Recovery တခု Build နည်းကို ပြောပြပေးမှာဖြစ်ပါတယ်။ ဒီနေရာမှာ ရှင်းပြစရာတွေရှိပါတယ်။ Android Recovery ပိုင်းမှာ "Stock Recovery" နဲ့ "Custom Recovery" ဆိုပြီး ရှိပါတယ်။
Stock Recovery က ပုံမှန်အားဖြင့် ဖုန်းဝယ်ကတည်းက Built-In ပါလာတဲ့ Recovery တခုဖြစ်ပါတယ် (ချွင်းချက် - တချို့ Device တွေမှာတော့ ပါမလာတတ်ပါဘူး)။ ပုံမှန်အားဖြင့် ဘာတွေလုပ်လို့ရလည်းဆိုတော့
- အဲဒီ့ Stock Recovery Mode ကနေ ဖုန်းရဲ့ Data တွေကို Wipe Data/Factory Reset ချနိုင်မယ်
- Wipe Cache လုပ်နိုင်မယ်
- Firmware Official Update Zip တွေနဲ့ Update လုပ်နိုင်တယ်။ ဥပမာ OnePlus ဖုန်းတွေ သုံးဖူးရင် သိပါတယ်။ သူ့ရဲ့ Stock Recovery ကနေ Firmware Update တွေ လုပ်သွားလို့ရပါတယ်။
Stock ကတော့ ဒီလောက်ပါပဲ။ Features အများကြီးတော့ မပါပါဘူး။
Custom Recovery ဆိုတဲ့ ခေါင်းစဉ်အောက်မှာ ထပ်ခွဲလို့ ရပါသေးတယ်။
- CWM(ClockworkMod) Recovery
- PhilZ Touch Recovery / TWRP Recovery
ဆိုပြီး ရှိပါတယ်။
PhilZ Touch က တကယ်ကျတော့ CWM Advanced Edition တခုပါပဲ။ ကျွန်တော် အဓိကပြောသွားမှာက Features အကြမ်းတွေနဲ့ လူအများသိတဲ့ TWRP (Team Win Recovery Project) အကြောင်းပါပဲ။
TWRP ရဲ့ ပုံမှန် Features တွေက FlashableZip တွေ Install လုပ်နိုင်မယ်။ အဲဒီထဲမှာ Custom ROM တွေ၊ Kernel တွေ၊ Install လုပ်တာတွေ၊ Android Rooting အပိုင်းတွေ အကုန်ပါပါတယ်။ Data, Boot, System, Recovery စတဲ့ Partition တွေ အကုန် Backup & Restore လုပ်နိုင်မယ်။ (တနည်းအားဖြင့် Firmware ကြီးတခုလုံးကို Full Backup/Restore လုပ်နိုင်မယ်)
Wipe System, Wipe Data, Factory Reset, Wipe Cache, Dalvik cache, Format Data လုပ်တာတွေ အကုန်ပါပါတယ်။ နောက်ပြီး System, Data, Cache တွေကို Mount/Unmount လုပ်ခွင့်ရှိမယ်။ TWRP Recovery Mode ရဲ့ File Manager ကနေ File တွေအားလုံး Access (Read/Write) လုပ်ခွင့်ရှိမယ်။ နောက်ထပ် Features တွေ အများကြီး ရှိသေးတယ် ဆိုပေမယ့် ဒီလောက်ဆို လုံလောက်မယ် ထင်ပါတယ်။
ဗဟုသုတ တခုအနေနဲ့ သိအောင်ပြောရရင် TWRP(TeamWin Recovery Project) ရဲ့ Lead Developer/Founder က DeesTroy လို့ခေါ်ပါတယ်။ စိတ်ဝင်စားရင် Dees_Troy ရဲ့ XDA Profile မှာ ဝင်ဖတ်ကြည့်နိုင်ပါတယ်။
Requirements
- Linux Computer
- Git and Repo(Google's git-repo)
- Good Internet Connection
- Linux Commands
Sources
- အရင်ဆုံး SourceCode ကနေ Compilation မလုပ်ခင် လိုအပ်တဲ့ Sources တွေ ရှိတဲ့နေရာကိုပြောပြပါမယ်။
- TWRP Recovery တခု Build ဖို့ SourceCode ယူရမယ့် နေရာက နှစ်ခုရှိပါတယ်။ ပထမတခုက OmniROM Source ဖြစ်ပြီး၊ ဒုတိယ တခုက LineageOS Source ဖြစ်ပါတယ်။ ကျွန်တော်ကတော့ OmniROM SourceCode ကနေပဲ Build ပါလို့ အကြံပေးချင်ပါတယ်။ ကျွန်တော်ကိုယ်တိုင်လည်း OmniROM Source ပဲ သုံးပါတယ်။ TWRP ရဲ့ Core Recovery Files တွေက "omnirom/android_bootable_recovery" ဆိုတဲ့ Repository အောက်မှာရှိပါတယ်။ Omni Source က ပိုပြီး Stable ဖြစ်ပါလိမ့်မယ်။
- OmniROM Full SourceCode က Filesize က အရမ်းများတဲ့အတွက် Internet Connection မကောင်းရင် အဆင်မပြေပါဘူး။ ဒါကြောင့် TWRP Build ဖို့ သပ်သပ်လုပ်ထားတဲ့ OmniROM Minimal Manifest Sources တွေကိုပဲ အသုံးပြုပါလို့ အကြံပေးပါတယ်။
- နောက်ထပ် လိုအပ်တာတွေကတော့ ကိုယ့် Android ဖုန်းရဲ့ Device Tree နဲ့ Kernel source ပါပဲ။ ကျွန်တော်ကတော့ ထုံစံအတိုင်း Nexus 5X နဲ့ Nexus 6 နဲ့ နမူနာပေးပြီး ရေးပေးသွားမှာပါ။
- Environment Setup လုပ်တဲ့ အပိုင်းကတော့ AOSP ROM Building Tutorial မှာ ရေးထားပြီးသားဖြစ်လို့ ထပ်ပြီး မပြောတော့ပါဘူး။ ပထမ Tutorial ကို အရင်လေ့လာပြီးမှပဲ အဆင်ပြေပါလိမ့်မယ်။
Downloading The Sources
- Sources တွေ Download မလုပ်ခင် အပေါ်မှာ ပြောခဲ့တဲ့အတိုင်း Computer မှာ Environment Setup လုပ်ပြီးမှ Downloading လုပ်တဲ့ အပိုင်းက အဆင်ပြေပါလိမ့်မယ်။
- ပထမဆုံး Dir တခု ဆောက်ပြီး SourceCode Repos တွေ ကိုယ့်ရဲ့ Local Computer ထဲကို Downloading လုပ်သွားမှာပါ။
Dir တခု ဆောက်ပါမယ်။
mkdir TWRP-Recovery-Project
cd TWRP-Recovery-Project
- ပြီးတဲ့နောက် Local Repository မှာ Sources တွေ Download ချဖို့အတွက် Initialize လုပ်ပေးဖို့ လိုပါတယ်။ ကိုယ့်အောက်ဆုံးထား Build ချင်တဲ့ Android version (branch name) ကို သိရပါမယ် ကျွန်တော်ကတော့ 6.0 branch ပဲသုံးပါတယ်။
repo init -u git://github.com/minimal-manifest-twrp/platform_manifest_twrp_omni.git -b twrp-6.0
(OR)
နောက်ထပ် အကြံပေးချင်တာကတော့ Internet အဆင်မပြေလို့ Sources တွေကို Filesize သက်သက်သာသာနဲ့ Download လုပ်ချင်ရင် အောက်က Command လေး သုံးနိုင်ပါတယ်။ minimal sources တွေက size အရမ်းမများပါဘူး 5GB ကနေ 8GB ကြားလောက်ပဲ ရှိပါတယ်။
repo init --depth=1 -u git://github.com/minimal-manifest-twrp/platform_manifest_twrp_omni.git -b twrp-6.0
Download လုပ်ဖို့အတွက် အောက်က Command လေး ဆက်ရိုက်ပေးပါ။
repo sync
- Downloading အပိုင်းက ကိုယ့်ရဲ့ Internet connection ပေါ်မှာ မူတည်ပြီး ကြာပါလိမ့်မယ်။
- ဒါတွေ ပြီးသွားရင်တော့ TWRP Recovery တခု Build ဖို့ အဆင်သင့် ဖြစ်ပါပြီ။
How To Build
- အရင်ဆုံး SourceCode ကနေပြီးတော့ TWRP Recovery Compilation မလုပ်ခင် Device Tree ထဲမှာ TWRP Flags တွေ ထည့်ပေးဖို့ လိုအပ်ပါတယ်။ ကျွန်တော် အဆင်သင့်ရေးပေးထားပါတယ်။ ဒီ Repo ထဲမှာပါတဲ့ TWRP Flags တွေက အသုံးဝင်မယ်ဆိုတာ Programming နဲ့ မစိမ်းတဲ့သူတယောက်ဆို နားလည်ပါလိမ့်မယ်။ သွားဖတ်ကြည့်ပါ။ Code တွေ အပေါ်မှာ ဘယ်အတွက်သုံးတယ် ဆိုတာနဲ့ အသုံးဝင်ပုံတွေကို Comment Line တွေနဲ့ တခါတည်း နားလည်အောင် ရေးပေးထားပါတယ်။
- ပထမဆုံး ကိုယ် Build မယ့် Android Device ရဲ့ Device Tree နဲ့ Kernel Source လိုပါတယ်။ Device Tree နဲ့ Kernel Source သွားထည့်ပေးရမယ့် Location ကတော့ ROM Building Tutorial ထဲကတိုင်း တူတူပါပဲ။ ထပ်ပြောပေးပါ့မယ် ...
Device Tree Format :
device/manufacturer/device_name
Example For Nexus 6 :
device/moto/shamu
Kernel Source Format :
kernel/manufacturer/device_name (or) chipset_name for any android devices
Example For Nexus 6 (ကျနော်ကတော့ purez kernel သုံးတာဆိုတော့ purez-kernel-shamu လို့ ပြောင်းထားပါတယ်)
kernel/moto/shamu
Vendor Format :
vendor/manufacturer/device_name
Example For Nexus 6 :
vendor/motorola/shamu
- အရင်ဆုံး TWRP Flags တွေနဲ့ ရင်းနှီးသွားအောင် ဒီမှာ သွားလေ့လာကြည့်ပါ။
- ပြီးသွားရင် Device Tree Folder ထဲဝင်လိုက်ပါ။ အဲဒီထဲက BoardConfig.mk မှာ မဖြစ်နေ ထည့်သွင်းရမယ့် TWRP Flags တွေကို အောက်မှာ ဆက်ပြောပေးပါမယ်။
- ဥပမာအနေနဲ့ device/moto/shamu/BoardConfig.mk (ဒါမှမဟုတ်) BoardConfigOmni.mk ကို TextEditor တခုခုနဲ့ ဖွင့်လိုက်ပြီး အောက်က လိုအပ်တဲ့ TWRP Flags တွေ Add ပေးပါ။ TWRP Flags တွေကိုတော့ အသေးစိတ် ရှင်းမပြတော့ပါဘူး။
- ဒီလောက်ဆို TWRP Flags တွေက လုံလောက်မယ် ထင်ပါတယ်။ ဒီထက်မက သိချင်ရင်၊ Features တွေ Add ချင်ရင်တော့ အပေါ်မှာပေးထားတဲ့ Useful-TWRP-flags.mk File ထဲမှာ ဝင်ပြီး လေ့လာနိုင်ပါတယ်။
- Nexus 6 အတွက် Full Device Tree နဲ့ Kernel Source လိုအပ်ရင်တော့ ကျွန်တော့်ရဲ့ GitHub Repo မှာ သွားယူနိုင်ပါတယ်။
- Device Tree
- PureZ Kernel Source
အဲဒါတွေ ပြီးသွားပြီဆိုရင်တော့ TWRP Build တဲ့ လုပ်ငန်းစပါတော့မယ်။ ပထမဆုံး Download လုပ်ထားတဲ့ Source dir ထဲဝင်၊ Terminal ဖွင့်ပြီး အောက်က Command တွေ ရိုက်ပေးပါ။
. build/envsetup.sh
ပြီးသွားရင် ကိုယ် build ချင်တဲ့ Device ကို lunch လုပ်ပေးရပါမယ်။
lunch
lunch လို့ရိုက်လိုက်ရင် Build မယ့် Device Name တွေ တန်းစီပြီး ကျလာပါလိမ့်မယ်။ နံပါတ်လေး ရိုက်လိုက်ရုံပါပဲ။ ဥပမာ - Nexus 6 က No.12 ဆိုရင် 12 လို့ ဆက်ရိုက်လိုက်ရင် ရပါပြီ။
ပြီးတဲ့နောက် Recovery Build ဖို့အတက် အောက်က Command လေး ဆက်ရိုက်ပေးပါ။
mka recoveryimage
ပြီးသွားရင် Compilation Process လုပ်သွားပါလိမ့်မယ်။
အားလုံးပြီးသွားရင်တော့ Output က /out/target/product/your_device_name/recovery.img မှာ recovery.img ထွက်လာပါလိမ့်မယ်။
DONE
TW_THEME := portrait_hdpi
RECOVERY_SDCARD_ON_DATA := true
BOARD_HAS_NO_REAL_SDCARD := true
BOARD_KERNEL_IMAGE_NAME := zImage-dtb
TARGET_KERNEL_SOURCE := kernel/moto/purez-kernel-shamu
TARGET_KERNEL_CONFIG := purez_defconfig
TARGET_KERNEL_ARCH := arm
TARGET_KERNEL_HEADER_ARCH := arm
TARGET_KERNEL_CROSS_COMPILE_PREFIX := arm-eabi-
TW_NO_BATT_PERCENT := true
TW_NO_CPU_TEMP := true
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
TARGET_ARCH := arm
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_VARIANT := krait
TARGET_NO_BOOTLOADER := true
TARGET_NO_RADIOIMAGE := true
TARGET_BOARD_PLATFORM := msm8084
TARGET_BOOTLOADER_BOARD_NAME := shamu
TARGET_NO_RPC := true
TARGET_BOARD_INFO_FILE := device/moto/shamu/board-info.txt
TARGET_USERIMAGES_USE_F2FS := true
TARGET_RECOVERY_FSTAB = device/moto/shamu/fstab.shamu
TW_NO_SCREEN_TIMEOUT := true
TW_INCLUDE_CRYPTO := true
TWHAVE_SELINUX := true
TW_MAX_BRIGHTNESS := 255
TW_DEFAULT_BRIGHTNESS := 112
TW_HAS_NO_RECOVERY_PARTITION := true
/system ext4 /dev/block/platform/msm_sdcc.1/by-name/system
/data ext4 /dev/block/platform/msm_sdcc.1/by-name/userdata flags=encryptable=/dev/block/platform/msm_sdcc.1/by-name/metadata
/cache ext4 /dev/block/platform/msm_sdcc.1/by-name/cache
/firmware ext4 /dev/block/platform/msm_sdcc.1/by-name/modem flags=mounttodecrypt
/boot emmc /dev/block/platform/msm_sdcc.1/by-name/boot
/recovery emmc /dev/block/platform/msm_sdcc.1/by-name/recovery flags=backup=1
#/misc emmc /dev/block/platform/msm_sdcc.1/by-name/misc
/modem emmc /dev/block/platform/msm_sdcc.1/by-name/modem
/mdm1m9kefs1 emmc /dev/block/platform/msm_sdcc.1/by-name/mdm1m9kefs1 flags=backup=1;display=EFS
/mdm1m9kefs2 emmc /dev/block/platform/msm_sdcc.1/by-name/mdm1m9kefs2 flags=backup=1;subpartitionof=/mdm1m9kefs1
/mdm1m9kefs3 emmc /dev/block/platform/msm_sdcc.1/by-name/mdm1m9kefs3 flags=backup=1;subpartitionof=/mdm1m9kefs1
/sbl1 emmc /dev/block/platform/msm_sdcc.1/by-name/sbl1
/tz emmc /dev/block/platform/msm_sdcc.1/by-name/tz
/rpm emmc /dev/block/platform/msm_sdcc.1/by-name/rpm
/sdi emmc /dev/block/platform/msm_sdcc.1/by-name/sdi
/aboot emmc /dev/block/platform/msm_sdcc.1/by-name/aboot
/versions emmc /dev/block/platform/msm_sdcc.1/by-name/versions
/logo emmc /dev/block/platform/msm_sdcc.1/by-name/logo
/usb-otg vfat /dev/block/sda1 /dev/block/sda flags=removable;storage;display=USB-OTG
PRODUCT_COPY_FILES += device/moto/shamu/twrp.fstab:recovery/root/etc/twrp.fstab
TW_DEVICE_VERSION := shamu by ZawZaw
"ZawZaw" ဆိုတဲ့ နေရာမှာ မိမိနာမည်ပဲဖြစ်ဖြစ်၊ "TWRP Device Version" ပဲဖြစ်ဖြစ် ရိုက်ထည့်လို့ရပါတယ်။
Join Us On