Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
android:build_twrp_from_source_ubuntu_16.04 [2018/10/13 22:18] – admin | android:build_twrp_from_source_ubuntu_16.04 [2019/02/11 09:13] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | Все что тут написано вцелом соотвествует официальной позиции: | ||
+ | По мотивам https:// | ||
+ | https:// | ||
+ | Сборка **TWRP** для телефона **NOMU S30 Mini** из исходников **Omni ROM** под **Ubuntu 16.04** | ||
+ | ====== Подготовка окружения для сборки ====== | ||
+ | https:// | ||
+ | На конец января 2018, ветки 8.0 и 8.1 мне собрать не удалось. В ветке **8.1** не собирается **recovery ramdisk**, по причине отсутствия **adbd** (видимо нет правила в make-файле, | ||
+ | В ветке **7.0 TWRP** версии **3.0**. Оно собирается, | ||
+ | Наконец, | ||
+ | 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:// | ||
+ | chmod a+x ~/bin/repo | ||
+ | | ||
+ | export USE_CCACHE=1 | ||
+ | export PATH=~/ | ||
+ | echo ' | ||
+ | echo ' | ||
+ | | ||
+ | cd ~/omni | ||
+ | | ||
+ | repo init -u https:// | ||
+ | repo sync -j4 -f --no-clone-bundle | ||
+ | | ||
+ | |||
+ | | ||
+ | ====== Конфигурирование устройства ====== | ||
+ | cd ~/ | ||
+ | mkdir --parents ./nomu/nomu | ||
+ | |||
+ | ===== Файлы конфигурации ===== | ||
+ | В папке **~/ | ||
+ | * Android.mk | ||
+ | * AndroidProducts.mk | ||
+ | * BoardConfig.mk - можно найти в интернете, | ||
+ | * **kernel** - это ядро из стокового рекавери | ||
+ | * nomu.mk | ||
+ | * omni_nomu.mk | ||
+ | * **recovery.fstab** - создается на базе **fstab**' | ||
+ | * vendorsetup.sh | ||
+ | |||
+ | ==== Android.mk ==== | ||
+ | < | ||
+ | LOCAL_PATH := $(call my-dir) | ||
+ | ifneq ($(filter nomu, | ||
+ | include $(call all-subdir-makefiles, | ||
+ | endif | ||
+ | </ | ||
+ | |||
+ | ==== AndroidProducts.mk ==== | ||
+ | < | ||
+ | PRODUCT_MAKEFILES := \ | ||
+ | $(LOCAL_DIR)/ | ||
+ | $(LOCAL_DIR)/ | ||
+ | </ | ||
+ | |||
+ | ==== BoardConfig.mk ==== | ||
+ | Значения для раздела **# | ||
+ | Значения для раздела **#Kernel** можно получить при распаковке оригинального **recovery** с помощью **Android Image Kitchen**. Нужно учесть, | ||
+ | < | ||
+ | # Local path | ||
+ | LOCAL_PATH := device/ | ||
+ | |||
+ | # 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, | ||
+ | BOARD_MKBOOTIMG_ARGS := --board 1508136661 --ramdisk_offset 0x03f88000 --second_offset 0x00e88000 --tags_offset 0x0df88000 | ||
+ | TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/ | ||
+ | |||
+ | # Recovery | ||
+ | TARGET_RECOVERY_PIXEL_FORMAT := " | ||
+ | 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)/ | ||
+ | TW_DEFAULT_BRIGHTNESS := 80 | ||
+ | TW_DEFAULT_EXTERNAL_STORAGE := true | ||
+ | TW_EXCLUDE_SUPERSU := true | ||
+ | TW_EXTERNAL_STORAGE_PATH := "/ | ||
+ | TW_EXTERNAL_STORAGE_MOUNT_POINT := " | ||
+ | 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 | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | ==== nomu.mk ==== | ||
+ | < | ||
+ | LOCAL_PATH := device/ | ||
+ | |||
+ | ifeq ($(TARGET_PREBUILT_KERNEL), | ||
+ | LOCAL_KERNEL := $(LOCAL_PATH)/ | ||
+ | else | ||
+ | LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL) | ||
+ | endif | ||
+ | |||
+ | PRODUCT_COPY_FILES += \ | ||
+ | $(LOCAL_PATH)/ | ||
+ | $(LOCAL_PATH)/ | ||
+ | |||
+ | $(call inherit-product, | ||
+ | |||
+ | PRODUCT_NAME := nomu | ||
+ | </ | ||
+ | |||
+ | ==== omni_nomu.mk ==== | ||
+ | < | ||
+ | # Inherit device configuration | ||
+ | $(call inherit-product, | ||
+ | |||
+ | # 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 ==== | ||
+ | < | ||
+ | / | ||
+ | #/ | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | |||
+ | / | ||
+ | / | ||
+ | |||
+ | /frp emmc / | ||
+ | / | ||
+ | / | ||
+ | /lk | ||
+ | /para | ||
+ | /boot | ||
+ | / | ||
+ | /logo | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | /tee1 | ||
+ | /tee2 | ||
+ | </ | ||
+ | |||
+ | ==== vendorsetup.sh ==== | ||
+ | < | ||
+ | add_lunch_combo omni_nomu-userdebug | ||
+ | </ | ||
+ | |||
+ | ====== Сборка ====== | ||
+ | cd ~/omni | ||
+ | . build/ | ||
+ | lunch omni_nomu-userdebug | ||
+ | make -j5 recoveryimage | ||
+ | |||
+ | Результат - файлик **recovery.img** в папке **~/ | ||
+ | ====== Проблемы ====== | ||
+ | * После сборки и загрузки новое **recovery** ничего не делает, | ||
+ | Скорее всего в файле **BoardConfig.mk** некорректно указаны параметры загрузки ядра - **BOARD_KERNEL_BASE** и **BOARD_MKBOOTIMG_ARGS**. | ||
+ | * После сборки и загрузки новое **recovery** циклически перезагружается на логотипе **TWRP**. | ||
+ | Это означает, | ||
+ | * **lunch: command not found**. Это сообщение появляется если не выполнить | ||
+ | < |