Прошивка (Firmware)
Программа, записанная в постоянную память устройства и управляющая его «железом»: от роутера и BIOS компьютера до датчика.
Прошивка (firmware) — программа, которая хранится в постоянной памяти устройства и управляет его аппаратной частью. Она есть почти везде, где есть электроника: в роутере, принтере, телевизоре, SSD-накопителе, автомобиле, счетчике, датчике интернета вещей. Название отражает промежуточное положение: это уже не «железо» (hardware), но еще и не обычные программы (software), которые пользователь устанавливает и удаляет.
Где встречается
- Компьютеры — UEFI (ранее BIOS) запускается первым при включении, проверяет оборудование и передает управление операционной системе.
- Сетевое оборудование — прошивка роутера — по сути целая операционная система на основе Linux.
- Накопители и периферия — у каждого SSD, в том числе NVMe, своя прошивка, которая управляет записью в ячейки памяти.
- Встраиваемые устройства — программа микроконтроллера, например ESP32, которая читает датчики и управляет реле, — тоже прошивка.
Как устроено обновление
«Перепрошить» — значит записать в устройство новую версию прошивки: исправить ошибки, закрыть уязвимости, добавить функции. Надежное обновление по воздуху (OTA) обычно устроено так:
- В памяти есть два раздела под прошивку: рабочий и запасной.
- Новая версия скачивается в запасной раздел, пока устройство продолжает работать.
- Проверяются целостность и цифровая подпись производителя.
- Устройство перезагружается в новую версию, а если она не запустилась или не подтвердила работоспособность — автоматически возвращается к прежней.
Без такой схемы сбой питания во время обновления превращает устройство в «кирпич».
Безопасность прошивки
- Подпись и безопасная загрузка. Устройство запускает только прошивку, подписанную производителем, и злоумышленник не может подменить ее своей.
- Шифрование памяти защищает прошивку от копирования с устройства.
- Своевременные обновления. Устаревшие прошивки камер и роутеров — главная причина массовых взломов устройств, которые затем используют для DDoS-атак.
Разработка
Прошивки пишут в основном на C и C++ с учетом ограниченных памяти и энергии. Отладку ведут на реальных платах с помощью программаторов, а запись в устройство выполняют специальными утилитами — например, esptool для ESP32:
# Командная строка Linux
esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash 0x10000 firmware.bin
Для серийных изделий процесс выпуска прошивок организуют так же строго, как для серверного кода: версии, автоматическая сборка и тесты, подпись, поэтапная раздача обновлений — сначала небольшой части устройств, затем всем.