Все что тут написано вцелом соотвествует официальной позиции: https://source.android.com/setup/add-device
По мотивам https://4pda.ru/forum/index.php?showtopic=636604
https://forum.xda-developers.com/showthread.php?t=2073775
Сборка TWRP для телефона NOMU S30 Mini из исходников Omni ROM под Ubuntu 16.04
Подготовка окружения для сборки
https://docs.omnirom.org/Setting_Up_A_Compile_Environment
На конец января 2018, ветки 8.0 и 8.1 мне собрать не удалось. В ветке 8.1 не собирается recovery ramdisk, по причине отсутствия adbd (видимо нет правила в make-файле, которое бы собрало бинарник adbd, а make-файл который собирает ramdisk его требует.).
В ветке 7.0 TWRP версии 3.0. Оно собирается, но не может установить SuperSU.
Наконец, все удачно собралось в ветке omni 7.1 и TWRP версии 3.1 смогло нормально поставить SuperSU версии 2.82!! Ура :)
sudo apt-get install bison build-essential curl flex g++-multilib gcc-multilib git-core gnupg gperf lib32ncurses5-dev lib32readline6-dev lib32z1-dev libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush schedtool squashfs-tools xsltproc zip unzip zlib1g-dev software-properties-common libc6-dev-i386 x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev maven nano openjdk-8-jdk git config --global user.name MikeQ123 git config --global user.email mike.obninsk@gmail.com mkdir ~/bin mkdir ~/omni curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo export USE_CCACHE=1 export PATH=~/bin:$PATH echo 'export USE_CCACHE=1' >> ~/.bashrc echo 'PATH=~/bin:$PATH' >> ~/.bashrc cd ~/omni repo init -u https://github.com/omnirom/android.git -b android-7.1 repo sync -j4 -f --no-clone-bundle
Конфигурирование устройства
cd ~/omni/device mkdir --parents ./nomu/nomu
Файлы конфигурации
В папке ~/omni/device/nomu/nomu нужно создать файлы:
- Android.mk
- AndroidProducts.mk
- BoardConfig.mk - можно найти в интернете, например - https://github.com/Bauuuuu/android_device_blackview_6000s/blob/cm-14.1/BoardConfig.mk
- kernel - это ядро из стокового рекавери
- nomu.mk
- omni_nomu.mk
- recovery.fstab - создается на базе fstab'a из стокового рекавери.
- vendorsetup.sh
Android.mk
LOCAL_PATH := $(call my-dir) ifneq ($(filter nomu,$(TARGET_DEVICE)),) include $(call all-subdir-makefiles,$(LOCAL_PATH)) endif
AndroidProducts.mk
PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/nomu.mk \ $(LOCAL_DIR)/omni_nomu.mk
BoardConfig.mk
Значения для раздела #Filesystem можно взять из scatter.file из стоковой прошивки.
Значения для раздела #Kernel можно получить при распаковке оригинального recovery с помощью Android Image Kitchen. Нужно учесть, что AIK сохраняет в файлы шестнадцатеричные значения, хотя префикса (0x) на это указывающего он не ставит!!
# Local path LOCAL_PATH := device/nomu/nomu # Platform TARGET_BOARD_PLATFORM := mt6737t TARGET_BOOTLOADER_BOARD_NAME := nomu TARGET_NO_BOOTLOADER := true TARGET_CPU_SMP := true ARCH_ARM_HAVE_NEON := true ARCH_ARM_HAVE_TLS_REGISTER := true ARCH_ARM_HAVE_VFP := true # Architecture TARGET_ARCH := arm64 TARGET_ARCH_VARIANT := armv8-a TARGET_CPU_ABI := arm64-v8a TARGET_CPU_ABI2 := 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-a53 TARGET_BOARD_SUFFIX := _64 TARGET_BOARD_PLATFORM_GPU := mali-t720mp2 TARGET_USES_64_BIT_BINDER := true # MTK Hardware BOARD_USES_MTK_HARDWARE := true # Charger BOARD_CHARGER_SHOW_PERCENTAGE := true # File System BOARD_BOOTIMAGE_PARTITION_SIZE := 0x01000000 BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x01000000 BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0xdd800000 BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x60000000 BOARD_CACHEIMAGE_PARTITION_SIZE := 0x19000000 BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4 BOARD_FLASH_BLOCK_SIZE := 131072 TARGET_USERIMAGES_USE_EXT4 := true # Kernel TARGET_KMODULES := true BOARD_KERNEL_BASE := 0x40078000 BOARD_KERNEL_PAGESIZE := 2048 BOARD_KERNEL_CMDLINE := bootopt=64S3,32N2,64N2 BOARD_MKBOOTIMG_ARGS := --board 1508136661 --ramdisk_offset 0x03f88000 --second_offset 0x00e88000 --tags_offset 0x0df88000 TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel # Recovery TARGET_RECOVERY_PIXEL_FORMAT := "RGBA_8888" BOARD_HAS_NO_SELECT_BUTTON := true BOARD_HAS_LARGE_FILESYSTEM := true BOARD_SUPPRESS_SECURE_ERASE := true # TWRP RECOVERY_SDCARD_ON_DATA := true TARGET_RECOVERY_FSTAB := $(LOCAL_PATH)/recovery.fstab TW_DEFAULT_BRIGHTNESS := 80 TW_DEFAULT_EXTERNAL_STORAGE := true TW_EXCLUDE_SUPERSU := true TW_EXTERNAL_STORAGE_PATH := "/external_sd" TW_EXTERNAL_STORAGE_MOUNT_POINT := "external_sd" TW_FLASH_FROM_STORAGE := true TW_INCLUDE_CRYPTO := true TW_MAX_BRIGHTNESS := 255 TW_NEW_ION_HEAP := true TW_NO_SCREEN_BLANK := true TW_THEME := portrait_hdpi TWHAVE_SELINUX := true # Disable memcpy opt (For Audio) TARGET_CPU_MEMCPY_OPT_DISABLE := true # Fonts EXTENDED_FONT_FOOTPRINT := true # Vold #TARGET_USE_CUSTOM_LUN_FILE_PATH := /sys/devices/soc/11270000.usb3/musb-hdrc/gadget/lun%d/file
nomu.mk
LOCAL_PATH := device/nomu/nomu ifeq ($(TARGET_PREBUILT_KERNEL),) LOCAL_KERNEL := $(LOCAL_PATH)/kernel else LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL) endif PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/kernel:kernel \ $(LOCAL_PATH)/recovery.fstab:root/recovery.fstab $(call inherit-product, build/target/product/full.mk) PRODUCT_NAME := nomu
omni_nomu.mk
# Inherit device configuration $(call inherit-product, device/nomu/nomu/nomu.mk) # Device identifier. This must come after all inclusions PRODUCT_DEVICE := nomu PRODUCT_NAME := omni_nomu PRODUCT_BRAND := nomu PRODUCT_MODEL := S30mini PRODUCT_MANUFACTURER := nomu
recovery.fstab
/system ext4 /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/system flags=backup=1;canbewiped;wipeingui #/data ext4 /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/userdata flags=backup=1;canbewiped;wipeingui;wipeduringfactoryreset;settingsstorage;encryptable=/dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/metadata /cache ext4 /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/cache flags=backup=1;canbewiped;wipeingui;wipeduringfactoryreset /protect_f ext4 /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/protect1 flags=display="Protect_F";backup=1 /protect_s ext4 /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/protect2 flags=display="Protect_S";backup=1 /nvdata ext4 /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/nvdata flags=display="NvData";backup=1 /external_sd vfat /dev/block/mmcblk1p1 flags=backup=0;wipeingui;storage;removable;settingsstorage /usb-otg auto /dev/block/sda1 /dev/block/sda flags=backup=0;wipeingui;storage;removable /frp emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/frp flags=display="Frp";backup=1 /nvram emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/nvram flags=display="NvRAM";backup=1;flashimg=1 /proinfo emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/proinfo flags=display="ProInfo";backup=1 /lk emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/lk flags=display="Uboot";backup=1;flashimg=1 /para emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/para flags=display="Para";backup=1 /boot emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/boot flags=backup=1;canbewiped;wipeingui /recovery emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/recovery flags=backup=1;canbewiped;wipeingui /logo emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/logo flags=display="Logo";backup=1;flashimg=1 /expdb emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/expdb /secro emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/secro flags=display="Secro";backup=1 /seccfg emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/seccfg /tee1 emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/tee1 flags=display="Tee1";backup=1;flashimg=1 /tee2 emmc /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/tee2 flags=display="Tee2";backup=1;flashimg=1
vendorsetup.sh
add_lunch_combo omni_nomu-userdebug
Сборка
cd ~/omni . build/envsetup.sh lunch omni_nomu-userdebug make -j5 recoveryimage
Результат - файлик recovery.img в папке ~/omni/out/product/target/nomu/
Проблемы
- После сборки и загрузки новое recovery ничего не делает, а просто еще раз перезагружает аппарат.
Скорее всего в файле BoardConfig.mk некорректно указаны параметры загрузки ядра - BOARD_KERNEL_BASE и BOARD_MKBOOTIMG_ARGS.
- После сборки и загрузки новое recovery циклически перезагружается на логотипе TWRP.
Это означает, что ядро нормально загрузилось, но система не может начать работать. Скорее всего проблемы с монтированием разделов. Нужно править recovery.fstab.
- lunch: command not found. Это сообщение появляется если не выполнить
. build/envsetup.sh
Discussion