Доклады, выступления, видео и электронные публикации

Челлендж: Успеть за 120 секунд: от кнопки включения до запуска приложения

Смотреть на YouTube

Чёрный экран. Ты нажимаешь кнопку питания — и в SoC просыпается Boot ROM. 16 КБ кода, зашитого прямо в кремний при производстве. Он не стирается, не обновляется — это точка абсолютного доверия. Его задача: найти первый загрузчик в доверенной памяти eMMC и проверить его цифровую подпись через аппаратный криптоблок. Это начало цепочки доверия.

Управление передаётся в little kernel. Здесь включаются тактовые генераторы, инициализируется контроллер DDR4/DDR5, PMIC раскручивает напряжения. Шины пробуждаются по очереди: PCI express для модема, USB PHY, дисплейный контроллер. Только когда память стабильна, загрузчик проверяет подпись ABL через android verify boot 2.0. Если подпись валидна, грузится ядро из boot.img.

Ядро распаковывает initramfs — минимальную ФС в памяти. Монтирует /proc, /sys, /dev. Запускает init — первый пользовательский процесс с PID 1. Первый шаг init монтирует критические разделы: /system, /vendor, /data. Проверяет целостность через dm-verity. Затем — переключение на второй шаг init. Он парсит /init.rc — сценарий запуска системы. Стартуют ключевые демоны: ueventd (устройства), logd (логов), servicemanager (Binder).

Появляется Zygote — сердце Android. Она загружает libart.so, предварительно компилирует framework.jar в OAT-файлы. Держит «тёплый» образ виртуальной машины в памяти — чтобы новые процессы не грузили среду с нуля, а клонировались через fork(). PackageManagerService сканирует /data/app, строит кэш разрешений. ActivityManagerService готовит стек задач.

Запускается SystemUI и Launcher3 — домашний экран. SurfaceFlinger компонует буферы в кадр, отправляет в драйвер дисплея. Ты видишь обои, иконки, статус-бар. Система готова. Но это не «просто интерфейс» — за каждым пикселем стоит иерархия: HAL → драйвер → ядро → железо. И всё это защищено: SELinux в режиме enforcing, Seccomp фильтрует системные вызовы.

Ты тапаешь иконку. InputDispatcher передаёт событие в ActivityManagerService. AMS просит Zygote — fork. Дочерний процесс наследует тёплый образ ART, подгружает DEX-код приложения, связывается с сервисами через Binder IPC. Вызываются onCreate() → onStart() → onResume(). ActivityManager сообщает WindowManager — компонуй окно. SurfaceFlinger выводит первый кадр. Приложение «оживает» за 200 миллисекунд.

45 секунд пути — от первых инструкций в кремнии до твоего тапа по экрану. Это быстрее чем я рассказал этот текст. И каждый этап можно потрогать: отладить через adb, dmesg или uart, переписать политику SELinux, модифицировать ядро или кастомизировать лаунчер.

Это не чёрный ящик — это твоя система.

Автор: ОКБ САПР

Дата публикации: 09.02.2026

Выходные данные: Презентация к проектам Александра Запорожских в Клубе менторов МФТИ.

Scientia potestas est
Кнопка связи