Сборка прошивки из исходного кода начинается не с команды компиляции, а с проверки трёх вещей: точного названия устройства, ревизии платы и версии загрузчика — несовпадение хотя бы одного из этих параметров превращает готовый образ в потенциальный «кирпич».
В этой статье разберём полный цикл: как подготовить среду сборки, где брать исходники, как настроить конфигурацию под конкретное устройство, скомпилировать образ и безопасно его установить. Материал подходит для сборки прошивок роутеров (OpenWrt, DD-WRT), Android-устройств (LineageOS, AOSP) и встраиваемых систем на базе Buildroot и Yocto.
Что такое сборка прошивки и когда она нужна
Сборка прошивки — это процесс компиляции исходного кода операционной системы устройства в готовый бинарный образ, который можно записать во флеш-память. В отличие от установки готового файла, самостоятельная сборка даёт контроль над составом системы: какие драйверы включить, какие сервисы вырезать, какие патчи применить.
Типичные ситуации, когда без сборки не обойтись:
- 🔧 Производитель прекратил поддержку устройства, а обновления безопасности нужны
- 🧩 Требуется добавить драйвер или модуль, отсутствующий в стоковой прошивке
- 🛡️ Нужно убрать лишние компоненты и сократить поверхность атаки
- 🧪 Вы разрабатываете собственное устройство и собираете систему под свою плату
Отдельный сценарий — портирование прошивки на неподдерживаемое устройство. Это самый сложный путь: потребуется адаптировать device tree (описание оборудования) и иногда править исходники драйверов. Новичкам лучше начинать с устройств, для которых уже есть официальная поддержка в выбранном проекте.
Подготовка среды сборки
Большинство проектов прошивок собирается под Linux. Работать из Windows напрямую не получится — понадобится либо отдельная машина с Ubuntu или Debian, либо виртуальная машина, либо WSL2. Учтите: сборка в виртуальной среде заметно медленнее, чем на «голом железе».
Требования к железу зависят от проекта, но ориентиры общие. Для сборки Android-прошивок нужен объёмный диск (сотни гигабайт свободного места) и много оперативной памяти — желательно от 16 ГБ. Прошивки роутеров на базе OpenWrt скромнее: хватит нескольких десятков гигабайт и 4–8 ГБ ОЗУ. Точные требования всегда указаны в документации конкретного проекта — сверьтесь с ней до начала.
Базовый набор пакетов для Debian-подобных систем обычно включает компилятор, систему сборки и утилиты для работы с репозиториями:
sudo apt update
sudo apt install build-essential git python3 gawk unzip libncurses-dev zlib1g-dev
Это минимальный каркас. Каждый проект добавляет свои зависимости: для AOSP список заметно длиннее, чем для OpenWrt. Если при сборке вылезает ошибка об отсутствующей библиотеке — просто доустановите пакет, указанный в сообщении, и запустите сборку заново.
Получение исходного кода
Исходники берутся из официальных репозиториев проекта. Для роутерных прошивок это обычно один git-репозиторий, для Android — дерево из сотен репозиториев, которое синхронизируется утилитой repo.
Пример клонирования дерева исходников OpenWrt:
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git checkout v23.05.5
Обратите внимание на третью строку: переключение на конкретный тег стабильного релиза вместо ветки разработки. Сборка из master-ветки почти гарантированно даст нестабильный результат — там активно меняется код, и конфигурация может сломаться в любой момент. Всегда фиксируйте версию по тегу релиза.
⚠️ Внимание: скачивайте исходники только с официальных репозиториев проекта. Сторонние «сборки с доработками» с форумов могут содержать вредоносный код, который попадёт прямо в прошивку устройства.
Для Android-проектов, таких как LineageOS, дополнительно понадобятся проприетарные блобы — закрытые драйверы от производителя устройства. Их извлекают из стоковой прошивки или берут из репозиториев вроде TheMuppets. Без этих файлов система соберётся, но часть оборудования (камера, модем, аудио) работать не будет.
Конфигурация под устройство
Перед компиляцией систему нужно настроить: выбрать целевую платформу, профиль устройства и набор пакетов. В OpenWrt для этого служит текстовое меню, запускаемое командой:
make menuconfig
В меню выбираются три ключевых пункта: Target System (семейство чипов), Subtarget (подсемейство) и Target Profile (конкретная модель устройства). Ошибка в любом из них приведёт к образу, который либо не встанет на устройство, либо запустится без части периферии.
Для LineageOS конфигурация проще: после синхронизации исходников выполняется выбор цели через breakfast <кодовое_имя>, где кодовое имя — внутреннее обозначение модели (например, cheeseburger для OnePlus 5). Узнать кодовое имя своего устройства можно на официальной wiki проекта.
☑️ Проверка перед запуском компиляции
Компиляция и типичные ошибки
Сама сборка запускается одной командой. Для большинства проектов это вариация make с указанием числа параллельных потоков — обычно по количеству ядер процессора:
make -j$(nproc)
Первая сборка — самая долгая: скачиваются исходники всех пакетов, собирается кросс-компилятор (toolchain), затем вся система. В зависимости от проекта и железа это занимает от десятков минут до нескольких часов. Повторные сборки идут намного быстрее благодаря кэшу.
Что делать, если сборка падает с ошибкой:
- 📋 Читайте последние строки лога — там почти всегда указана реальная причина
- 📦 Ошибка вида «command not found» или «missing header» — доустановите недостающий пакет
- 🌐 Ошибка загрузки исходников — проверьте сеть или смените зеркало
- 🔁 После исправления перезапустите сборку той же командой — она продолжится с места сбоя
Для Android-проектов полезна переменная окружения ccache — кэш компилятора, который ускоряет пересборку в разы. Его настройка описана в документации LineageOS и занимает пару минут, а экономит часы.
Как читать лог ошибки сборки
Ищите первое вхождение слова «Error» с конца файла — ошибки выше по логу часто являются следствием. Скопируйте текст ошибки в поисковик вместе с названием проекта: почти любая типовая проблема сборки уже кем-то решена на форумах и в трекерах проекта.
Сравнение популярных систем сборки
Выбор инструментария зависит от задачи. Ниже — ориентировочное сравнение основных подходов:
| Проект | Назначение | Сложность | Требования к диску |
|---|---|---|---|
| OpenWrt | Роутеры, сетевые устройства | Низкая-средняя | Десятки ГБ |
| Buildroot | Простые встраиваемые системы | Средняя | Десятки ГБ |
| Yocto | Промышленные встраиваемые системы | Высокая | От сотни ГБ |
| AOSP / LineageOS | Смартфоны и планшеты | Высокая | Сотни ГБ |
Точные цифры по диску и памяти меняются от версии к версии — актуальные требования смотрите в официальной документации выбранного проекта перед началом работы.
Установка собранной прошивки и откат
Готовый образ появляется в выходном каталоге сборки (в OpenWrt это подкаталог bin/targets/...). Перед заливкой сверьте имя файла с моделью устройства — в имени образа зашит профиль, и он должен совпадать полностью, включая ревизию.
Способ установки зависит от устройства: через веб-интерфейс штатной прошивки, через fastboot или recovery для смартфонов, через TFTP для некоторых роутеров. Универсальной процедуры нет — следуйте инструкции именно для вашей модели из официальной документации.
⚠️ Внимание: перед любой прошивкой сделайте полный бэкап текущей системы и, если устройство позволяет, дамп заводского раздела с калибровками (для роутеров это часто раздел ART или radio). Его потеря может необратимо вывести из строя Wi-Fi или модем.
Заранее узнайте, как устроено восстановление вашего устройства: есть ли режим аварийной загрузки, как войти в recovery, поддерживается ли прошивка по TFTP. Это займёт полчаса чтения, но именно эти знания превращают «кирпич» обратно в рабочий девайс.
⚠️ Внимание: самостоятельная прошивка почти всегда означает потерю гарантии и несёт риск повреждения устройства. Если аппарат на гарантии или является единственным рабочим инструментом — взвесьте риски или доверьте процедуру специалисту.
Часто задаваемые вопросы
Можно ли собрать прошивку под Windows?
Напрямую — нет, все основные системы сборки рассчитаны на Linux. Рабочие варианты: виртуальная машина с Ubuntu, подсистема WSL2 или выделенный сервер. Для тяжёлых проектов вроде AOSP многие арендуют облачную виртуалку на время сборки.
Сколько времени занимает сборка прошивки?
Зависит от проекта и железа. OpenWrt на современном ПК собирается за десятки минут, полная сборка Android с нуля может занять несколько часов. Повторные сборки с кэшем проходят в разы быстрее.
Что делать, если устройство не загрузилось после прошивки?
Не паникуйте: у большинства устройств есть механизм восстановления — recovery-режим, fastboot или загрузка по TFTP. Порядок восстановления индивидуален для каждой модели, ищите инструкцию на официальном сайте прошивки или профильном форуме именно для вашей ревизии устройства.
Нужно ли знать программирование для сборки прошивки?
Для сборки готового профиля — нет: достаточно уверенной работы в командной строке и внимательности. Программирование понадобится, только если вы портируете прошивку на новое устройство или правите исходный код драйверов.
Легально ли собирать и устанавливать свою прошивку?
Исходный код открытых проектов (OpenWrt, LineageOS, Buildroot) распространяется свободно. Ограничения касаются проприетарных компонентов и гарантийных обязательств: установка сторонней прошивки обычно аннулирует гарантию производителя. Уточняйте условия для вашего устройства.