POST
POST (Power-On Self-Test, самотестирование при включении) — первая часть работы прошивки после нажатия кнопки питания: она проверяет и настраивает оборудование, чтобы дальше можно было запустить загрузчик и операционную систему.
Важно понимать: POST — не отдельная программа рядом с UEFI, а начальный этап самой прошивки. В современном компьютере это стадии SEC → PEI → DXE, после которых та же прошивка переходит к BDS и запускает загрузчик.
Название «тест» описывает лишь половину работы. POST не столько проверяет железо, сколько приводит его в рабочее состояние: до инициализации контроллера памяти у процессора вообще нет оперативной памяти, а до инициализации видео — нет вывода на экран. Поэтому «просто протестировать» оборудование нельзя — сначала его нужно включить и настроить.
Место POST в цепочке загрузки
- нажатие кнопки включения;
- прошивка (UEFI) начинает работу;
- POST — инициализация железа:
SEC → PEI → DXE— эта страница; - BDS — выбор загрузочного устройства;
- запуск загрузчика GRUB 2;
- ядро и initramfs;
- systemd;
- окно входа (login или графический экран).
POST — единственный шаг, который не зависит ни от диска, ни от операционной системы. Он выполняется, когда на компьютере ещё нет ни того, ни другого.
Что делает POST
| Этап | Что происходит |
|---|---|
| Процессор | Сброс, загрузка микрокода, проверка базовых регистров |
| Чипсет | Настройка мостов, контроллеров, питания |
| Память | Обучение DRAM (тайминги, напряжения), проверка |
| Видео | Инициализация видеокарты, вывод первых сообщений |
| Ввод | Клавиатура, мышь, USB |
| Накопители | Обнаружение дисков, NVMe, RAID |
| Прошивка | Проверка контрольных сумм и подписей, применение настроек |
| Финал | Выбор загрузочного устройства и передача управления |
Порядок примерно такой, но у каждого производителя он свой: POST — часть прошивки конкретной материнской платы, а не стандартизованная программа.
Как процессор запускает POST
1. Сброс и фиксированная точка входа
При подаче питания чипсет сбрасывает процессор. Процессор переходит в заранее определённое состояние и начинает выполнять команды с одного и того же адреса, зашитого в архитектуру x86: FFFFFFF0h — последние 16 байт четырёхгигабайтного адресного пространства.
Сменить этот адрес нельзя: он часть архитектуры. Именно поэтому прошивка обязана оказаться именно там (см. следующий раздел).
В этих 16 байтах лежит команда перехода (jmp) на настоящий код POST. Первые инструкции выполняются в реальном режиме, без оперативной памяти и без какой-либо операционной системы.
2. Cache-as-RAM: POST работает без памяти
Чтобы что-то делать, нужна память. Пока контроллер DRAM не настроен, её нет — поэтому современные процессоры используют кэш как оперативную память (Cache-as-RAM; у Intel это No-Eviction Mode). Стек, переменные и таблицы на этом этапе живут в кэше.
3. Инициализация памяти — самая долгая часть
Настройка DRAM (у Intel — Memory Reference Code, у AMD — AGESA) — самая длительная стадия POST: читаются параметры модулей (SPD), подбираются тайминги и напряжения, проверяется стабильность. Именно поэтому при проблемах с памятью компьютер чаще всего «висит» дольше обычного и выдаёт ошибки памяти.
С этого момента POST может писать в настоящую оперативную память.
4. Прошивка проверяет сама себя
Дальше прошивка проверяет собственные контрольные суммы, а на современных платформах — и подписи модулей: Intel Boot Guard, AMD Hardware Verified Boot. На многих платах до этого успевает запуститься отдельный микроконтроллер (Intel Management Engine, AMD Platform Security Processor) со своей прошивкой — он живёт в той же микросхеме и тоже может остановить загрузку.
5. Видео, ввод, накопители — и передача управления
После памяти инициализируется видео, и на экране наконец появляются первые строки POST. Затем опрашиваются клавиатура и USB, обнаруживаются накопители, применяются настройки из Setup. В конце POST прошивка переходит к BDS и запускает загрузчик.
Обычно всё это занимает от долей секунды до нескольких секунд; на серверах обучение памяти может затянуться заметно дольше.
Где размещается код POST и почему именно там
Код POST лежит не на диске, а в микросхеме флеш-памяти на материнской плате — обычно это SPI NOR-флеш на 8–32 МБ (её часто называют «BIOS-чип»). Диск для POST бесполезен: до инициализации накопителей прочитать его невозможно.
Почему именно там:
- Адрес входа фиксирован. Процессор после сброса начинает с
FFFFFFF0h. Значит, код обязан быть доступен по этому адресу. - Чипсет переназначает адрес. Процессор не умеет читать SPI-флеш напрямую, поэтому чипсет отображает (алиасирует) верхнюю часть адресного пространства на флеш — по адресам у верхней границы 4 ГБ оказывается прошивка. Процессор выполняет её оттуда «на месте» (execute-in-place), подкачивая модули в память по мере надобности.
- Это же место использовали всегда. В реальном режиме старые BIOS жили по адресам
F0000h–FFFFFh(последние 64 КБ первого мегабайта), и верхнее отображение — та же область, только в 32-битном адресном пространстве. Так сохраняется совместимость. - Флеш не зависит от остального железа. Чтобы прочитать прошивку, не нужны ни драйверы, ни контроллер диска, ни память — только работающий чипсет. Это единственный носитель, доступный так рано.
Практическое следствие: прошивка привязана к конкретной материнской плате, поэтому сообщения, звуковые сигналы и коды ошибок POST у разных производителей разные.
Чем POST в BIOS отличается от POST в UEFI
Суть одна — инициализация железа. Отличаются организация и «хозяин» процесса:
| BIOS | UEFI | |
|---|---|---|
| Как устроен | единая процедура POST | стадии SEC → PEI → DXE |
| Режим работы | реальный, 16 бит | защищённый, 32/64 бита |
| Драйверы | Option ROM карт | UEFI-драйверы внутри прошивки |
| Проверка прошивки | контрольные суммы | подписи, Secure Boot |
| Что после | выбор диска по порядку | BDS и Boot Manager |
Поэтому подробности POST ниже одинаковы для обоих, а различия — на страницах BIOS и UEFI.
Как пользоваться POST
В обычной работе POST не требует участия — он просто проходит. Вмешательство нужно в двух случаях: настроить загрузку (зайти в Setup) и разобраться с ошибкой. Из-под Linux самого POST не видно: наблюдать можно только сигналы материнской платы и данные, которые прошивка оставила о себе в таблицах.
Звуковые сигналы
Если видео ещё не инициализировано, о проблеме сообщает встроенный динамик. Коды зависят от производителя прошивки; типичные примеры (сверяйтесь с документацией платы):
- один короткий — всё в порядке;
- повторяющиеся длинные — память;
- один длинный и два коротких — видео;
- один длинный и три коротких — клавиатура.
Индикаторы и POST-коды
На многих платах есть индикатор прохождения POST:
- 7-сегментный индикатор (ASUS Q-code, Gigabyte Debug LED, MSI) — показывает шестнадцатеричный код текущего этапа; зависшее значение и есть тот этап, на котором POST остановился;
- четыре светодиода CPU / DRAM / VGA / BOOT — самый простой способ понять, где застряла загрузка;
- POST-карта — плата расширения, которая читает коды из порта
80h; на современных платах вместо неё используют отладочный разъём LPC/eSPI.
Сообщения на экране
Как только видео инициализировано, POST выводит текстовые сообщения и подсказки: объём памяти, найденные диски, ошибки вроде CMOS checksum error, No keyboard detected, Boot device not found и приглашение вида «Press DEL to enter Setup».
Как увидеть POST-сообщения
Производители прячут POST за логотипом и ускоряют его. Чтобы вернуть сообщения, в настройках прошивки отключают:
- Quiet Boot / Full Screen Logo — показывать текст вместо логотипа;
- Fast Boot — не пропускать инициализацию USB и проверку памяти.
Вход в настройки — обычно Del, F2 или F10 сразу после включения.
Серверы: BMC и Serial Over LAN
У серверов POST можно смотреть удалённо: отдельный контроллер (BMC — iDRAC, iLO, IPMI) имеет доступ к видеовыходу и последовательному порту.
# журнал событий BMC: ошибки питания, памяти, вентиляторов
ipmitool sel list
# перенаправление консоли по сети (Serial Over LAN) — видно POST и загрузку
ipmitool -I lanplus -H <адрес-bmc> -U <пользователь> -P <пароль> sol activate
Если POST завис
- Считайте сигнал. Звук или код на индикаторе подскажет, на каком этапе остановилось.
- Посмотрите, где застыли светодиоды CPU / DRAM / VGA / BOOT.
- Минимальная конфигурация: процессор, один модуль памяти, встроенное видео, питание — без лишних карт и дисков.
- Память: переставьте модули, попробуйте по одному, в разных слотах — при ошибках памяти POST чаще всего и висит.
- Сбросьте настройки (Clear CMOS — перемычка или извлечение батарейки): испорченные настройки нередко мешают пройти POST.
- Питание: проверьте разъёмы питания платы и процессора, попробуйте другой блок питания.
- Плата: найдите код ошибки в документации, при необходимости обновите прошивку.
- Сервер: смотрите журнал BMC — он пишет ошибки, даже если POST не вывел ничего.
Полезные команды
Данные о прошивке и то, что POST собрал в таблицах SMBIOS:
# версия и производитель прошивки
sudo dmidecode -t bios
# модель платы и компьютера
sudo dmidecode -t baseboard
sudo dmidecode -t system
# модули памяти, как их увидел POST (из таблиц SMBIOS)
sudo dmidecode -t memory
# то же без root — из sysfs
cat /sys/class/dmi/id/bios_vendor /sys/class/dmi/id/bios_version /sys/class/dmi/id/bios_date
# сообщения ядра текущей загрузки (уже не POST, но видно работу с прошивкой)
sudo journalctl -k -b
Проверка UEFI и Secure Boot:
# загрузочные записи UEFI
efibootmgr -v
# состояние Secure Boot
mokutil --sb-state
# сведения о прошивке (UEFI) и загрузчике
bootctl status
Что запомнить
- POST — первая часть работы прошивки; она настраивает железо, а не только проверяет.
- POST — не отдельная сущность: в UEFI это стадии
SEC → PEI → DXEтой же прошивки. - Код POST живёт в прошивке материнской платы, а не на диске, потому что диск на этом этапе ещё недоступен.
- Процессор после сброса всегда начинает с адреса
FFFFFFF0h— поэтому чипсет отображает прошивку именно туда. - Из-под Linux самого POST не видно: наблюдайте его по сигналам, индикаторам и экрану, а данные о прошивке берите через
dmidecode.
Комментарии
Пока комментариев нет.