stringtranslate.com

Опциональное ПЗУ

Дополнительное ПЗУ для платформы ПК (т. е. IBM PC и производных от него компьютерных систем) — это часть прошивки , которая находится в ПЗУ на карте расширения (или хранится вместе с основным системным BIOS ), которая выполняется для инициализации устройства и (опционально) добавления поддержки устройства в BIOS. При обычном использовании это, по сути, драйвер , который взаимодействует между API BIOS и оборудованием. Технически, дополнительное ПЗУ — это прошивка, которая выполняется BIOS после POST (тестирование и инициализация базового системного оборудования) и до процесса загрузки BIOS, получая полный контроль над системой и, как правило, не имея ограничений в том, что она может делать. BIOS полагается на каждое дополнительное ПЗУ, чтобы вернуть управление BIOS, чтобы он мог либо вызвать следующее дополнительное ПЗУ, либо начать процесс загрузки. По этой причине возможно (но не обычно), что дополнительное ПЗУ сохранит управление и предупредит процесс загрузки BIOS. BIOS (по крайней мере, в первоначальном виде, разработанном IBM) обычно сканирует и инициализирует (путем выполнения) дополнительные ПЗУ в порядке возрастания адресов с интервалом в 2 КБ в двух различных диапазонах адресов выше адреса C0000h в обычном (20-битном) адресном пространстве памяти; более поздние системы могут также сканировать дополнительные диапазоны адресов в 24-битном или 32-битном расширенном адресном пространстве.

Дополнительные ПЗУ необходимы для включения не-Plug and Play периферийных устройств для загрузки и расширения BIOS для поддержки любого не-Plug and Play периферийного устройства таким же образом, как поддерживаются стандартные и интегрированные в материнскую плату периферийные устройства. Дополнительные ПЗУ также используются для расширения BIOS или добавления других служб прошивки в BIOS. В принципе, дополнительное ПЗУ может предоставлять любое расширение прошивки, например библиотеку подпрограмм видеографики или набор служб обработки звука PCM, и вызывать его установку в системную оперативную память и, опционально, в систему прерываний ЦП перед загрузкой.

Распространенным дополнительным ПЗУ является видео BIOS , который загружается очень рано в процессе загрузки и перехватывает INT 10h , чтобы можно было отобразить вывод самотестирования при включении питания (POST). Видео BIOS почти всегда располагается в сегменте памяти, начинающемся с C0000h, начала области памяти, зарезервированной для дополнительных ПЗУ; это связано с тем, что когда материнская плата имеет встроенный контроллер VGA, дополнительное ПЗУ будет находиться в BIOS — BIOS знает, где оно находится, и копирует его в ОЗУ в фиксированное время. Другие ПЗУ могут располагаться от сегментов C8000hвплоть до F4000hв ранних ПК. [1] Конечный адрес поиска был ограничен сегментом DFFFFh[2] или EFFFFh[3] в современных продуктах. Спецификация загрузки BIOS требует, чтобы дополнительные ПЗУ были выровнены по границам 2 КБ (например, сегменты C8000h, C8800h, C9000h, C9800hи т. д.). Первые два байта ПЗУ должны быть 55 AA. [4] Третий байт указывает размер ПЗУ в блоках по 512 байт (например, 20hдля ПЗУ объемом 16 КБ). И четвертый байт — это то, где BIOS начинает выполнение дополнительного ПЗУ, чтобы инициализировать его перед загрузкой системы. Часто эта инициализация выполняется 3-байтовой инструкцией перехода, начинающейся с шестнадцатеричного значения E9. [5]

Первоначальное использование дополнительных ПЗУ для загрузки через карты расширения

До разработки и повсеместного принятия стандарта Plug and Play BIOS, дополнительное устройство, такое как контроллер жесткого диска или сетевая карта адаптера (NIC), как правило, должно было включать дополнительное ПЗУ для загрузки, поскольку BIOS материнской платы не включал никакой поддержки для устройства и, таким образом, не мог включить его в протокол загрузки BIOS. Такое дополнительное ПЗУ перехватывало INT 19h, прерывание загрузки BIOS, чтобы вытеснить загрузчик BIOS и заменить свой собственный загрузчик. Загрузчик на дополнительном ПЗУ пытался загрузиться с диска, сети или другого источника загрузочной программы, подключенного к карте адаптера или установленного на ней; если эта попытка загрузки не увенчалась успехом, он передавал управление предыдущему загрузчику (на который указывал INT 19h до того, как его перехватило дополнительное ПЗУ), что позволяло системе загрузиться с другого устройства в качестве запасного варианта. Некоторые карты адаптеров, такие как определенные адаптеры SCSI (например, некоторые производства Adaptec), были доступны в версиях, которые отличались только наличием или отсутствием дополнительного ПЗУ для включения загрузки с подключенных устройств SCSI. В результате протокола сканирования дополнительного ПЗУ, дополнительное ПЗУ с наивысшим адресом инициализируется последним и, следовательно, последним перехватывает любые прерывания и первым в этих цепочках процедур обработки прерываний (ISR); таким образом, адреса дополнительных ПЗУ полностью определяют приоритет загрузки между картами адаптеров, которые включены для загрузки, а загрузочные устройства, поддерживаемые BIOS материнской платы, в совокупности имеют самый низкий приоритет, то есть система попытается загрузиться с них только после попытки загрузиться со всех карт адаптеров, включенных для загрузки.

Спецификация загрузки BIOS

Спецификация загрузки BIOS (BBS) была разработана консорциумом, включающим Compaq , Intel и Phoenix Technologies, для стандартизации последовательности инициализации Plug and Play (PnP) BIOS и дополнительных ПЗУ. [3] Стандарт представляет понятие таблицы векторов загрузочных подключений (BCV) и приоритета BCV. [3] Основные принципы стандарта делают поведение более определенным и отлаживаемым и дают производителям BIOS возможность для дальнейшей динамизации выбора загрузочного устройства для пользователя, помимо предложений стандарта. Начало заголовка расширения PnP отмечено 4-байтовой сигнатурой ASCII ,$PnP а указатель на нее хранится по смещению +1Ah как 2-байтовое значение с прямым порядком байтов. [6]

После завершения основных проверок 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, так как это устаревшая карта.

В начальной процедуре инициализации, поскольку Option ROM указывает на структуру данных PCI (не то же самое, что и пространство конфигурации), код option ROM знает, что устройство и идентификатор поставщика находятся на фиксированном смещении от RIP . Начало этой структуры отмечено 4-байтовой сигнатурой ASCII ,PCIR а указатель на нее хранится по смещению +18h как 2-байтовое значение с прямым порядком байтов. [6] Это позволяет ему сканировать пространство конфигурации 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 для регистрации диска 00h), запись, содержащую обработчик загрузки, который будет считывать MBR 80h (жесткий диск BAID; первое устройство в таблице BCV для регистрации диска 80h) или одну из записей BEV в таблице. Устройство имеет BEV или BCV только в том случае, если оно является загрузочным устройством.

SCSI

Плата контроллера SCSI может перехватывать INT 13h , который отвечает за предоставление дисковых служб. Она сделает это в своем 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 на входе 13h. Первый контроллер, перехватывающий INT 13h, увидит, что установлено 0 дисков, проверив байт в 0040:0075, который находится в области данных BIOS (BDA), и если у него есть 4 диска для перечисления, он назначит диапазон номеров дисков 80h–83h и сохранит «4» в BDA. Если у второго контроллера, перехватывающего INT 13h, есть 2 диска, он прочитает «4» из BDA, назначит номера дисков 84h и 85h и сохранит «6» вместо «4». Теперь, если INT 13h вызывается с DL = 83h, то обработчик второго контроллера, который не назначил номер диска 83h, передаст вызов предыдущему обработчику; тот обработчик, который назначил номер диска 83h, сам обработает вызов. При любом количестве ISR контроллеров, подключенных к INT 13h, каждый ISR будет передавать управление следующему, пока тот, который назначил указанный номер диска, не распознает номер, не обработает вызов и не вернется из прерывания.

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

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

Видео

Video BIOS предоставляет некоторые базовые службы отображения для BIOS и операционных систем , например INT 10H (Legacy BIOS), VBE (Legacy BIOS) и UEFI GOP . Оригинальный IBM PC BIOS включал интегрированную поддержку видеоадаптеров IBM CGA и MDA (и вообще не поддерживал дополнительные ПЗУ), поэтому эти видеокарты не имели дополнительных ПЗУ. Поддержка CGA и MDA в BIOS поддерживалась в линейках продуктов IBM PC XT и PC AT (которые поддерживали дополнительные ПЗУ), поэтому эти карты работали (с полной поддержкой BIOS) на этих машинах. Первой видеокартой для ПК с дополнительным ПЗУ была IBM EGA, представленная в 1984 году с IBM PC AT. (Графическая карта Hercules не имела дополнительных ПЗУ и поддержки BIOS, за исключением функций, совместимых с MDA, для которых она полагалась на поддержку MDA, поставляемую IBM в основном BIOS.) Большинство последующих видеоадаптеров для ПК поддерживались дополнительными ПЗУ, хотя VGA и MCGA, интегрированные в материнские платы PS/2, могли использовать встроенную поддержку BIOS. После того, как интегрированные Super VGA (SVGA), интегрированные в клонированные материнские платы для ПК, стали поставляться отдельными компаниями, а не самими системами, стало обычным включать видео BIOS, предоставляемый поставщиком SVGA, в качестве отдельного модуля дополнительного ПЗУ на том же чипе BIOS, что и основной системный BIOS (поставляемый третьей отдельной компанией).

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

UEFI Option ROM используют Unified Extensible Firmware Interface (UEFI). Несколько образов Option ROM на одном устройстве могут включать как Legacy x86, так и UEFI Option ROM. Эта двойная совместимость в устройствах может работать как в устаревших BIOS, так и в современных средах UEFI. Когда формат Option ROM установлен на «UEFI Compatible» в настройках UEFI, этап Driver Execution Environment (DXE) будет отдавать приоритет загрузке UEFI Option ROM, если он присутствует. Если UEFI Option ROM недоступен, система вернется к устаревшему Option ROM. Системы UEFI могут использовать устаревшие Option ROM через модуль поддержки совместимости (CSM). Когда включена безопасная загрузка, выполнение CSM и устаревших Option ROM запрещено, поскольку устаревшие драйверы прошивки не поддерживают аутентификацию, что создает потенциальную уязвимость безопасности. [7] [8]

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

Ссылки

  1. ^ Технический справочник IBM PC XT, стр. 2-10
  2. ^ Техническое руководство по интерфейсу Personal System/2 и BIOS персонального компьютера, стр. 4-12
  3. ^ Спецификация загрузки abc BIOS (PDF) (Версия 1.01 ред.). Compaq, Phoenix, & Intel. 11 января 1996 г.
  4. ^ Среда исполнения Etherboot
  5. Салихун, Дармаван (9 января 2007 г.). Разборка BIOS: раскрытие ниндзюцу (PDF) .
  6. ^ ab "BIOS". 2022-04-06 . Получено 2022-04-08 .
  7. ^ «Руководство по выбору ПЗУ для проверки UEFI». 14 сентября 2022 г.
  8. ^ "Microsoft docs". 14 сентября 2022 г.