Начал портировать свою операционную систему 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 OS
Главный экран Platinum OS

На фото Platinum уже работает на самом телефоне: запущена графическая оболочка, обрабатываются касания, открываются приложения и терминал. Это самостоятельная загрузка Linux со своим userspace, основанным на Ubuntu, и оболочкой на Qt/QML.

Командная строка linux в Platinum OS
Командная строка linux в Platinum OS

Одна из основных задач портирования — связать 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, а не готовое экранное меню выбора ОС.

Схема загрузки OS
Схема загрузки OS

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

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

Собственная часть загрузки 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.


Далее буду по мере развития Platinum OS, писать новые статьи, выдержки из опыта разработки.

GitHub: https://github.com/digkill/Platinum-OS

Комментарии (2)


  1. kenomimi
    23.09.2026 08:52

    Хорошее начинание. Только проблема в том, что обьем работ для скрещивания ужа с ежом фееричный даже если весь кодинг переложить на ИИ, руками вообще даже средней командой не осилить... Только недавно была статья про линукс на ленове.


    1. CEOCTO Автор
      23.09.2026 08:52

      Сам проект создавался как универсальная OS для arm устройств, в первую очередь хотел подружить с Orange PI Zero 3 + подключил Waveshare 6.25inch Capacitive Touch Display и Waveshare A7670E LTE Cat-1 HAT for Raspberry Pi. Но так как из этого сделать смартфон еще труднее (нет ряда датчиков как в современном устройстве), появилась идея сделать на unlock oem устройстве, далее в планах приобрести OnePlus 16 и поэкспериментировать с ним (смартфон + ии робот, с ходовой частью)