Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
android:build_twrp_from_source_ubuntu_16.04 [2018/10/13 22:18] adminandroid:build_twrp_from_source_ubuntu_16.04 [2019/02/11 09:13] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +Все что тут написано вцелом соотвествует официальной позиции: 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 ====
 +<code>
 +LOCAL_PATH := $(call my-dir)
 +ifneq ($(filter nomu,$(TARGET_DEVICE)),)
 +include $(call all-subdir-makefiles,$(LOCAL_PATH))
 +endif                                                                                                                                                                                                                                                        
 +</code>
 +
 +==== AndroidProducts.mk ====
 +<code>
 +PRODUCT_MAKEFILES := \
 +$(LOCAL_DIR)/nomu.mk \
 +$(LOCAL_DIR)/omni_nomu.mk
 +</code>
 +
 +==== BoardConfig.mk ====
 +Значения для раздела **#Filesystem** можно взять из **scatter.file** из стоковой прошивки. \\
 +Значения для раздела **#Kernel** можно получить при распаковке оригинального **recovery** с помощью **Android Image Kitchen**. Нужно учесть, что **AIK** сохраняет в файлы шестнадцатеричные значения, хотя префикса (0x) на это указывающего он не ставит!!
 +<code>
 +# 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
 +</code>
 +
 +==== nomu.mk ====
 +<code>
 +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
 +</code>
 +
 +==== omni_nomu.mk ====
 +<code>
 +# 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
 +</code>
 +
 +==== recovery.fstab ====
 +<code>
 +/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
 +</code>
 +
 +==== vendorsetup.sh ====
 +<code>
 +add_lunch_combo omni_nomu-userdebug
 +</code>
 +
 +====== Сборка ======
 +  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**. Это сообщение появляется если не выполнить  
 +<code>. build/envsetup.sh</code>
  • android/build_twrp_from_source_ubuntu_16.04.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1