Параграф 5: Адаптация исходников устройства
Внимание!
Здесь будут общие знания и они будут касаться в основном дерева. По поводу более детальной адаптации смотрите репозиторий прошивки в поисках примеров и спрашивайте у поддержки.
И так, для базы своего дерева я рекомендую взять дерево для Lineage OS. И так, почему? Потому что Lineage OS реализовала некоторые фичи, которые также используются в Lineage-based прошивках (логично), либо были портированы на AOSP-based прошивки. К примеру:
FlipFlap
- поддержка магнитных чехловTouch HAL
- поддержка кастомных фич тачскринаLiveDisplay HAL
- поддержка кастомной настройки дисплея
В пример возьмем дерево для mido.
Общие моменты
Как мы уже выяснили, есть конфиг lineage_mido.mk
. Его надо переименовать в соответствии с прошивкой (см. другие деревья для этой прошивки). К примеру, в carbon_mido.mk
. Далее открываем этот файл. Находим переменную PRODUCT_NAME
, там будет следующий текст
PRODUCT_NAME := lineage_mido
Логично предположить, что lineage надо менять на carbon
PRODUCT_NAME := carbon_mido
Чуть выше мы увидим данный код
$(call inherit-product, vendor/lineage/config/common_full_phone.mk)
Так-с, здесь надо смотреть на что менять. К примеру в CarbonROM надо вписать следующий код (это для смартфонов, так как mido это смартфон, а не планшет или что-то еще)
$(call inherit-product, vendor/carbon/config/gsm.mk)
$(call inherit-product, vendor/carbon/config/common.mk)
Так, сохраняем, открываем AndroidProducts.mk
. Сразу видим, что у нас есть следующий код
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
и т. д. (это вариации какой билд можно собрать). И должно получиться нечто такое
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
и убираем следующий код
# Touch features
PRODUCT_PACKAGES += \
vendor.lineage.touch@1.0-service.xiaomi_mido
# LiveDisplay
PRODUCT_PACKAGES += \
vendor.lineage.livedisplay@2.0-service.xiaomi_mido
# FlipFlap
PRODUCT_PACKAGES += \
FlipFlap
Также вырезаем сборку Trust HAL (если его в прошивке нет)
# Trust HAL
PRODUCT_PACKAGES += \
vendor.lineage.trust@1.0-service
Сохраняем и закрываем файл.
Теперь требуется отредактировать SEPolicy! Открываем sepolicy/vendor/file_contexts
и находим следующее:
/(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 нашего дерева. Делается так:
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, собираем, ставим и проверяем. Если все работает, то я поздравляю, Вы сделали это!
Напоследок
Не гнушайтесь смотреть чужие деревья. Вы не можете сходу все знать. Делайте по примеру других и чуть-чуть вносите свою лепту, если это требуется. И сохраняйте авторство! 😃