Разработка Platinum OS на базе Samsung M52

Начал портировать свою операционную систему Platinum OS на Samsung Galaxy M52. В основе — Ubuntu 26.04 LTS, собственная графическая оболочка, службы и пакеты приложений. Разблокируемый загрузчик телефона позволяет запускать модифицированные загрузочные образы и экспериментировать с Linux на настоящем устройстве.
Как проверить Samsung M52 на OEM Unlock
Перейти: Настройки → Сведения о телефоне → Сведения о ПО → 7 раз нажать «Номер сборки»
Далее: Настройки → Параметры разработчика → Заводская разблокировка / OEM unlocking
Если переключатель есть — практически наверняка всё нормально.
Дальше разблокировка у Samsung делается не через fastboot flashing unlock.
Сделайте резервную копию — телефон будет полностью очищен.
Включите OEM unlocking.
Выключите телефон.
Подключите USB-кабель к компьютеру.
На выключенном телефоне удерживайте одновременно Volume Up + Volume Down и подключи кабель.
Появится Download Mode.
На экране обычно будет предложение типа:
Device unlock mode — Long press Volume Up
Долго удерживайте Volume Up.
Подтверждаете разблокировку.
Телефон сделает factory reset.
После этого в Download Mode должно отображаться что-то вроде:
OEM LOCK: OFF
или статус загрузчика, показывающий, что разблокировка разрешена.
Уже удалось загрузить Platinum с microSD, запустить интерфейс и добиться работы сенсорного экрана, Wi-Fi и SSH. Сейчас дорабатываю управление питанием, отключение дисплея при бездействии и защиту от критического разряда батареи. Отдельная задача — переключение между штатным Android и Platinum с сохранением пользовательских данных. Для этого использую раздельные ядра: Android загружается через BOOT, а Platinum — через RECOVERY. Схема ещё проходит проверку на телефоне.
На фото Platinum уже работает на самом телефоне: запущена графическая оболочка, обрабатываются касания, открываются приложения и терминал. Это самостоятельная загрузка Linux со своим userspace, основанным на Ubuntu, и оболочкой на Qt/QML.

Одна из основных задач портирования — связать Linux-систему с аппаратной частью Samsung M52. Здесь недостаточно собрать Ubuntu для ARM64: нужны подходящие ядро, описание оборудования — Device Tree, модули драйверов и firmware. Уже удалось добиться работы дисплея, сенсорного ввода и Wi-Fi. Через SSH можно читать журналы, проверять службы и тестировать изменения прямо на устройстве, прежде чем включать их в следующий образ.
Корневая файловая система Platinum располагается на microSD, а Android остаётся во внутренней памяти. Для переключения между ними разрабатываю схему с двумя отдельными ядрами: штатный Android использует раздел BOOT, Platinum — RECOVERY. Выяснилась особенность Samsung: при запуске Android может восстанавливать заводской Recovery, перезаписывая Platinum. Поэтому сейчас проверяю раннее отключение службы vendor_flash_recovery через init-конфигурацию, добавленную в загрузочный образ с Magisk.
Следующий этап — подтвердить стабильное переключение в обе стороны с сохранением данных Android. Параллельно предстоит доработать управление питанием и заняться модемом: звонками, SMS и мобильным интернетом.
Текущая схема с раздельными ядрами Android и Platinum. По журналу проекта два цикла Android → Platinum → Android подтверждены на телефоне. Диаграммы читаются слева направо. Режим загрузки — решение загрузчика Samsung, а не готовое экранное меню выбора ОС.

Переключение ОС:

Собственная часть загрузки Platinum — initramfs и ранний init. ABL остаётся Samsung. Аппаратную поддержку обеспечивают драйверы ядра, Device Tree и firmware; схема не перечисляет все физические разделы, например vendor_boot. Маркер platinum.dualboot=recovery меняет SHA-1 BOOT, но не выбирает ОС сам. Сервис Samsung не отключается: восстановление не проходит проверку источника.
VBMETA сохраняет flags=3 от предыдущего этапа настройки и при переключениях не переписывается. Служба BCB меняет только 32-байтовое поле command в misc. Параметр перезагрузки userrequested остаётся дополнительным механизмом запроса обычной загрузки.
Системные службы работают параллельно с графической сессией.
На Rust в Platinum OS написаны система сборки образов и часть служб устройства. Код разделён на отдельные crates: командный интерфейс, конфигурация оборудования, загрузка компонентов, подготовка корневой файловой системы и создание итогового образа. Параметры устройств задаются через TOML.
Конвейер сборки. Каждый этап реализует общий интерфейс Stage: получает контекст сборки и выполняет свою задачу. Например, скачивает Ubuntu Base, устанавливает пакеты или настраивает систему. Конвейер последовательно запускает этапы, записывает время выполнения и останавливается при ошибке. Такой подход позволяет отдельно проверять компоненты и добавлять поддержку оборудования, не переписывая весь сборщик.
Служба уведомлений platinum-notifyd. Она принимает сообщения приложений через D-Bus, используя интерфейс org.freedesktop.Notifications, и передаёт их оболочке через файлы в каталоге пользовательской сессии. Qt/QML отвечает за отображение уведомлений, а Rust-процесс — за приём, идентификаторы, замену и закрытие сообщений.
Также на Rust реализованы компонент проверки пароля через PAM и заготовка службы модема с AT-командами. Последняя ещё не означает готовую поддержку звонков на M52: интеграция с его модемом — отдельная задача. Графический интерфейс написан на Qt/QML, а часть инструментов портирования и управления питанием — на Python и shell.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.