Skip to content

Параграф 5: Адаптация исходников устройства

Внимание!

Здесь будут общие знания и они будут касаться в основном дерева. По поводу более детальной адаптации смотрите репозиторий прошивки в поисках примеров и спрашивайте у поддержки.

И так, для базы своего дерева я рекомендую взять дерево для Lineage OS. И так, почему? Потому что Lineage OS реализовала некоторые фичи, которые также используются в Lineage-based прошивках (логично), либо были портированы на AOSP-based прошивки. К примеру:

  • FlipFlap - поддержка магнитных чехлов
  • Touch HAL - поддержка кастомных фич тачскрина
  • LiveDisplay HAL - поддержка кастомной настройки дисплея

В пример возьмем дерево для mido.

Общие моменты

Как мы уже выяснили, есть конфиг lineage_mido.mk. Его надо переименовать в соответствии с прошивкой (см. другие деревья для этой прошивки). К примеру, в carbon_mido.mk. Далее открываем этот файл. Находим переменную PRODUCT_NAME, там будет следующий текст

makefile
PRODUCT_NAME := lineage_mido

Логично предположить, что lineage надо менять на carbon

makefile
PRODUCT_NAME := carbon_mido

Чуть выше мы увидим данный код

makefile
$(call inherit-product, vendor/lineage/config/common_full_phone.mk)

Так-с, здесь надо смотреть на что менять. К примеру в CarbonROM надо вписать следующий код (это для смартфонов, так как mido это смартфон, а не планшет или что-то еще)

makefile
$(call inherit-product, vendor/carbon/config/gsm.mk)
$(call inherit-product, vendor/carbon/config/common.mk)

Так, сохраняем, открываем AndroidProducts.mk. Сразу видим, что у нас есть следующий код

makefile
PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/lineage_mido.mk

COMMON_LUNCH_CHOICES := \
    lineage_mido-user \
    lineage_mido-userdebug \
    lineage_mido-eng

Опять-таки логично подумать, что надо lineage поменять на carbon (как минимум мы же переименовали lineage_mido.mk в carbon_mido.mk), это верно. lineage_mido.mk меняем на carbon_mido.mk, а lineage_mido-user и т. д. меняем на carbon_mido-user и т. д. (это вариации какой билд можно собрать). И должно получиться нечто такое

makefile
PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/carbon_mido.mk

COMMON_LUNCH_CHOICES := \
    carbon_mido-user \
    carbon_mido-userdebug \
    carbon_mido-eng

Lineage OS based -> Lineage OS based

По факту хватит всего того, что описано выше.

Lineage OS based -> AOSP based

Выясняем, чего нету в прошивке. В CarbonROM к примеру нету каких либо из фич, которые я перечислял в самом начале параграфа. Требуется вырезать Touch HAL, LiveDisplay и FlipFlap overlay, если все это есть и этого в прошивке нет. Touch HAL лежит в папке touch, LiveDisplay HAL - в папке livedisplay, FlipFlap overlay - в lineage-overlay/packages/apps/FlipFlap. Все эти папки вырезаем. Далее открываем файл device.mk и убираем следующий код

makefile
# Touch features
PRODUCT_PACKAGES += \
    vendor.lineage.touch@1.0-service.xiaomi_mido
makefile
# LiveDisplay
PRODUCT_PACKAGES += \
    vendor.lineage.livedisplay@2.0-service.xiaomi_mido
makefile
# FlipFlap
PRODUCT_PACKAGES += \
   FlipFlap

Также вырезаем сборку Trust HAL (если его в прошивке нет)

makefile
# Trust HAL
PRODUCT_PACKAGES += \
    vendor.lineage.trust@1.0-service

Сохраняем и закрываем файл.

Теперь требуется отредактировать SEPolicy! Открываем sepolicy/vendor/file_contexts и находим следующее:

makefile
/(vendor|system/vendor)/bin/hw/vendor\.lineage\.livedisplay@2\.0-service\.xiaomi_mido u:object_r:hal_lineage_livedisplay_qti_exec:s0
/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.xiaomi_mido       u:object_r:hal_lineage_touch_default_exec:s0

Вспоминаем, что LideDisplay HAL и Touch HAL были благополучно удалены, поэтому удаляем эти две строчки, но надо убрать в SEPolicy еще и правила для hal_lineage_livedisplay_qti_exec и hal_lineage_touch_default_exec. Самое простое - grep'нуть все правила SEPolicy нашего дерева. Делается так:

bash
grep -InRI "place_here_searched_text"

Таким образом мы увидим все файлы, которые имеют включение текста place_here*_*searched_text, надеюсь логика понятна. И так, ищем и удаляем эти правила. Если файл состоит целиком из того, что относится к искомым типам, то попросту удаляем (скорее всего так и будет). Уря! Готово!

AOSP based -> Lineage OS based

Тут по факту хватило бы общих моментов для данного дела, однако мы помним, что есть такие фичи как Touch HAL и LiveDisplay HAL! Их можно написать и добавить правила SEPolicy для них. Если Вы написали/портировали/перенесли HAL и он работает в Permissive, то я поздравляю. Следующий шаг это добавить новый HAL в file_contexts, собрать прошивку и установить ее. Далее вертим HAL как можем, чтобы набрались отказы SEPolicy. Как только мы собрали все отказы, сохраняем logcat и добавляем эти правила на базе собранных отказов. Переводим SELinux в Enforcing, собираем, ставим и проверяем. Если все работает, то я поздравляю, Вы сделали это!

Напоследок

Не гнушайтесь смотреть чужие деревья. Вы не можете сходу все знать. Делайте по примеру других и чуть-чуть вносите свою лепту, если это требуется. И сохраняйте авторство! 😃