Увімкнення підтримки для відновлення UBports¶
Історично з початком GSI-based ports кожен порт копіює ramdisk з recovery до власного репозиторію, зазвичай з уже перенесених пристроїв, що навряд чи є ідеальним. На щастя, тепер із уніфікованим recovery UBports існує лише одна версія відновлення, побудована на UBports CI, яку можна використовувати де заманеться :)
Перехід на єдину (уніфіковану) базу відновлення¶
В ідеалі це повинно бути отак просто:
deviceinfo_use_unified_recovery="true"
deviceinfo_unified_recovery_ui_density="xxhdpi"
і якщо потрібно, перенесіть свій fstab до ramdisk-recovery-overlay/system/etc/recovery.fstab. Більшість інших попередніх не-fstab файлів з ramdisk-recovery-overlay/ можна/слід відкинути доки не буде визначена їх необхідність (порівняйте незалежні від пристроїв файли з їх версіями у гілці уніфікованого recovery Halium 14). Наприклад, щодо фейкового підмонтування /cache та налаштування USB ConfigFS вже подбали, що також допомагає мінімізувати вміст ramdisk-recovery-overlay/init.recovery.*.rc та ін.
Примітка
У пристроях GKI v5.4/5.10 для уникнення потреби налаштування опції sys.usb.controller у /init.recovery.*.rc для роботи USB потрібно у ядрі вимкнути CONFIG_USB_DUMMY_HCD (як вже це зроблено для гілки загального ядра kernel-android-common), в інших місцях це повинно працювати автоматично під час завантаження відновлення.
Врешті, можливо Вам захочеться перевірити інформацію з описаних нижче підрозділів на збіги з Вашим портом. Оновлення для recovery ramdisk тепер виконуються автоматично з новими комітами або автоматичними збірками CI pipeline у відповідних для кожного пристрою репозиторіях подібно до збірок ядра.
Створення підтримки з нуля¶
Все описане вище залишається актуальним; основу ramdisk-recovery-overlay/system/etc/recovery.fstab потрібно створити з розпакованого стокового ramdisk (vendor/recovery). Файл повинен існувати у /data, інакше recovery не завантажиться. Щоб команда adb shell mount /data спрацювала, потрібно дещо адаптувати, напр. userdata перетворити з f2fs на ext4 (приклад userdata Q25).
Додатково переконайтеся, що розділи (навіть типу emmc), які повинні отримувати нові образи через оновлення OTA, такі як workdir/tmp/partitions/*.img мають правильні /mountpoints відповідно до їх розділів /dev/block/by-name/ (приклад recovery для FP4). Розділи з підтримкою A/B-слотів мають виключати суфікси на кшталт _a / _b, дозволяючи опції fsmgr slotselect автоматично вибирати потрібний варіант для поточного слота під час завантаження (приклад vendor_boot/dtbo для Q25). В кінці перевірте згенерований /etc/fstab на правильність точок монтування.
Для того щоб записи fstab були правильними без подальших змін, пристроям на чіпі Qualcomm зазвичай ще потрібні принаймні fs bootdevice symlink bits з оригінального ramdisk навколо ramdisk-recovery-overlay/init.recovery.${ro.hardware}.rc.
Функції, які повинні працювати¶
Відтворення на екрані
USB-доступ через ABD, напр. для інсталятора UBports
Ононвлення Ubuntu Touch через OTA, див. тестування локального OTA
Скидання на заводські налаштування
Перезавантаження в особливі режими (напр.
adb reboot bootloader)FastbootD на пристроях з розділом
superСенсорний екран (опційно)
Звіт про відсоток акумулятора (опційно)
Автоматичне зменшення яскравості екрана за таймаутом (опційно)
Деякі приклади портування¶
Volla Phone X, MediaTek ядро v4.9, розділ recovery, нова інтеграція
Volla Phone Quintus, MediaTek ядро v4.19, recovery як boot, міграція з версії виробника
Volla Phone X23, MediaTek ядро v5.10, recovery як boot, міграція з версії виробника
Fairphone 4, Qualcomm ядро v4.19, розділ recovery, міграція з версії виробника
У разі необхідності зверніться, будь ласка, по допомогу до спільноти.
Додаткові налаштування¶
Інші необхідні властивості слід додати до ramdisk-recovery-overlay/prop.halium, напр. для планшетів може бути цікавим горизонтальний UI:
ro.minui.default_rotation=ROTATION_RIGHT
ro.minui.default_touch_rotation=ROTATION_RIGHT
Інші різні опції, які можуть бути цікавими:
ro.fastbootd.available=trueдля використання навіть на старих пристроях з менш зручним способом прошивкинапр.
ro.recovery.ui.margin_height=24додасть поле для верхнього логотипу на пристроях з вирізомro.recovery.batteryless=trueдля приховування відсотку акумулятора якщо з ним проблемаro.minui.use_qti_drm=trueдля використання зміненого бекенду DRM (modified-for-QTI, Qualcomm) навіть безro.hardware=qcom, або його вимкнення у разі проблемабо навіть
ro.boot.quiescent=trueдля вимкнення генерації інтерфейсу recovery на раній стадії запуску
Умовні або інші додаткові налаштування стосуються ramdisk-recovery-overlay/init.recovery.${ro.hardware}.rc.
Збільшення кореневої файлової системи¶
Для пристроїв з розділом super, але з дуже малим оригінальним розділом system_a під час початкового завантаження з інсталятором UBports, можна змінити розмір під зростаючі потреби (напр., для 24.04-2.x з його Qt6 та Qt5), у самому контейнері надається достатньо вільного місця:
ro.systemimage.system_partition_size=4500
Тестування локального OTA¶
Коли завантажується UBports recovery та з’являється з’єднання USB (ADB) можна спробувати в основному каталозі Вашої компіляції ядра наступне:
mkdir -p ramdisk-recovery-overlay/system/bin
wget https://github.com/ubports/halium_bootable_recovery/raw/refs/heads/halium-14.0/ubports/system-image-upgrader -O ramdisk-recovery-overlay/system/bin/system-image-upgrader
chmod +x ramdisk-recovery-overlay/system/bin/system-image-upgrader
sed -i '/verify_signature()/a\ return 0' ramdisk-recovery-overlay/system/bin/system-image-upgrader
./build.sh
adb reboot bootloader; (cd workdir/tmp/partitions && for i in *.img; do fastboot flash ${i%.img} $i; done) && fastboot reboot recovery
sudo ./build/prepare-fake-ota.sh out/device_$(awk -F'"' '/^deviceinfo_codename=/ {print $2}' deviceinfo)_usrmerge.tar.xz ota
adb push ota/{*.tar.xz*,ubuntu_command} /cache/recovery && adb reboot recovery
adb wait-for-recovery && sleep 1 && adb shell tail -f /cache/ubuntu_updater.log
Коли помилки будуть виправлені ти припускаючи, що файли OTA не винуваті, процес можна перезапустити без додаткових пушів через adb shell 'mv /cache/recovery/ubuntu_command{.applying,}; setprop ctl.restart recovery'. Коли все вдасться не забудьте про rm ramdisk-recovery-overlay/system/bin/system-image-upgrader ;)