Прошивка (Firmware)

Программа, записанная в постоянную память устройства и управляющая его «железом»: от роутера и BIOS компьютера до датчика.

Прошивка (firmware) — программа, которая хранится в постоянной памяти устройства и управляет его аппаратной частью. Она есть почти везде, где есть электроника: в роутере, принтере, телевизоре, SSD-накопителе, автомобиле, счетчике, датчике интернета вещей. Название отражает промежуточное положение: это уже не «железо» (hardware), но еще и не обычные программы (software), которые пользователь устанавливает и удаляет.

Где встречается

  • Компьютеры — UEFI (ранее BIOS) запускается первым при включении, проверяет оборудование и передает управление операционной системе.
  • Сетевое оборудование — прошивка роутера — по сути целая операционная система на основе Linux.
  • Накопители и периферия — у каждого SSD, в том числе NVMe, своя прошивка, которая управляет записью в ячейки памяти.
  • Встраиваемые устройства — программа микроконтроллера, например ESP32, которая читает датчики и управляет реле, — тоже прошивка.

Как устроено обновление

«Перепрошить» — значит записать в устройство новую версию прошивки: исправить ошибки, закрыть уязвимости, добавить функции. Надежное обновление по воздуху (OTA) обычно устроено так:

  1. В памяти есть два раздела под прошивку: рабочий и запасной.
  2. Новая версия скачивается в запасной раздел, пока устройство продолжает работать.
  3. Проверяются целостность и цифровая подпись производителя.
  4. Устройство перезагружается в новую версию, а если она не запустилась или не подтвердила работоспособность — автоматически возвращается к прежней.

Без такой схемы сбой питания во время обновления превращает устройство в «кирпич».

Безопасность прошивки

  • Подпись и безопасная загрузка. Устройство запускает только прошивку, подписанную производителем, и злоумышленник не может подменить ее своей.
  • Шифрование памяти защищает прошивку от копирования с устройства.
  • Своевременные обновления. Устаревшие прошивки камер и роутеров — главная причина массовых взломов устройств, которые затем используют для DDoS-атак.

Разработка

Прошивки пишут в основном на C и C++ с учетом ограниченных памяти и энергии. Отладку ведут на реальных платах с помощью программаторов, а запись в устройство выполняют специальными утилитами — например, esptool для ESP32:

# Командная строка Linux
esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash 0x10000 firmware.bin

Для серийных изделий процесс выпуска прошивок организуют так же строго, как для серверного кода: версии, автоматическая сборка и тесты, подпись, поэтапная раздача обновлений — сначала небольшой части устройств, затем всем.