Дополнительное ПЗУ

редактировать

Дополнительное ПЗУ - это часть прошивки, которая находится в BIOS или на карта расширения, которая затеняется в память и запускается для инициализации устройства и регистрации его в BIOS. По сути, это драйвер, взаимодействующий между службами BIOS и оборудованием.

Содержание
  • 1 Спецификация загрузки BIOS
    • 1.1 SCSI
    • 1.2 Сетевая загрузочная ПЗУ
  • 2 Дополнительные ПЗУ UEFI
  • 3 См. Также
  • 4 Справочная информация
Спецификация загрузки BIOS

Спецификация загрузки BIOS (BBS) была разработана консорциумом, включающим Compaq, Intel и Phoenix Technologies для стандартизации последовательности инициализации дополнительных ПЗУ PnP BIOS. и устаревшие дополнительные ПЗУ, не соответствующие стандарту PnP BIOS и порядку, в котором они обрабатывают прерывания. Стандарт представляет понятие таблицы BCV и приоритета BCV. Основные принципы стандарта делают поведение более определенным и отлаживаемым, а также дают производителям BIOS возможность для дальнейшего динамического выбора загрузочного устройства для пользователя в дополнение к рекомендациям стандарта.

Обычным дополнительным ПЗУ является видео BIOS, которое загружается очень рано в процессе загрузки и перехватывает INT 10h, так что выход из power- при самотестировании может отображаться (POST). Видеобиос почти всегда располагается в сегменте памяти C000, в начале области памяти, зарезервированной для дополнительных ПЗУ; это связано с тем, что, когда материнская плата имеет встроенный контроллер VGA, дополнительное ПЗУ будет находиться в BIOS - BIOS знает, где оно находится, и затеняет его в память в определенное время. Другие ПЗУ могут быть расположены от сегментов C800до F400в ранних ПК. Окончательный адрес поиска в более поздних версиях был ограничен E000. Спецификация загрузки BIOS требует, чтобы дополнительные ПЗУ были выровнены по границам 2 КБ (например, сегменты C800, C880, C900, C980и т. Д.). Первые два байта ПЗУ должны быть 55 AA.

После завершения основных проверок POST BBS указывает, что BIOS обнаружит и затеняет все дополнительные ПЗУ, которые находятся в BIOS, в вышеупомянутую область, и он будет пересекайте пространство конфигурации PCI, заполняя XROMBAR и копируя ПЗУ дополнительных плат расширения из пространства MMIO в регион. Затем BIOS сканирует регион, и, если дополнительное ПЗУ имеет заголовок расширения PnP, он выполняет дальний вызов смещения + 03h в заголовке дополнительного ПЗУ для его инициализации. Затем он повторно сканирует область после того, как все дополнительные ПЗУ PnP были инициализированы (поскольку, как указано в приложении E, процедура инициализации дополнительного ПЗУ могла связать больше заголовков расширения PnP для отдельных дисков, которыми владеет устройство). Он добавляет указатель BCV (при его наличии) в заголовки расширения PnP. Он находит таблицу BCV или указатель BEV (при наличии) в таблицу приоритетов IPL. Записи BCV в таблице BCV затем вызываются в соответствии с переключаемым приоритетом в NVRAM. Таблица BCV заполнена указателями функций BCV, но имеет фиксированную запись, представляющую устаревшие дополнительные ПЗУ, которая является указателем на подпрограмму BIOS, которая вызывает + 03h во всех остальных дополнительных ПЗУ, которые не имеют заголовка расширения PnP. Функция BCV инициализирует перехватчики INT 13h и INT 19h, которые, согласно BBS, не должны выполняться в программе инициализации в + 03h. Если устройство не имеет заголовка расширения PnP, оно может выполнить любой перехват в подпрограмме в + 03h, поскольку это устаревшая карта.

В процедуре начальной инициализации, поскольку дополнительное ПЗУ указывает на структуру данных PCI (не такую ​​же, как пространство конфигурации), код дополнительного ПЗУ знает, что устройство и идентификатор поставщика имеют фиксированное смещение от RIP. Это позволяет сканировать конфигурационное пространство PCI, чтобы найти нужное устройство и полосы BAR, которые необходимо использовать. Чтобы предотвратить это сканирование и в случае двух идентичных карт в системе, BIOS передает PFA (шина / устройство / функция) в процедуру инициализации в AX, а номер выбора карты (CSN) для дополнительных ПЗУ ISA передается в BX. Затем он может взаимодействовать с устройством с помощью PMIO / MMIO, чтобы узнать, сколько дисков у него есть и какие из них являются загрузочными, путем чтения MBR. BIOS уже прочесал конфигурационное пространство, выделил BAR и заполнил таблицу ACPI перед вызовом процедуры инициализации, поэтому дополнительное ПЗУ будет использовать адреса, назначенные его BAR. BCV, однако, перехватывает подпрограммы прерывания, которые взаимодействуют с устройством, которые настраиваются на основе местоположения базового адреса MMIO, информации о диске, установленной в подпрограмме инициализации дополнительного ПЗУ, и текущего номера диска в BDA.

Затем процедура BIOS INT 19h использует приоритет таблицы IPL в NVRAM, чтобы решить, следует ли вызывать запись, содержащую обработчик загрузки, который будет читать MBR 00h (BAID гибкого диска; первое устройство в таблице BCV для register disk 00h), запись, содержащую обработчик загрузки, который будет читать MBR 80h (BAID жесткого диска; первое устройство в таблице BCV для регистрации диска 80h) или одну из записей BEV в таблице. Устройство имеет BEV или BCV только в том случае, если оно является загрузочным.

SCSI

Плата контроллера SCSI может подключать INT 13, который отвечает за предоставление дисковых услуг. Он будет делать это в своем BCV, если это карта PnP. Как только это будет сделано, любые последующие вызовы INT 13h будут "перехвачены" дополнительным ПЗУ SCSI (или "SCSI BIOS"), позволяя ему отвечать на запросы дисков, которые могут существовать на шине SCSI. До перехвата прерывания в системе могло не быть дисков, но перехватывая прерывание и изменяя возвращаемые значения, SCSI BIOS может сделать все диски на шине SCSI видимыми для системы.

В этом конкретном случае BIOS может вызвать INT 13h, чтобы предоставить пользователю список возможных загрузочных устройств, и поскольку SCSI BIOS перехватил прерывание, пользователь сможет выбрать не только стандарт системные устройства для загрузки, а также диски SCSI. Это связано с тем, что, как предлагается в Приложении D спецификации Boot BIOS, BIOS может заполнить таблицу IPL информацией об устройстве и поставщике из вызовов INT 13h на разные диски, в сочетании с номером жесткого диска (80h, 81h...), чтобы разрешить загрузку с любого жесткого диска, а не только с первого диска первого контроллера, который подключит INT 13h как загрузочный (элемент с наивысшим приоритетом в таблице BCV), называемое BIOS Aware IPL Device (BAID) в спецификации.

Несколько контроллеров могут перехватить INT 13h одновременно. Например, после контроллера SCSI контроллер AHCI может также перехватить INT 13h, поместив вызов предыдущего обработчика, который был сохранен в IDT в записи 13h контроллером SCSI, в конце своего собственного обработчика, который затем вставляет IDT в запись 13ч. Если INT 13h вызывается с DL = 83h, то ответит контроллер, назначивший диапазон диска, содержащий 83h, в противном случае он пропустит и вызовет предыдущий обработчик. Первый контроллер, подключившийся к INT 13h, увидит, что установлено 0 дисков, проверив байт 0040: 0075, который находится в области данных BIOS (BDA), и если у него есть 4 диска для перечисления, он назначит диапазон 80h – 83h и сохранит «4» в BDA.

ПЗУ для сетевой загрузки

Еще одним распространенным дополнительным ПЗУ является ПЗУ для сетевой загрузки. Дополнительное ПЗУ содержит программу, необходимую для загрузки загрузочного кода. Первоначальные ПЗУ IBM Personal Computer подключили INT 18H (первоначально для вызова Cassette BASIC ) и INT 19H, поскольку эти два прерывания были назначены перед началом процесса загрузки. INT 19H вызывается для запуска процесса загрузки, а INT 18H вызывается, когда система пытается загрузиться со всех возможных устройств, и ни одно из них не было загрузочным. Первоначально, подключив INT 18H, система вызывала Cassette BASIC (если присутствует) или пыталась загрузиться по сети, когда все другие загрузочные устройства (дисководы гибких дисков, жесткие диски и т. Д.) Выходили из строя. Подключив INT 19H, система попытается загрузиться по сети раньше всех других устройств. BBS указывает, что дополнительное ПЗУ NIC не перехватывает 19h, вместо этого обработчик 19h BIOS должен вызвать BEV, который затем загрузит загрузочный код.

Дополнительные ПЗУ UEFI

Спецификация PCI допускает использование нескольких образов дополнительных ПЗУ на одном устройстве. Эти дополнительные ПЗУ могут быть устаревшими x86 и UEFI. Если для формата дополнительного ПЗУ установлено значение «Совместимость с UEFI» в настройке UEFI, на этапе DXE будет загружено новое дополнительное ПЗУ UEFI, если оно есть, и устаревшее дополнительное ПЗУ, если оно отсутствует. UEFI может использовать устаревшие дополнительные ПЗУ, если включен модуль поддержки совместимости (CSM). Обратите внимание, что когда включена Безопасная загрузка, выполнение модуля поддержки совместимости и устаревших дополнительных ПЗУ запрещено, поскольку устаревшие драйверы микропрограмм не поддерживают аутентификацию, что представляет собой угрозу безопасности.

См. Также
Ссылки
Последняя правка сделана 2021-06-01 13:36:55
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте