Спойлер на доработкеА теперь начинается самое интересное
Для начала создаем папку device для вашего устройства
cd ~/omni/device
mkdir -p vendor_name/device_name
У меня это так
mkdir -p HighScreen/D10A_HighScreen
Далее создаем *.mk файлы в конечной директории, проходим по только что созданному пути в "проводнике".
Создаем файл Android.mk с содержимым:LOCAL_PATH := $(call my-dir)
ifeq ($(TARGET_DEVICE),device_name)
include $(call all-makefiles-under,$(LOCAL_PATH))
endif
У меня это выглядит так
LOCAL_PATH := $(call my-dir)
ifeq ($(TARGET_DEVICE),D10A_HighScreen)
include $(call all-makefiles-under,$(LOCAL_PATH))
endif
Далее создаем файл AndroidProducts.mk с содержимым:PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/device_name.mk \
$(LOCAL_DIR)/omni_device_name.mk
У меня выглядет так
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/D10A_HighScreen.mk \
$(LOCAL_DIR)/omni_D10A_HighScreen.mk
Далее создаем 2 файла которые мы указали в файле AndroidProducts.mk: device_name.mk и omni_device_name.mk. У меня это как не трудно догадаться D10A_HighScreen.mk и omni_D10A_HighScreen.mk
Содержимое файла device_name.mk должно выглядеть так:
LOCAL_PATH := device/vendor_name/device_name
$(shell mkdir -p $(OUT)/obj/KERNEL_OBJ/usr)
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)/dt.img:dt.img \
$(LOCAL_PATH)/recovery.fstab:root/recovery.fstab
$(call inherit-product, build/target/product/full.mk)
PRODUCT_NAME := device_name
$(shell mkdir -p $(OUT)/obj/KERNEL_OBJ/usr) на omni 6.0.1 эта строка уже не нужна и от нее только ошибки сыпятся, на 4.4.4 у меня без нее не собиралось.
Внимание если в вашем ядре и рекавери нет файла dt.img, то у вас не должно быть строки: $(LOCAL_PATH)/dt.img:dt.img \
У меня это выглядет так:
LOCAL_PATH := device/HighScreen/D10A_HighScreen
$(shell mkdir -p $(OUT)/obj/KERNEL_OBJ/usr)
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)/dt.img:dt.img \
$(LOCAL_PATH)/recovery.fstab:root/recovery.fstab
$(call inherit-product, build/target/product/full.mk)
PRODUCT_NAME := D10A_HighScreen
Содержимое файла omni_device_name.mk должно выглядеть так:]
# Inherit device configuration
$(call inherit-product, device/vendor_name/device_name/device_name.mk)
# Device identifier. This must come after all inclusions
PRODUCT_DEVICE := device_name
PRODUCT_NAME := omni_device_name
PRODUCT_BRAND := vendor_name
PRODUCT_MODEL := #модель устройства
PRODUCT_MANUFACTURER := vendor_name
Все эти значения есть в вашей стоковой прошивке system/build.prop, опирайтесь в первую очередь на них. У меня так
# Inherit device configuration
$(call inherit-product, device/HighScreen/D10A_HighScreen/D10A_HighScreen.mk)
# Device identifier. This must come after all inclusions
PRODUCT_DEVICE := D10A_HighScreen
PRODUCT_NAME := omni_D10A_HighScreen
PRODUCT_BRAND := HighScreen
PRODUCT_MODEL := Boost 2se
PRODUCT_MANUFACTURER := HighScreen
Далее, от куда взять 3 файла что мы указали в device_name.mk? Все просто, берем программу
Android Image Kitchen и распаковываем сток рекавери. Будет 2 папки ramdisk и split_img.
В папке split_img берем файл recovery.img-zImage, переименовываем его в kernel. В той же папке берем файл recovery.img-dtb и переименовываем его в dt.img, если этого файла нет, разбираем ядро и ищем там только имя уже будет boot.img-dtb, если и там нет, то он не нужен. Оба файла (или один) ложим по пути device/vendor_name/device_name
Далее идем в папку ramdisk/etc берем файл recovery.fstab, ложим туда же что и предыдущие 2 файла и редактируем его что бы он выглядел примерно так, но пути должны быть ваши!
/system ext4 /dev/block/platform/msm_sdcc.1/by-name/system
/data ext4 /dev/block/platform/msm_sdcc.1/by-name/userdata
/cache ext4 /dev/block/platform/msm_sdcc.1/by-name/cache
/boot emmc /dev/block/platform/msm_sdcc.1/by-name/boot
/recovery emmc /dev/block/platform/msm_sdcc.1/by-name/recovery
/external_sd vfat /dev/block/mmcblk1p1 flags=display="External_sd";storage;wipeingui;removable
/internal_sd vfat /dev/block/platform/msm_sdcc.1/by-name/usbmsc flags=display="Internal_sd";storage;wipeingui;removable
/usb-otg vfat /dev/block/sda1 /dev/block/sda flags=display="USB OTG";storage;wipeingui;removable
Cоздаем файл BoardConfig.mk тут самое сложное и некоторые значения придется дергать от аппарата на том же проце. Ну поехали, пишем туда:
# Platform
TARGET_BOARD_PLATFORM :=
Открываем AIDA64, пункт ЦП, первая строка. У меня так
# Platform
TARGET_BOARD_PLATFORM := msm8226
Далее
# Architecture
TARGET_ARCH := #AIDA64 вторая строка,
TARGET_ARCH_VARIANT :=
TARGET_CPU_ABI :=
TARGET_CPU_ABI2 :=
TARGET_CPU_SMP :=
TARGET_CPU_VARIANT :=
Эти значения тоже спишите, у меня это так
# Architecture
TARGET_ARCH := arm
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
TARGET_CPU_SMP := true
TARGET_CPU_VARIANT := krait
Далее
# Bootloader
TARGET_NO_BOOTLOADER := true
TARGET_BOOTLOADER_BOARD_NAME :=
Первая строчка не меняется, а во второй название чипа у меня так
# Bootloader
TARGET_NO_BOOTLOADER := true
TARGET_BOOTLOADER_BOARD_NAME := MSM8226
Тут остановимся по подробнее:
# Kernel
TARGET_PREBUILT_KERNEL := #тут указываем путь к ядру device/vendor_name/device_name/kernel
BOARD_KERNEL_CMDLINE :=
BOARD_KERNEL_BASE :=
BOARD_KERNEL_PAGESIZE :=
BOARD_KERNEL_SEPARATED_DT := true
BOARD_MKBOOTIMG_ARGS :=
С первой строкой разберетесть, строка BOARD_KERNEL_CMDLINE, идем в папку разобраного рекавери и ищем файл recovery.img-cmdline и его содержимое вписываем в эту строку.
Строка BOARD_KERNEL_BASE в той же папке файл recovery.img-base его содержие вписываем в эту строку.
Строка BOARD_KERNEL_PAGESIZE там же файл recovery.img-pagesize его содержие вписываем в эту строку.
Эта BOARD_KERNEL_SEPARATED_DT := true строку не меняем.
Тут BOARD_MKBOOTIMG_ARGS сначала указываем путь к dt.img --dt device/vendor_name/device_name/dt.img Далее --kernel_offset тут пишем содержимое файла recovery.img-kerneloff
Внимание если в вашем ядре и рекавери нет файла dt.img, то у вас не должно быть строки:BOARD_KERNEL_SEPARATED_DT := true
И в строке:
BOARD_MKBOOTIMG_ARGS := --dt device/vendorname/devicename/dt.img --kernel_offset 0x******** --ramdisk_offset 0x******** --tags_offset 0x********
Не должно быть пути к этому файлу
--dt device/vendorname/devicename/dt.img, просто пишем так:
BOARD_MKBOOTIMG_ARGS := --kernel_offset 0x******** --ramdisk_offset 0x******** --tags_offset 0x********
Далее --ramdisk_offset тут содержимое файла recovery.img-ramdiskoff И наконец --tags_offset тут содержимое файла recovery.img-tagsoff, ещё нужно добавить перед каждым значением 0x(ваши символы) для наглядности смотрим ниже. У меня это выглядет так
# Kernel
TARGET_PREBUILT_KERNEL := device/HighScreen/D10A_HighScreen/kernel
BOARD_KERNEL_CMDLINE := console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 lpj=192000
BOARD_KERNEL_BASE := 0x00000000
BOARD_KERNEL_PAGESIZE := 2048
BOARD_KERNEL_SEPARATED_DT := true
BOARD_MKBOOTIMG_ARGS := --dt device/HighScreen/D10A_HighScreen/dt.img --kernel_offset 0x00008000 --ramdisk_offset 0x02000000 --tags_offset 0x01e00000
Следующее что нам нужно, это размеры разделов в байтах. Скачиваем с гугл плей "эмулятор терминала" и пишем
Открываем DiskInfo, 3 точки, настройки, ставим галки Название раздела, Экспертный режим и Отмонтированные разделы. Ищем нужный раздел, берём число из терминала и умножаем на 1024, впысываем
# Partitions
BOARD_BOOTIMAGE_PARTITION_SIZE :=
BOARD_RECOVERYIMAGE_PARTITION_SIZE :=
BOARD_SYSTEMIMAGE_PARTITION_SIZE :=
BOARD_CACHEIMAGE_PARTITION_SIZE :=
BOARD_USERDATAIMAGE_PARTITION_SIZE :=
BOARD_FLASH_BLOCK_SIZE := 131072
Строка BOARD_FLASH_BLOCK_SIZE это стяните с похожего аппарата, но я не видел другого значения пока что.
# Recovery
TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888" #Открываем AIDA64, Отображение и внизу строка GL_EXT_texture_format
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_HAS_LARGE_FILESYSTEM := true
BOARD_USE_CUSTOM_RECOVERY_FONT := \"roboto_15x24.h\"
BOARD_SUPPRESS_EMMC_WIPE := true
И последнее
# TWRP
HAVE_SELINUX := true
DEVICE_RESOLUTION := # тут пишем разрешение экрана
TW_IGNORE_MAJOR_AXIS_0 := # это смотрим как у похожего аппарата
RECOVERY_GRAPHICS_USE_LINELENGTH := # это смотрим как у похожего аппарата
BOARD_HAS_NO_REAL_SDCARD := # # это если у вас отдельный раздел для внутренней памяти, а не в разделе /data (/data/media)
TW_DEFAULT_EXTERNAL_STORAGE := # это смотрим как у похожего аппарата
TW_INTERNAL_STORAGE_PATH := # тут пишем например "/internal_sd" - эти значения у вас прописаны в recovery.fstab
TW_INTERNAL_STORAGE_MOUNT_POINT := #тогда тут "internal_sd"
TW_EXTERNAL_STORAGE_PATH := #тут пишем "/external_sd"
TW_EXTERNAL_STORAGE_MOUNT_POINT := #тогда тут"external_sd"
# USB Mounting
TARGET_USE_CUSTOM_LUN_FILE_PATH := /sys/devices/platform/msm_hsusb/gadget/lun%d/file #вот эту строку ищите сами прогой root explorer проходите по этому пути, у вас может быть по другому.
И создаём последний файл vendorsetup.sh с содержимым
add_lunch_combo omni_device_name-userdebug
У меня это так
add_lunch_combo omni_D10A_HighScreen-userdebug
Все, теперь приступим к сборке