Прошивка
Прошивка (firmware) — программное обеспечение, «вшитое» в устройство и запускаемое первым. Оно живёт в постоянной памяти самого устройства, работает без операционной системы и как раз для того, чтобы операционная система смогла запуститься.
Прошивка — это не «программа на диске». Она часть железа: без неё процессор после включения не знает, что делать, а плата не умеет даже включить память. Именно поэтому она хранится отдельно от дисков — в микросхеме на плате (см. POST).
Чем прошивка отличается от ОС и от обычных программ
| Прошивка | Операционная система | Программа | |
|---|---|---|---|
| Где живёт | в постоянной памяти устройства | на диске | на диске |
| Когда запускается | сразу после включения | после прошивки и загрузчика | по запросу |
| Что знает про железо | всё, напрямую | через драйверы | через ОС |
| Кто её меняет | производитель (обновление прошивки) | пользователь | пользователь |
Граница размыта: микрокод процессора, прошивка SSD, контроллер сети — всё это тоже «прошивка», хотя к загрузке ОС отношения не имеет.
Какая бывает прошивка
По назначению:
- прошивка платформы — BIOS или UEFI: то, что запускается после нажатия кнопки питания;
- микрокод процессора — исправления и обновления логики самого CPU, подгружаются прошивкой и ОС;
- прошивки контроллеров — Intel Management Engine, AMD Platform Security Processor, встроенный контроллер (EC) на ноутбуках, BMC на серверах;
- прошивка периферии — SSD и NVMe, сетевые карты, RAID-контроллеры, видеокарты, принтеры, роутеры, ТВ-приставки.
По типу устройства:
- x86 — BIOS и UEFI;
- ARM — Trusted Firmware-A (TF-A), U-Boot, OP-TEE;
- RISC-V — OpenSBI;
- встраиваемые — Zephyr, FreeRTOS и другие RTOS на микроконтроллерах.
По модели разработки:
- проприетарная — собирается из кода производителя кремния (Intel, AMD, ARM) и «движка» вендора;
- открытая — coreboot, EDK II (TianoCore), LinuxBoot, U-Boot, OpenBMC, TF-A.
Кто пишет прошивки
Прошивка платформы — продукт нескольких компаний сразу:
- Производитель кремния (Intel, AMD, ARM) даёт reference code: как инициализировать процессор, чипсет, память, как запустить остальное. Без него прошивку не собрать.
- IBV — independent BIOS vendor (AMI с продуктом Aptio, Phoenix, Insyde с H2O) делает «движок» прошивки: инфраструктуру UEFI, драйверы, интерфейс настроек.
- Производитель платы или компьютера (Dell, HP, Lenovo, ASUS, Gigabyte, а также ODM вроде Quanta и Compal) собирает из этого свою прошивку: настраивает под конкретную плату, добавляет фирменный Setup, обновления, логотипы.
- Открытые команды делают то же самое свободно: coreboot (инициализация платы), EDK II/TianoCore (UEFI), LinuxBoot (вместо части UEFI — ядро Linux), U-Boot, OpenBMC (прошивка BMC), TF-A (ARM).
- Встраиваемые команды в продуктовых компаниях — автомобили, телеком, медицина, бытовая техника: там прошивка пишется под конкретное устройство.
Отсюда практическое следствие: «прошивка ASUS» — это не то же самое, что «прошивка Gigabyte», хотя внутри обеих много общего кода. Поэтому и сообщения, и настройки, и звуковые сигналы у них разные.
Где этому учат
Отдельной специальности «инженер прошивок» почти нет — это специализация на стыке архитектуры ЭВМ и системного программирования. Реальные пути:
- вузовские курсы: «Архитектура ЭВМ», «Системное программирование», «Встраиваемые системы», «Операционные системы». Это база: без понимания регистров, прерываний и памяти в прошивке делать нечего.
- спецификации как учебник: спецификации UEFI и PI (Platform Initialization) от UEFI Forum выложены бесплатно и описывают ровно то, из чего состоит современная прошивка.
- книги: «Beyond BIOS» (Zimmer и др.) — про UEFI и PI; «Harnessing the UEFI Shell»; «The Firmware Handbook» (Ganssle) — про встраиваемую прошивку; «Making Embedded Systems» (White).
- открытый код: coreboot, EDK II, LinuxBoot, U-Boot, OpenBMC — это лучший учебник. Можно читать код, собирать прошивку и запускать её.
- практика без железа: QEMU с прошивкой OVMF (из TianoCore) позволяет пройти всю цепочку SEC → PEI → DXE → BDS и отлаживать её, не имея физической платы. Для встраиваемых — платы вроде STM32 или ESP32.
- сообщества: рассылки и репозитории coreboot и TianoCore, UEFI Forum, osdev.org, r/embedded.
- работа: вакансии «BIOS engineer», «UEFI firmware engineer», «embedded firmware engineer». Обычно требуют уверенный C, ассемблер, понимание PCIe/USB/ACPI и опыт отладки на уровне железа.
Прошивка и загрузка
Прошивка — первое звено загрузки:
- питание подано, процессор сброшен;
- прошивка инициализирует железо — это POST;
- в современном компьютере прошивка — это UEFI; в старом — BIOS;
- прошивка находит и запускает загрузчик (GRUB 2);
- дальше — ядро и systemd.
Посмотреть прошивку из системы
# производитель, версия и дата прошивки
sudo dmidecode -t bios
# то же без root
cat /sys/class/dmi/id/bios_vendor /sys/class/dmi/id/bios_version /sys/class/dmi/id/bios_date
# устройства, для которых есть обновления прошивки
fwupdmgr get-devices
Комментарии
Пока комментариев нет.