Прошивка

Прошивка (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.

Кто пишет прошивки

Прошивка платформы — продукт нескольких компаний сразу:

  1. Производитель кремния (Intel, AMD, ARM) даёт reference code: как инициализировать процессор, чипсет, память, как запустить остальное. Без него прошивку не собрать.
  2. IBV — independent BIOS vendor (AMI с продуктом Aptio, Phoenix, Insyde с H2O) делает «движок» прошивки: инфраструктуру UEFI, драйверы, интерфейс настроек.
  3. Производитель платы или компьютера (Dell, HP, Lenovo, ASUS, Gigabyte, а также ODM вроде Quanta и Compal) собирает из этого свою прошивку: настраивает под конкретную плату, добавляет фирменный Setup, обновления, логотипы.
  4. Открытые команды делают то же самое свободно: coreboot (инициализация платы), EDK II/TianoCore (UEFI), LinuxBoot (вместо части UEFI — ядро Linux), U-Boot, OpenBMC (прошивка BMC), TF-A (ARM).
  5. Встраиваемые команды в продуктовых компаниях — автомобили, телеком, медицина, бытовая техника: там прошивка пишется под конкретное устройство.

Отсюда практическое следствие: «прошивка 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 и опыт отладки на уровне железа.

Прошивка и загрузка

Прошивка — первое звено загрузки:

  1. питание подано, процессор сброшен;
  2. прошивка инициализирует железо — это POST;
  3. в современном компьютере прошивка — это UEFI; в старом — BIOS;
  4. прошивка находит и запускает загрузчик (GRUB 2);
  5. дальше — ядро и 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

Смотрите также

  • BIOS — прошивка прошлого поколения
  • UEFI — современная прошивка
  • POST — что прошивка делает при включении
  • Загрузка — весь процесс по шагам
Оценка статьи 0

Комментарии

Пока комментариев нет.