Увімкнення підтримки для відновлення 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).
Additionaly ensure partitions (even with emmc type) which would receive new images during OTA updates such as those under workdir/tmp/partitions/*.img have valid /mountpoints matching their /dev/block/by-name/ partitions (FP4 recovery example). Slotted A/B ones should exclude e.g. the _a / _b suffix and let slotselect fsmgr option pick the one for current slot automatically on boot (Q25 vendor_boot/dtbo example). In the end verify the generated /etc/fstab entries point to valid block devices.
Qualcomm SoC devices typically also want at least the fs bootdevice symlink bits from original ramdisk around at ramdisk-recovery-overlay/init.recovery.${ro.hardware}.rc for the fstab entries to be correct without further changes.
Функції, які повинні працювати¶
Відтворення на екрані
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 ;)