Основы embedded Linux
Тема дорожной карты · Embedded / Системный программист
Когда устройству нужны сеть, файловая система, USB-хост или графика, голый микроконтроллер уступает место процессору с Linux: NXP i.MX, Rockchip, Allwinner, Raspberry Pi. Embedded Linux — тот же ядро и пользовательское пространство, что на сервере, но собранные под конкретную плату, урезанные до нескольких десятков мегабайт и запускающиеся с eMMC или SD-карты. Ключевые понятия здесь — цепочка загрузки, кросс-компиляция и минимальная корневая файловая система.
Как это работает
Загрузка идёт цепочкой. Встроенный ROM-код процессора читает первичный загрузчик из фиксированного места на носителе, тот инициализирует DRAM и передаёт управление U-Boot. U-Boot умеет читать файловые системы и сеть, загружает образ ядра zImage или Image, дерево устройств .dtb и при необходимости initramfs, затем передаёт ядру командную строку с указанием корневой файловой системы, например root=/dev/mmcblk0p2 rootwait. Ядро монтирует rootfs и запускает первый процесс — init.
Роль init играет либо systemd, либо компактный BusyBox init со скриптами в /etc/init.d. BusyBox вообще заменяет собой сотню утилит одним бинарником и лежит в основе большинства встраиваемых rootfs. Корневая файловая система может быть на ext4 для eMMC, на SquashFS только для чтения с отдельным разделом данных, или на UBIFS для сырого NAND. Разделение системы на неизменяемую часть и раздел настроек — основа надёжного обновления.
Всё это собирается на хост-машине кросс-компилятором вроде aarch64-linux-gnu-gcc, потому что собирать ядро на самой плате долго. Набор загрузчика, ядра, дерева устройств и драйверов под конкретную плату называют BSP — Board Support Package; его обычно поставляет производитель модуля, а сборочные системы Yocto и Buildroot превращают его в воспроизводимый образ. Отладка ведётся через последовательную консоль UART: именно там видны сообщения U-Boot и паника ядра, когда сеть и дисплей ещё не работают.
Когда применять
Linux выбирают, когда нужны сложные стеки — TCP/IP с TLS, Wi-Fi, Bluetooth, USB, файловые системы, графика, контейнеры — и когда задержки в единицы миллисекунд допустимы. Если требуется жёсткое реальное время, применяют либо ядро с патчем PREEMPT_RT, либо гибрид: Linux для интерфейсов и отдельный микроконтроллер для управления моторами. Для устройств с батарейным питанием и бюджетом в милливатты Linux обычно избыточен.
Типичные ошибки
Самая частая — не прочитать вывод серийной консоли: разработчик часами ищет «неработающий Ethernet», а ядро в первых строках сообщает, что не нашло dtb. Вторая — собрать rootfs с glibc для одной архитектуры и ядро для другой ABI, получив Illegal instruction на первом же процессе. Третья — писать данные на SD-карту без учёта её износа и внезапных отключений питания; без журналируемой файловой системы и правильного монтирования устройство рано или поздно не загрузится. Четвёртая — хранить в образе пароль root по умолчанию и открытый SSH. И, наконец, полагаться на образ, собранный вручную «на коленке», вместо воспроизводимой сборки: через год его никто не сможет повторить.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- Ethernet /ˈiːθərnɛt/ «Исернет» с «θ» разбор: Сети: gateway, subnet, latency, throughput, handshake
- partition /pɑːrˈtɪʃən/ ударение на второй слог разбор: Словарь system design: scale out, consistency, throughput, partition
- could /kʊd/ l немое разбор: Смягчение критики: consider, might, what if
- bare /bɛər/ как *bear* разбор: Метафоры инфраструктуры: bare metal, sidecar, canary, blue-green
- kernel /ˈkɜːrnəl/ «кёрнел», не «кернел» разбор: Английский Linux и терминала
- architecture /ˈɑːrkɪtɛktʃər/ ударение на первый слог, «Аркитекчер» разбор: Письменная коммуникация
- command /kəˈmɑːnd/ ударение на второй слог разбор: Английский Linux и терминала