Все что тут написано вцелом соотвествует официальной позиции: 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 нужно создать файлы:

LOCAL_PATH := $(call my-dir)
ifneq ($(filter nomu,$(TARGET_DEVICE)),)
include $(call all-subdir-makefiles,$(LOCAL_PATH))
endif                                                                                                                                                                                                                                                        
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/nomu.mk \
$(LOCAL_DIR)/omni_nomu.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
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
# 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
/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
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
Enter your comment. Wiki syntax is allowed:
 
  • android/build_twrp_from_source_ubuntu_16.04.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1