Arch Linux на Xiaomi 12T Pro: 9 граблей загрузки на стоковом ядре
Arch Linux ARM на Xiaomi 12T Pro со стоковым ядром Android загружается, если выполнены три условия: разблокирован загрузчик и отключена проверка vbmeta, initramfs грузит vendor-модули той же прошивки, что и ядро, а rootfs лежит на разделе без шифрования Android. Остальное — слоты A/B, cmdline, firmware, графику и откат — разбираем ниже по порядку загрузки.
Почему Xiaomi 12T Pro не загружает Arch Linux с первой попытки 🔧
Пятница, 19:40. Ядро взято из прошивки, initramfs собран, rootfs лежит на USB-накопителе, в cmdline прописан root=/dev/sda1. Команда fastboot flash boot отвечает «OKAY». Телефон показывает логотип Mi, гаснет, снова показывает логотип и через минуту оказывается в fastboot. Логов нет: UART к плате не подключён, adb не поднялся.
Причина в устройстве загрузки. 12T Pro (кодовое имя diting) построен на Snapdragon 8+ Gen 1 и работает на ядре 5.10 в схеме GKI: само ядро одинаково у многих телефонов, а всё, что привязано к железу, вынесено в .ko-модули. Драйверы UFS, USB, дисплея и питания лежат в ramdisk раздела vendor_boot и в разделе vendor_dlkm. Ваш initramfs про них не знает, поэтому ядро стартует, но не видит ни накопитель, ни экран, не находит корневую ФС и паникует. Телефон перезагружается и повторяет попытку.
Ставка выше, чем кажется. На личном телефоне это потерянный вечер. На рабочем аппарате курьера, кладовщика или выездного инженера это данные, стёртые при разблокировке, потерянный раздел persist с калибровками и серийными данными и гарантийный ремонт, в котором сервис вправе отказать после разблокировки загрузчика. Если стёрты xbl или abl, остаётся режим EDL, закрытый авторизацией производителя. Такой «кирпич» чинят не за час.
Как исправить: девять граблей загрузки по порядку ⚙️
Идём в том порядке, в котором телефон загружается. Команды рассчитаны на Linux-хост с установленным fastboot.
1. Загрузчик закрыт или разблокирован не до конца
Mi Unlock требует привязать аккаунт Xiaomi к устройству, выдержать срок ожидания и стирает userdata. Xiaomi также ограничивает число разблокировок на один аккаунт. Проверка в fastboot: команда fastboot oem device-info, строка Device unlocked должна быть true. Пока там false, чужой boot.img не пройдёт.
2. vbmeta отвергает чужой boot
Verified boot сверяет хэши разделов. Изменённый boot при включённой проверке даёт бесконечный цикл с логотипом. Прошейте vbmeta с флагами: fastboot flash vbmeta_b --disable-verity --disable-verification vbmeta.img. Суффикс должен совпадать со слотом, куда пойдёт boot. Если прошивка проверяет vbmeta_system, повторите то же для него.
3. Образ ушёл не в тот слот
У телефона два набора разделов, A и B. Команда fastboot getvar current-slot показывает активный. Прошивайте в неактивный: fastboot flash boot_b boot.img, затем fastboot set_active b. Слот a остаётся нетронутым, и fastboot set_active a возвращает обычный Android.
4. Rootfs лежит там, где Android её зашифровал
Userdata зашифрована, ключи держит Android, и initramfs их не получит. Распакуйте ArchLinuxARM-aarch64-latest.tar.gz на отдельный раздел, который вы создали сами, или на ext4-раздел USB-накопителя. Берите ext4: Android использует её сам, поэтому драйвер есть в ядре. Накопителю нужен USB в режиме host, а он тоже зависит от модулей (пункт 6).
5. Cmdline не указывает ядру корень
Cmdline зашит в заголовок boot.img и задаётся при сборке через mkbootimg --cmdline. Оставьте стоковые параметры, которые покажет unpack_bootimg, и добавьте root=/dev/sda1 rootwait rw. Без rootwait ядро не ждёт, пока накопитель определится, и паникует раньше. Для отладки добавьте ignore_loglevel и console=tty0.
6. Vendor-модули от другой прошивки
Эта ошибка роняет загрузку без единого сообщения на экране. Модули собраны под конкретное ядро: поле vermagic и CRC символов должны совпасть. Если ядро взято из HyperOS, а модули из MIUI, dmesg покажет «Exec format error» или «disagrees about version of symbol module_layout». Берите boot, vendor_boot и vendor_dlkm из одного пакета прошивки. Распакуйте boot.img утилитой unpack_bootimg, super.img разберите через lpunpack, а порядок загрузки возьмите из modules.load в ramdisk vendor_boot. В initramfs копируйте минимум: UFS, USB, питание, дисплей. Остальные модули положите в /usr/lib/modules/версия и выполните depmod.
7. Firmware остаётся в разделах Android
Wi-Fi, Bluetooth, DSP и GPU запрашивают прошивки, которых нет в пакете linux-firmware. Android берёт их из разделов modem, dsp, bluetooth и из /vendor/firmware. Смонтируйте эти разделы в Arch только на чтение и укажите путь параметром firmware_class.path или скопируйте файлы в /usr/lib/firmware. Имена разделов смотрите в Android: ls /dev/block/bootdevice/by-name.
8. Экран без ускорения и телефон без доступа по USB
На стоковом ядре GPU Adreno управляет драйвер kgsl, а Mesa с freedreno рассчитана на mainline-драйвер msm. Поэтому вывод идёт через KMS или fbdev, а рендеринг программный. Для консоли и SSH этого хватает, для 3D нет. Доступа по USB тоже не будет: Android поднимает gadget своим init-скриптом, а у вас его нет. Настройте gadget через configfs прямо в initramfs: сетевой интерфейс ECM, статический адрес, sshd. Тогда система доступна с ноутбука по кабелю, и экран не нужен.
9. Нет пути назад
Перед первой прошивкой снимите копии boot, vendor_boot, vbmeta, dtbo и особенно persist командой dd из рабочего Android с root или из recovery. Не трогайте xbl, abl и modem: ошибка в них оставляет только EDL, а для него Xiaomi требует авторизованную сервисную учётную запись. Храните копии вне телефона и подписывайте версией прошивки.
Что делать, если ошибка повторяется 🔁
Без UART логи берут из pstore. Если в ядре включён ramoops, после паники в /sys/fs/pstore остаётся console-ramoops с последними строками. Прочитайте его из стокового слота с root или из recovery. Ищите первую строку с ошибкой, а не последнюю: паника в конце почти всегда следствие. Сверяйте симптом с таблицей.
| Симптом | Причина | Что проверить |
|---|---|---|
| Логотип Mi по кругу, затем fastboot | vbmeta отвергает boot или образ лежит в неактивном слоте | fastboot getvar current-slot, флаги --disable-verity и --disable-verification на нужном слоте |
| Паника «Unable to mount root fs» | В initramfs нет модулей UFS или USB, нет rootwait, rootfs в зашифрованной userdata | modules.load из vendor_boot, параметры root= и rootwait, раздел с rootfs |
| «Exec format error» при загрузке модуля | vermagic модуля не совпадает с ядром | modinfo модуля и версия ядра из той же сборки прошивки |
| Система поднялась, Wi-Fi и Bluetooth нет | Ядро не нашло firmware | dmesg, firmware_class.path, смонтированы ли modem и bluetooth |
| Загрузка идёт, но SSH недоступен | Не настроен USB gadget | configfs, интерфейс ECM, адрес на стороне хоста |
Если ошибка остаётся, вернитесь на стоковый слот, пересоберите образ с нуля из одного пакета прошивки и меняйте по одному параметру за раз. Две правки сразу делают причину неразличимой.
Как предотвратить поломку после обновления Android 🛡️
OTA на A/B-телефоне пишет новую сборку в неактивный слот и переключает загрузку на него: ваш образ затирается, а версия ядра и vendor-модулей меняется. Устройство с Arch Linux нельзя обновлять «как обычно». Работает такой порядок:
- ✓Заморозьте версию прошивки: храните пакет вместе с хэшем и берите из него ядро, модули и firmware.
- ✓Держите сборку в git: параметры mkbootimg, cmdline, скрипт initramfs. Пересборка тогда занимает минуты.
- ✓Отключите автоматическую загрузку обновлений и проверяйте каждую новую прошивку на одном аппарате, прежде чем трогать остальные.
- ✓Держите стоковый слот чистым: это единственный быстрый откат.
Что выбрать бизнесу: Arch Linux на телефоне или мобильное приложение 📱
Arch Linux на смартфоне оправдан в лаборатории, для прототипа киоска или как карманный сервер разработчика. Для сотрудников он не подходит. Разблокированный загрузчик отключает verified boot, поэтому нет гарантии, что устройство с заявками и контактами клиентов не подменили. Если на телефоне лежат персональные данные, оператор по 152-ФЗ обязан защищать их техническими мерами, а телефон со снятой проверкой загрузки эту защиту ослабляет.
Задачи малого и среднего бизнеса в Москве обычно проще: выездной сотрудник принимает заявку, кладовщик сверяет остатки, дилер оформляет заказ. Всё это работает на обычном Android и iOS. Нужно приложение под процесс и связь с учётной системой.
Мы делаем такие приложения: разработка мобильных приложений стоит от 500 000 ₽. Если данные живут в 1С, приложение обменивается ими с базой, так устроена интеграция приложения с 1С. Для клиентов и дилеров мы собираем B2B-приложение с 1С, где контрагент сам смотрит цены и остатки и оформляет заказ. Для склада без стабильной сети подойдёт 1С:Мобильная платформа с офлайн-режимом.
Мобильную часть и сторону 1С делает одна команда, поэтому нет стыка между подрядчиком по приложению и подрядчиком по 1С, на котором обычно теряются сроки. Доработка 1С под обмен идёт по ставке сопровождения 3 800 ₽ в час. Начинаем с короткого разбора: какие операции сотрудник выполняет на телефоне и какие данные берёт из 1С. После него называем срок и смету до начала разработки.
❓ Частые вопросы
Можно ли запустить Arch Linux на Xiaomi 12T Pro без разблокировки загрузчика?
С собственным ядром нельзя: закрытый загрузчик не принимает чужой boot.img. Без разблокировки Arch Linux ARM запускают в proot через Termux поверх Android. Он работает на стоковом ядре, поэтому подходит для командной строки и серверных утилит, но не даёт доступа к железу и не заменяет полноценную загрузку.
Какое ядро брать для Arch Linux на Xiaomi 12T Pro: стоковое или mainline?
Стоковое ядро 5.10 из вашей версии прошивки и vendor-модули той же сборки поднимают железо быстрее: драйверы Xiaomi уже готовы. Mainline-ядро для этой модели придётся портировать самим, включая описание устройства. Для рабочей задачи с SSH и консолью выбирают стоковое ядро и фиксируют версию прошивки.
Что будет с данными при разблокировке загрузчика Xiaomi?
Mi Unlock стирает раздел userdata: фото, приложения и настройки исчезают. Сделайте резервную копию до разблокировки. Отдельно снимите образ раздела persist, где лежат калибровки и серийные данные: без сервисных инструментов восстановить его нельзя. Разблокировка даёт сервису право отказать в гарантийном ремонте, поэтому не делайте её на рабочих устройствах без решения владельца.
Подойдёт ли телефон с Arch Linux как рабочее устройство сотрудника?
Нет. Разблокированный загрузчик отключает проверку целостности загрузки, обновления Android ломают связку ядра и модулей, а поддержку приходится вести самим. Сотруднику нужен стоковый Android и приложение под его задачу: заявки, остатки, заказы из 1С. Такое приложение работает на любом современном смартфоне и не требует вмешательства в систему.
Сколько стоит мобильное приложение с интеграцией 1С?
Разработка мобильного приложения у нас стоит от 500 000 ₽. Итоговая смета зависит от числа экранов, платформ и объёма обмена с 1С: заявки, остатки, заказы, документы. Доработку на стороне 1С считаем по ставке сопровождения 3 800 ₽ в час. Точную стоимость и срок называем после короткого разбора задачи.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

