Введение в создание прошивок для других устройств

В этом разделе Вы познакомитесь со спецификой установки Ubuntu Touch на устройства с прошивкой на основе Android. Обратите внимание, что этот текст написан в первую очередь для начинающих пользователей. В последующих разделах мы постарались сделать основной текст кратким, чтобы удовлетворить потребности опытных разработчиков сборок, а также предоставили ссылки на дополнительные источники для новичков.

Это руководство написано как последовательность шагов, описывающих, как создать идеальную сборку. Однако создание сборок - беспорядочный и непредсказуемый процесс. Каждое устройство сильно отличается, и скорее всего Вы будете повторять некоторые шаги, пропускать другие и открывать новые и недокументированные проблемы.

Что такое Ubuntu Touch?

Ubuntu Touch - это операционная система для мобильных устройств с открытым исходным кодом. Её можно установить на устройства, изначально поставлявшиеся с ОС Android. К сожалению, большинство мобильных устройств в той или иной степени зависит от проприетарного ПО, закрытых драйверов для отдельных модулей.

Производители устройств стремятся закрыть исходные коды, которые обращаются непосредственно к аппаратной части устройства (низкоуровневые драйвера). Эти компоненты обычно называются vendor „blobs“ (Binary Large OBjects). Их нужно обязательно включить в сборку Ubuntu Touch. Обратите внимание, что эти компоненты специфичны не только для каждого устройства, но и для каждой версии Android. Поэтому при подготовке сборки необходимо использовать правильные версии этих компонентов.

Вот почему сборки ОС Ubuntu Touch так сложно подготовить для большинства коммерческих устройств даже несмотря на открытые исходные тексты системы. Создание прошивки заключается в интеграции ранее упомянутых файлов производителя мобильного устройства в остальную часть системы, которую можно скомпилировать из исходных текстов.

The next component of Ubuntu Touch is a pre-compiled root filesystem which needs to be installed on the device. This component does not communicate directly with the device hardware. Instead, this communication is mediated by a Hardware Abstraction Layer (HAL) which needs to be built for each specific device, because each device has its specific hardware architecture. This component is called Halium and is available in different versions corresponding to different Android versions.

The Halium project enables Linux systems to run on Android hardware. It is a joint effort by multiple mobile operating systems, notably Lune OS, Droidian and Ubuntu Touch.

Ubuntu Touch porting builds on top of the Halium GSI. The Halium GSI is discussed further below. At times it may also be helpful to test with one of the other operating systems to debug a problem from different angles.

Halium is an indispensible part of an Ubuntu Touch port and is available in the form of open source software. Developing a new version of Halium is a very considerable task which is why only a few versions of Halium are available. Each port of Ubuntu Touch has to be based on one of the available Halium versions and vendor blobs from the corresponding Android version. See the first two columns of the table below for details.

Таким образом, прошивка Ubuntu Touch состоит из следующих компонентов:
  • Корневая файловая система Ubuntu Touch (UT) (rootfs)

  • Halium (содержится в загрузочном и системном образах)

  • Файлы поставщика оборудования (vendor blobs)

You, the porter, need to build a Halium kernel, which is installed together with the Ubuntu Touch rootfs and the Halium GSI, to create a functioning Ubuntu Touch port.

Android and Halium versions

Halium построен с использованием исходного кода LineageOS - модифицированной версии операционной системы Android (см. LineageOS website и wiki). Требуемый исходный код свободно распространяется, его можно скачать и настроить для создания правильной версии Halium для сборки ОС для каждого устройства. В таблице ниже показано, какие версии требуются для различных версий Halium.

Версия Android

Версия Halium

Lineage OS

7.1

7.1

14.1

9.0

9.0

16.0

10.0

10.0

17.1

11.0

11.0

18.1

12.0

12.0

19.1

13.0

13.0

20.0

Начиная с версии 20.04, сборки Ubuntu Touch, как правило, базируются на Halium 9.0 или более поздних версиях. Более старые версии Halium считаются устаревшими и больше не поддерживаются при создании новых сборок.

Образ Generic System Image

Операционная система Android была сильно переработана, начиная с версии 9.0. Специфические для конкретного устройства компоненты (так называемые vendor blobs) теперь размещаются в отдельном разделе, а не в одном разделе с остальной частью системного образа. Такое отделение кода, зависящего от устройства, от универсального кода сделало возможным создание так называемого Generic System Image (GSI) — универсального системного образа.

GSI — это образ системы, созданный для работы на широком спектре устройств. Начиная с версии 9.0, устройства Android используют GSI. Дополнительную информацию можно найти на страницах для разработчиков Android

Развитие архитектуры Android GSI также открыло путь к созданию универсального системного образа Halium 9.0 для архитектуры arm64 (далее — Halium GSI или просто GSI), который используется в Ubuntu Touch. Однако этот образ несколько отличается от Android GSI. Более подробную информацию о Halium GSI можно найти на странице вики, посвященной сборкам универсального системного образа Halium в GitLab CI.

Что это означает для процесса портирования?

Since the GSI is a prebuilt, device-independent component, it effectively simplifies the task of building a viable port by removing much of the meticulous and time consuming task of getting the hardware-specific vendor blobs compiled into the system image and configured to function properly.

Проблемы при создании сборок

Создание необходимых компонентов и обеспечение их корректной совместной работы всегда связано с необходимостью внесения изменений в код, настройкой и тестированием.

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

Примечание

Раньше прошивки можно было подготовить различными способами.Теперь уже исторические статьи об этом можно прочитать в разделе про устаревшие прошивки.

Необходимые знания и навыки

Porters come in all sizes and shapes, so to speak. Therefore, this guide does not presuppose extensive knowledge or skills in any particular field. You should, however, as a bare minimum be familiar with some common shell commands and be comfortable working from the terminal on you host PC. Furthermore, the guide is based on a host PC running Linux. If you have some knowledge of programming, this will come in handy at some point, especially if you are familiar with C / C++. Also, you should familiarize yourself with git and set up a Github or Gitlab account to keep track of your code changes. It is wise to start documenting your steps from the very beginning.

По ходу изложения мы старались давать необходимые пояснения. Однако данное руководство не является исчерпывающим справочником по архитектуре и внутреннему устройству Ubuntu Touch. Для более глубокого понимания работы операционной системы потребуется много самостоятельной работы.

Обращение за помощью к сообществу пользователей

Если у вас возникнут проблемы, можно обратиться к следующим ресурсам:

Основные устройства

The more rigorous you are at making notes and documenting your steps, the less time you will spend backtracking your steps and guessing your way along. When dealing with issues that arise along the way, it is wise to work on them one at a time. If you try to correct several things at once, you risk ending up trying to guess which changes solved a given issue, which easily leads to breaking the functionality in question once more at some later stage.

If you are not discouraged after reading this, we welcome your efforts and wish you the best of luck!

The next section presents a key to the rest of this guide.