Разработка и портирование GSI-прошивок
Какой Архитектурой Вы Пользуетесь?
Архитектуры.
arm64-ab [ 3133 ] ** [54.19%]
arm64-a [ 1670 ] ** [28.89%]
a64-ab [ 430 ] ** [7.44%]
a64-a [ 153 ] ** [2.65%]
arm-ab [ 56 ] ** [0.97%]
arm-a [ 339 ] ** [5.86%]
Всего голосов: 5781
 



Реп: (2627)
Разработка и портирование GSI-прошивок


Обязательные правила оформления отзыва // сообщения об ошибке


Treble Info - проверка совместимости устройства с Project Treble

Обязательно к прочтению!
Уважаемые пользователи!
Напоминаю, что наш раздел называется «Android - Разработка и программирование», а это значит, что данная тема предназначена прежде всего для разработчиков.

Поэтому с сегодняшнего дня в теме запрещается обсуждение нюансов работы GSI-прошивок на конкретных устройствах. Все эти вопросы обсуждаются в темах по прошивкам ваших устройств в разделе «Android - Прошивки».
Это официальное предупреждение. За игнорирование этого предупреждения особо настырные получат режим read-only ("только чтение")
.

Благодарю за понимание! Приятного общения.


Читать обязательно.
Для отчёта/отзыва, сообщения о проблеме.
Разработка и портирование GSI-прошивок (Пост derak1129 #95942923)


Описание
Что такое Project Treble?

Project Treble разделяет низкоуровневые драйверы и остальную часть операционной системы, чтобы производители и сторонние разработчики имели возможность быстрее и легче выпускать обновления. Для устройств с Android 8.x Oreo «из коробки» поддержка Treble является обязательным условием, а для более старых смартфонов и планшетов опция доступна на выбор.

Инструкции
FAQ

Универсальные инструкции

Инструкции по сборке/портированию


Прошивки
Шаблон для оформления поста с прошивкой

Патчи для запуска прошивок gsi.
Lite GSI Images - Урезанные Образы Прошивок От zerovoid
Android All GSIs + Дополнение

Android 14
Android 13
Android 12.x

Android 12.1:

Android 12:


Android 11
Прошивки от ~Игорь~
Прошивки от Braialindo

Официальный релиз
Обновляемый пост переводов для прошивок


Android 10
Прошивки от ~Игорь~
Сборник прошивок от Igor~s


Релиз Android 10



Android 9


Android 8.x.x


Решение проблем
Сертификация устройства




Полезное




Куратор темы Lux Darkus


Сообщение отредактировал Lux Darkus - 25.05.23, 14:45



Реп: (8729)
Про "A/B" структуру разделов и "seamless" обновления
Или ответ на вопрос: "Что не так с моим устройством? Почему он не такой как все?"


Начнем. Вы, наверное, слышали, что в некоторых устройствах используется какая-то диковинная A/B структура разделов . Она отличается от структуры в большинстве Android устройств.
На ней как-то странно и непривычно устанавливаются обновления, прямо при работающей системе (O_o). Внутри OTA образов другая, нечитабельная структура. Установка TWRP сопровождается какими-то, раннее не встречаемыми, сложностями, дополнительными манипуляциями и значительно отличается от всего, что "я" раньше видел. Все говорят о каких-то буквах "А", "Б", слотах, двух и системах и прочих, непонятных "мне", вещах. Что же, давайте попробуем во всем этом разобраться.


Начнем с общих вопросов:
Q: Ну и кто все это придумал? Проклятые производители простым гикам жизнь усложняют?
A: Новая структура "A/B разделов" разработана непосредственно Google-ом как часть глобальных изменений в архитектуре Android. Она успешно используется в смартфонах Google Pixel, Essential Phone и различных других устройствах. В дальнейшем все больше устройств от сторонних производителей будут ее использовать. Ничего плохого и страшного в этом нет, наоборот, открывается много новых возможностей.

Q: Так что же из себя представляет A/B структура разделов?
A: Если говорить совсем просто — внутри вашего устройства расположены сразу две (а в зависимости от реализации и больше), независимые между собой, системы. Что-то на подобии MultiROM (если слышали о таком), только с гораздо более продуманной реализацией на более низком уровне. Если интересует конкретная информация с объяснением всех аспектов - прошу продолжить чтение.


Таблица разделов на примере Google Pixel:
Дабы наглядно отобразить, изложенную выше, теорию и увидеть отличия по сравнению с другими устройствами — познакомимся с таблицей разделов Google Pixel.
Если вы вообще не знакомы со структурой разделов в Linux-подобных системах, и Android в частности, — советую поискать информацию об этом в Google, благо ее полно.

Нас интересуют конкретные разделы, существующие в двух копиях для наглядности и демонстрации.
Итак (раскрываем код полностью):
/dev/block/bootdevice/by-name/aboot_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/apdp_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/bootlocker_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/cmnlib32_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/cmnlib64_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/devcfg_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/hosd_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/hyp_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/keymaster_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/msadp_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/pmic_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/rpm_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/tz_a # Разделы первого загрузчика (Слот "a")
/dev/block/bootdevice/by-name/xbl_a # Разделы первого загрузчика (Слот "a")

/dev/block/bootdevice/by-name/aboot_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/apdp_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/bootlocker_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/cmnlib32_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/cmnlib64_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/devcfg_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/hosd_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/hyp_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/keymaster_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/msadp_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/pmic_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/rpm_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/tz_b # Разделы второго загрузчика (Слот "b")
/dev/block/bootdevice/by-name/xbl_b # Разделы второго загрузчика (Слот "b")

/dev/block/bootdevice/by-name/modem_a # Раздел первого модема/радиомодуля (Слот "a")
/dev/block/bootdevice/by-name/modem_b # Раздел второго модема/радиомодуля (Слот "b")

/dev/block/bootdevice/by-name/boot_a # Раздел первого ядра (Слот "a")
/dev/block/bootdevice/by-name/boot_b # Раздел второго ядра (Слот "b")

/dev/block/bootdevice/by-name/vendor_a # Первый проприетарный раздел (Слот "a")
/dev/block/bootdevice/by-name/vendor_b # Второй проприетарный раздел (Слот "b")

/dev/block/bootdevice/by-name/system_a # Первый системный раздел (Слот "a")
/dev/block/bootdevice/by-name/system_b # Второй системный раздел (Слот "b")
Как видно из выдержки выше, — имеются два, независимых между собой, слота, а именно "группы разделов", которые содержат в себе основные, обновляемые компоненты прошивки.

Два представленных слота состоят из:
Bootloader (загрузчик) — 28 разделов (14 на каждый слот).
Radio/Modem (радиомодуль) — 2 раздела (по одному на слот).
Boot (ядро) — 2 раздела (по одному на слот).
Vendor (драйверы) — 2 раздела (по одному на слот).
System (система) — 2 раздела (по одному на слот).

Остальные разделы, не указанные в таблице, представлены в одном экземпляре за ненадобностью их деления.
Обратите внимание раздел пользовательского хранилища (userdata) всегда один! Именно поэтому вы не можете (без очистки хранилища) одновременно использовать две абсолютно разных прошивки, будет конфликт. Возможно одновременное использование одинаковых по типу прошивок (а в некоторых случаях и это невозможно без сброса данных).


Принципиальные отличия по сравнению с другими устройствами:
С дублированием разделов и, структурой в целом, разобрались. Однако, вы могли заметить (если просматривали полную таблицу разделов) отсутствие, привычных в любом устройстве, разделов "/recovery" и "/cache". Да, их действительно нет. Но могут и встречаться в отклонениях от нормы.

Q: Стоп. Но если раздела для Recovery нет, а сам Recovery есть (Он ведь есть, правда?), где же он находится?
A: Система восстановления (Recovery) включена в состав образа ядра (boot). А потому, наличие, отсутствие и тип установленного recovery напрямую зависят от ядра системы. Переключение в него (Recovery), как и раньше, осуществляется специальным флагом в "/misc" разделе.
Именно в этом и состоит загвоздка установки TWRP — его как-то нужно "засунуть" в ядро. Потому TWRP сначала временно загружают (устанавливать то его некуда), а затем уже из TWRP, специальным скриптом, на лету распаковывается ядро и вшивается в него TWRP. Такая же схема "перепаковки ядра на лету" применяется при получении "systemless" рут-прав через SuperSU и Magisk.

Q: Хорошо, а что же тогда случилось с "/cache" разделом?
A: В привычных устройствах он необходим лишь для хранения OTA обновлений и системных логов Recovery, в данном же случае, ввиду применения новой схемы этих самых обновлений (см. ниже), раздел стал попросту "не нужОн". Вот от него и избавились.


Ручное переключение слотов:
Естественно, помимо самих слотов, должен быть способ ручного взаимодействия с ними. И он есть. Для ручного переключения текущего активного слота необходимо воспользоваться утилитой fastboot. Команды:
fastboot set_active a #активация слота "a"
fastboot set_active b #активация слота "b"
fastboot set_active other #активация противоположного слота по отношению к текущему
Так же, переключится в другой слот можно в соответствующем пункте TWRP (Reboot -> Slot A / Slot B).


Итоги и положения:
1. Между слотами как система, так и сам пользователь могут переключаться.
2. Изначально (с завода) слоты полностью идентичны между собой. Различия появляются после применения любого OTA обновления системы.
3. Слоты изолированы между собой. Состояние и целостность одного слота никак не влияет на другой. За исключением применения OTA обновлений (см. ниже).


"Seamless" система обновлений:
Итак, с разделами и слотами разобрались. Но что же там с обновлениями, наверняка их тоже коснулись изменения, ввиду описанного выше?
Да, OTA обновления на устройствах с A/B структурой кардинально отличаются от того, что мы можем видеть на других устройствах.

Итоги и положения:
1. Все OTA обновления устанавливаются в неактивный, противоположный слот. То бишь - обновляется лишь один слот.
2. Все OTA обновления устанавливаются в фоновом режиме при рабочей системе, без перезагрузки устройства.
3. Все OTA обновления устанавливаются в два этапа "Шаги": "Шаг 1" - Загрузка обновления. "Шаг 2" - Фоновое применение обновления в неактивный, противоположный слот.
4. После установки OTA обновления, при перезагрузке устройства, оно автоматически загрузится в обновленный слот (ранее неактивный).

Android 8.0+ — трансляция обновлений:
Начиная с версии Android 8.0 возможна (но не обязательна) частичная реализация трансляции обновлений с одновременным их применением (прямая запись).
Это значит, что обновления не нуждаются в предварительной их загрузке, а применяются "на лету".

Сообщение отредактировал Lux Darkus - 11.05.22, 17:17
Причина редактирования: Замена цвета заголовка. Плохая видимость на темном фоне



Реп: (1377)
По поводу Treble. Суть в том,что раздел vendor, который обычно находится в разделе system, выносится отдельно от system и у нас появляется 2 раздела, system и vendor. Что это нам даёт? Уменьшается размер прошивок в 2 раза примерно, ибо в vendor находятся практически все библиотеки и они (обычно) не меняются, а вот все остальное в system находятся в новом обновлении ( архив который вы скачиваете). Вот и всё, что даёт Treble. К тому же OREO, может работать и без Treble, в этом случае vendor находится в system :rolleyes:



Реп: (2627)
* powar19, ну, а ещё проще будет переходить между прошивками и появятся т.н. "Универсальные прошивки" с сборкой и портированием которых не нужно будет заморачиваться...
* DenZ4pda, пользователи 1+ уже создали петицию с просьбой ввести поддержку РТ у них. (Инфа с XDA)



Реп: (1377)
* bullik01, да, из-за того что ваши все драйвера для вашего устройства находятся отдельно это даёт универсальность прошивок и их может пилить огромное количество людей, что даст огромное дерево прошивок)



Реп: (1377)
* sazan123, суть в том, что вы первоначально шьете новое рекавери, которое монтирует раздел system и vendor , потом шьете полную прошивку, которая заполняет разделы boot, vendor и system, а далее шьете любые другие прошивки, которые будут менять только system, а boot и vendor остаются от вашего устройства)



Реп: (323)
sazan123 @ 11.03.18, 20:39 *
О какой универсальности идёт речь?
Вендор лежит в отдельном разделе. Поэтому его при перепрошивке не затрагивают. Но нужен новый twrp с поддержкой такого раздела.



Реп: (314)
* powar19, * DenZ4pda,
Понял понял....
Но опять же, с версии на версию андроида в этом случае не перепрыгнуть?



Реп: (323)
sazan123 @ 11.03.18, 20:46 *
Но опять же, с версии на версию андроида в этом случае не перепрыгнуть?
Тк привязки к драйверам железа не будет у новых прошивок, то и переходить на новый андроид будет проще.
В этом вся суть этого механизма. Но Вы должны будете для простого перехода хотя бы первичную прошивку с поддержкой PT на
девайсе иметь.

Сообщение отредактировал DenZ4pda - 11.03.18, 20:50



Реп: (2627)
* sazan123, почему? Перепрыгнуть в теории можно..



Реп: (1377)
* sazan123, ну по всей видимости перепрыгнуть, но если именно производитель официально сделает treble, чтобы драйвера были универсальны. В нашем случае, когда treble сделан энтузиастами придется дорабатывать драйвера, чтобы всё работало на новой версии ( в нашем случае это android p) , но мне кажется гугл не глупые и новый андроид будет работать на старой проприетарщине

Сообщение отредактировал konsumeri - 11.03.18, 20:50



Реп: (314)
* bullik01,
Я же не знаю. Интересуюсь :D
* powar19,
Драйвера то ладно. А ядро?



Реп: (1377)
* sazan123, а с ним что не так? Один раз его обновите при переходе на новую версию и все)



Реп: (314)
* powar19,
Об этом и спрашиваю. То есть, при переходе с О на Р нужно будет пересобрать ядро. Если конечно производитель не "выкатит"!



Реп: (1377)
* sazan123, может и не придется



Реп: (314)
* powar19,
Ясно. Будем следить

По поводу TWRP. Это же и разметка другая должна быть?

Сообщение отредактировал sazan123 - 11.03.18, 20:56



Реп: (323)
sazan123 @ 11.03.18, 20:54 *
То есть, при переходе с О на Р нужно будет пересобрать ядро.
Возможно придется несколько коммитов применить для совместимости с новым андроидом.
(как недавно было: поднять версию селинукса и binder пропатчить например или в рамдиске чего добавить).
sazan123 @ 11.03.18, 20:55 *
По поводу TWRP. Это же и разметка другая должна быть?
Да

Сообщение отредактировал DenZ4pda - 11.03.18, 20:59



Реп: (2336)
sazan123 @ 11.03.18, 20:55 *
Это же и разметка другая должна быть?

И magisk тоже придется переделать под себя, если он не поддерживается еще для вашего девайса.
А с twrp будет небольшие сложности при возврате на 7 и ниже, придется ставить старую версию и заново приводить раздел для vendor (например на mido под него cust выделили) в порядок.

Сообщение отредактировал Razziell - 11.03.18, 21:01



Реп: (314)
Если производителем поддерживается - хорошо, если нет - морока ещё так :rolleyes:

Добавлено 11.03.2018, 21:03:

Razziell @ 11.03.18, 19:59 *
под него cust выделили

В этом случае ведь не обязательно переразметка?. Просто куст монтировать как вендор



Реп: (2627)
* Razziell, magisk почти универсален ;)



Реп: (2336)
bullik01 @ 11.03.18, 21:03 *
magisk почти универсален

Тогда бы не делали так https://github.com/The…ddc91555938d4f6a191e67 ))
sazan123 @ 11.03.18, 21:01 *
Просто куст монтировать как вендор

Да, просто в бубен при возврате придется немного постучать обычному пользователю.
И главное чтобы Гугл в дальнейшем не отказался от требл или радикально не пересмотрел идеологию, иначе толку не будет.

Сообщение отредактировал Razziell - 11.03.18, 21:09


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 31.05.23, 17:56