Вступ до портування

Цей перший розділ познайомить Вас із особливостями портування/перенесення Ubuntu Touch на пристрій з Android. Зауважте, що це написано більше для загального розуміння для тих, хто не має великого досвіду портування прошивок. У наступних розділах ми спробували диференціювати опис, зберігши основний текст більш лаконічним та спробувати задовольнити потреби більш досвідчених читачів, водночас надаючи посилання на додаткову інформацію для менш досвідчених.

Ці настанови написані як послідовність кроків, які допоможуть виконати ідеальне портування. Хоча портування буває непередбачуваним та заплутаним. Кожен пристрій має свої особливості та можливо Вам прийдеться пройти деякі кроки декілька разів, щось пропустити, зіткнутися з новими незадокументованими викликами.

Що таке Ubuntu Touch?

Ubuntu Touch — операційна система для мобільних пристроїв з відкритим кодом. Її можна перенести на пристрої, які постачаються (чи постачалися) з ОС Android. На жаль, більшість цих пристроїв залежні у певній мірі від закритого програмного забезпечення.

Точніше кажучи, постачальники пристроїв, як правило, зберігають код, який спілкується безпосередньо з обладнанням пристрою (низькорівневі драйвери пристроїв), пропрієтарним (закритим). Ці компоненти зазвичай мають назву vendor „blobs“ (Binary Large OBjects, двійкові великі об’єкти). Ці «блоби/двоби» повинні бути додані до Вашої прошивки Ubuntu Touch. Зауважте, що ці компоненти є унікальними не лише для кожного пристрою, а й для кожної версії Android. Саме тому є необхідним мати під час компіляції прошивки правильну версію компонентів.

Саме через це для більшості комерційних пристроїв Ubuntu Touch не можна просто зібрати з початкового коду. Замість цього для портування на ці пристрої потрібно зазначені раніше «блоби» виробників інтегрувати до системи, яку можна скомпілювати з початкового коду.

Наступний компонент Ubuntu Touch — це зібрана попередньо коренева система, яку потрібно встановити на пристрій. Цей компонент напряму з обладнанням не спілкується. Але ця комунікація налаштована через шар апаратних абстракцій (Hardware Abstraction Layer, HAL), який потрібно зібрати для кожного пристрою окремо, тому що у кожного пристрою своя власна архітектура обладнання. Цей компонент називається Halium та він доступний у різних версіях відповідно до версій Android.

Цей Проєкт Halium активує можливість запуску Linux на обладнанні Android. Це спільна робота кількох мобільних операційних систем, зокрема Lune OS, Droidian та Ubuntu Touch.

Портування прошивки Ubuntu Touch відбувається поверх Halium GSI (Generic System Interface, загальний системний інтерфейс). Про це детальніше йдеться далі. Іноді також може бути корисним тестування з іншою операційною системою, щоб розглянути проблему з різних точок зору.

Halium є невід’ємною частиною прошивки Ubuntu Touch та доступний у формі відкритого коду. Розробка нових версіх Halium — дуже важлива задача, оскільки наразі існують лише декілька версій Halium. Кожна прошивка Ubuntu Touch заснована на одній з доступних версій Halium та «блобах» виробників (vendor blobs) з відповідних версій Android. Подивіться уважно на два перших стопці наведеної нижче таблиці.

Таким чином прошивка/порт Ubuntu Touch складається з таких компонентів:
  • Коренева система (rootfs) Ubuntu Touch (UT)

  • Halium (міститься в образах boot та system)

  • Файли виробника (vendor blobs)

Для створення робочої прошивки Ubuntu Touch Ви як портувальник повинні зібрати ядро Halium, яке буде встановлене разом з кореневою системою Ubuntu Touch (rootfs) та Halium GSI.

Версії Android та Halium

Halium зроблений з використанням початкового коду для модифікованої версії ОС Android, яка має назву LineageOS (див. вебсайт LineageOS та її wiki). Необхідний початковий код доступний онлайн та для компіляції правильної версії Halium під кожний окремий пристрій, його потрібно завантажити на комп’ютер. У наданій нижче таблиці міститься інформація про те яка версія для якого Halium потрібна.

Версія Android

Версія Halium

Lineage OS (LOS)

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 вважаються застарілими та більше для нових портів не підтримуються.

Загальний системний образ

Починаючи з версії 9.0 в Android внесені значні архітектурні зміни. Блоки розробника, спеціфічні до пристроїв, тепер знаходяться в окремому розділі замість спільного використання розіду з іншими компонентами системи. Це відокремлення коду для самого пристрою від загальної коду зробило можливим створення так званого Загального системного образу (GSI).

GSI — це образ системи, створений для забезпечення роботи різних пристроїв. Пристрої з Android з версії 9.0 використовують GSI. Більш докладно можна знайти на сторінках для розробників Android

Розробка архітектури Android GSI також відкрила шлях для доступного тепер загального образу, який використовується для Ubuntu Touch — Halium 9.0 arm64 (далі Halium GSI або GSI). Але він дещо відрізняється від Android GSI. Більш детальне пояснення щодо Halium GSI знайдете на сторінці wiki Gitlab CI про створення загального системного образу Halium.

Яке це має значення для процесу портування?

Оскільки GSI зроблений попередньо як незалежний від обладнання компонент, він дуже спрощує процедуру створення працездатного порту, усуваючи більшу частину ретельного та складного завдання з компіляцією блоків виробника під певне обладнання для образу системи та налаштування для правильного функціонування.

Виклики під час портування

Збирання, компіляція необхідних компонентів та забезпечення їх належної спільної роботи завжди містять різні модифікації коду, налаштування та тестування.

На щастя існує велика спільнота портувальників, які сплять та бачать як Ubuntu Touch портується на нові пристрої. Якщо Вам раптом трапляються складнощі, Вам слід пошукати можливі відповіді або натяки на розв’язок у джерелах (Отримання допомоги від спільноти). Також існують чати у Telegram, куди можна також долучитися та спитати там про допомогу, але майте на увазі, що усі учасники активні там лише у свій вільний час.

Примітка

Раніше використовувалися різні методи портування. Пошукайте історичні записи, пов’язані з Застарілими методами портування.

Необхідні знання та навички

Портувальники бувають різних масштабів та форм, так би мовити. Таким чином, цей посібник не вимагає широких знань або навичок у будь-якій конкретному напрямку. Однак Ви повинні, як мінімум, бути знайомими з деякими поширеними shell-командами та бути здатними працювати з терміналом на своєму ПК. Крім того, у посібнику передбачається, що Ваш ПК працює на Linux. Якщо можете програмувати, це може стати в нагоді, особливо якщо знайомі з C / C++. Крім того, щоб відстежувати зміни коду, Вам варто познайомитися з git та створити обліковий запис Github або Gitlab. Також має сенс документувати свої кроки з самого початку.

Коли ми складали посібник, то намагалися додати різні пояснення. Однак він не є поглибленим описом архітектури та внутрішньої роботи Ubuntu Touch, тому для глибшого розуміння буде необхідним певне дослідження з Вашого боку.

Отримання допомоги від спільноти

Коли Ви зіткнетеся з труднощами, що досить ймовірно, зверніться до одного або до кількох з наведених нижче ресурсів:

Загальна порада

Чим ретельніше Ви ведете свої нотатки та документуєте свої дії, тим менше часу Ви потім витратите на відстеження своїх кроків у спробах вгадати, що потрібно робити. Розв’язуючи проблеми, які виникають у процесі роботи, краще долати їх по черзі. Якщо Ви спробуєте виправити декілька речей одночасно, Ви ризикуєте у підсумку загубитися, які саме зміни допомогли з тією чи іншою проблемою, що своєю чергою може потім на якомусь пізнішому етапі повернути стару проблему.

Якщо після прочитання цього всього Ви не втратили бажання, ми хочемо побажати Вам успіху та великої вдачі!

У наступному розділі містяться пояснення до решти цього посібника.