3Rd party option rom management что это

3Rd party option rom management что это

Option ROM — то, что прошивается в BIOS плат расширений (типа PCI, PCI-E, сетевой карты).
В новой терминологии Legacy Option ROM — это код расширения, работающий без EFI, и соответственно
UEFI PCI Extension ROM Option — та же фигня, только написанная под EFI.

Старый (Legacy) код расширения исполнялся в реальном режиме, точнее (скорее всего) в эмуляции 16-битного из 32-битного.

Собранный hello.efi запускается в Shell’е. Только как-то смешно у меня получилось. Есть плата с процом Intel Atom и поддержкой em64T. Компилятор и линкер использовал из Visual Studio из папки AMD, заголовки для EFI указывал em64T. EDK II скачан с Intel’а. Только тогда это сработало. Обычный компилятор, из директорий IA32, IA64, x86_IA32, x86_IA64 — пишет при запуске, что shell не поддерживает данную архитектуру.

Кстати, в статьях указаны инструменты из предыдущих EDK. В новом EDK есть утилита GenFw, которая поддерживает больше конечных форм файла .efi.
Есть EfiRom, которой на фход подаёшь файл .efi, а она делает образ для ROM.
Но обычный Hello Word там почему-то не работает. Как понять, передаётся ли туда вообще код — не понятно. Какой образ туда запихивать — тоже. Application или BootService.
В общем, не понятно как вызывается этот код из ROM’a. И есть ли в BIOS реализация этого вызова.

Покопался тут ещё.
Образ туда запихивается (см. 13.4.2.1 UEFI Spec 2_3_1) BootService Или Runtime Service. Приложения не выполняются, хотя запихнуть их туда можно и можно даже как-то вызвать, но другими методами. Вывод на экран, возможно, не действует (но это по спецификации 1.10). Работа с клавой тоже.

Остаётся непонятным, как должен быть устроен код. Чтобы его откомпилить и хоть что-то получить.

Замена Legacy BIOS на рас­ши­ря­е­мый ин­тер­фейс фир­мен­но­го про­грам­мно­го обес­пе­че­ния, бо­ль­ше из­вест­ный как UEFI, про­и­зо­шла быст­ро и без­бо­лез­нен­но. В этом нет ни­че­го уди­ви­те­ль­но­го – не­сколь­ко се­кунд стар­та ком­пью­те­ра или но­ут­бу­ка – кап­ля в мо­ре вре­ме­ни, ко­то­рое поль­зо­ва­те­ли тра­тят на ра­бо­ту с при­ло­же­ни­я­ми в опе­ра­ци­он­ных сис­те­мах. О стар­те бу­дут го­во­рить толь­ко в том слу­чае, ес­ли он не со­сто­ял­ся. Да­вай­те рас­смот­рим тех­но­ло­гии, ко­то­рые сто­ят на стра­же спо­кой­ст­вия поль­зо­ва­те­лей: что обес­пе­чи­ва­ет со­вмес­ти­мость UEFI в ус­ло­виях за­ме­ны ус­та­рев­ших кон­цеп­ций бо­лее но­вы­ми?

Технология совместимости

С появлением UEFI программный код Option ROM (или другими словами BIOS периферийных устройств) становится таким же артефактом, как и Legacy BIOS. Так, на смену VGA BIOS приходит Graphics Output Protocol (GOP), а встроенный BIOS других контроллеров заменяется аналогичными решениями из мира UEFI. Но, в отличие от системного BIOS, низ­ко­у­ров­не­вое программное обеспечение периферии не подвластно производителям вычислительных платформ. Это значит, что необходимо обеспечить совместимость UEFI-систем с устаревшим оборудованием.

На решение этой задачи нацелена технология Compatibility Support Module (CSM). Компатибильность здесь ключевое понятие. Как IT-индустрия приходила к пониманию этого процесса? Рассмотрим состав Aptio Setup Utility трехлетней давности. Версия v2.00 еще не отражает в полной мере все подробности совместимости, где за строкой меню EFI Op­ti­miz­ed Boot скрывается работа именно CSM-модулей.


Рис 1. Скриншот меню Aptio Setup Utility v2.00.1201 на системной плате Intel S1200BT

Обратите внимание, что параметр Use Legacy Video for EFI OS недоступен для редактирования, в отличие от соседних пунктов меню Boot Option Retry и USB Boot Priority. В отсутствие GOP-совместимых видеоадаптеров на серверной плат­фор­ме Intel S1200BT по умолчанию используется VGA BIOS, обслуживающий бортовое видео на дискретном чипе. Хотя такое аппаратное решение и не препятствует использованию программного кода, написанного по правилам Gra­phics Output протокола.

Запуск оболочки UEFI Shell в перечне доступных опций выглядит тенденцией, на годы опередившей время. К со­жа­ле­нию, по неизвестным до сих пор причинам именно эта функциональность остается невостребованной про­из­во­ди­те­ля­ми ком­пью­тер­ной техники.

Читайте также:  Ob3368ap уменьшить ток подсветки


Рис 2. Скриншот меню Aptio Setup Utility v2.00.1201 на системной плате ASUS Z87-K

Новая версия Aptio v2.10, установленная на системной плате ASUS Z87-K, дает более полное представление о фун­к­ци­о­наль­нос­ти Compatibility Support Module. Активация опции меню Launch CSM приводит к появлению четырех до­пол­ни­тель­ных параметров, каждый из которых балансирует между новаторством UEFI и сов­ме­сти­мостью с Option ROM.


Рис 3. Выбор устройств для запуска операционной системы:­UEFI-совместимая загрузки или использование Option ROM

Последний писк

Наиболее полный подход к управлению совместимостью демонстрирует American Megatrends, разработчик низко­уров­не­во­го программного обеспечения, в Aptio v2.15 (датирование прошлым годом добавляет драйва :). Эта версия Setup Utility была обнаружена на серверной плате Tyan S7052 (снимок анбоксинга в заголовке статьи).


Рис 4. Boot-меню в Aptio Setup Utility на серверной платформе S7052GM3NR

Логика управления периферийными устройствами отражает все аспекты использования CSM-технологии: для видео адаптеров выделено отдельное меню, сетевые Boot ROM и OpROM систем хранения данных — на своих местах. Все прочие PCI-устройства вынесены в отдельное меню, а фильтр загрузочных опций, регулирующий порядок старта опе­ра­ци­он­ных систем, располагается на самом видном месте.

Даже после замены старого доброго BIOS новомодным интерфейсом UEFI старт операционной системы по-прежнему со­про­вож­да­ет­ся звуковым сигналом. Таким себе последним писком низкоуровневого ПО. Что ж, традиция есть тра­ди­ция.

An Option ROM is a piece of firmware that resides in BIOS or on an expansion card, which gets shadowed into memory and executed to initialise the device and register it with the BIOS. It is essentially a driver that interfaces between BIOS services and hardware.

Contents

BIOS Boot Specification [ edit ]

The BIOS Boot Specification (BBS) was developed by a consortium comprising Compaq, Intel and Phoenix Technologies to standardise the initialisation sequence of PnP BIOS option ROMs and legacy option ROMs not conforming to the PnP BIOS standard and the order in which they hook interrupts. The standard presents the notion of a BCV table and BCV priority. The core principles of the standard make behaviour more defined and debuggable and gives BIOS manufacturers room to further dynamise boot device selection for the user on top of suggestions of the standard.

A common option ROM is the video BIOS which gets loaded very early on in the boot process and hooks INT 10h so that output from the power-on self-test (POST) can be displayed. The video BIOS is almost always located in the C000 memory segment, the start of the memory area reserved for option ROMs; this is because when the motherboard has a built in VGA controller, the option ROM will reside in the BIOS – the BIOS knows where it is and shadows it into memory at a fixed time. Other ROMs can be located from segments C800 all the way up to F400 in early PCs. [1] The final search address was eventually limited to E000 [2] in later products. The BIOS Boot Specification requires that option ROMs be aligned to 2kB boundaries (e.g. segments C800, C880, C900, C980 , etc.). The first two bytes of the ROM must be 55 AA . [3]

After the basic POST checks are complete, the BBS specifies that the BIOS will detect and shadow all option ROMs that reside in the BIOS into the aforementioned region and it will traverse the PCI configuration space, filling in XROMBARs and copying the expansion card option ROMs from MMIO space to the region. The BIOS then scans the region, and if the option ROM has a PnP Expansion header, it does a far call to offset +03h in the option ROM header to initialise it. It then rescans the region after all the PnP option ROMs have been initialised (because, as appendix E states, the option ROM initialisation routine may have chained more PnP expansion headers for individual disks the device owns). It adds the BCV pointer (if present) in the PnP Expansion headers it finds the BCV Table or the BEV pointer (if present) to the IPL priority table. The BCV entries in the BCV table are then called according to priority togglable in NVRAM. The BCV table is full of BCV function pointers but has a fixed entry representing legacy option ROMs which is a pointer to a BIOS routine which calls +03h in all the remaining option ROMs that don’t have a PnP Expansion header. The BCV function initialises the INT 13h and INT 19h hooks, which the BBS stipulates must not be done in the initialisation routine at +03h. If a device has no PnP Expansion header, it may perform any hook in the routine at +03h, as it is a legacy card.

Читайте также:  Где находится спикер на материнской плате

In the initial initialisation routine, as the Option ROM points to a PCI data structure (not the same as the configuration space), the option ROM code knows the device and vendor ID is at a fixed offset from RIP. This allows it to scan the PCI configuration space to find the correct device and BARs it needs to use. To prevent this scan, and in case of two identical cards in the system, the BIOS passes the PFA (bus/device/function) to the initialisation routine in AX, and the card select number (CSN) for ISA option ROMs is passed in BX. It can then interact with the device using PMIO / MMIO to see how many disks it has and which ones are bootable by reading the MBR. The BIOS will have already combed the configuration space, allocated the BARs and filled in the ACPI table prior to the initialisation routine call, so the option ROM would use the addresses allocated to its BARs. The BCV, however, hooks interrupt routines which interact with the device which are adjusted based on a base MMIO address location, disk information ascertained in the option ROM initialisation routine and the current disk number in the BDA.

The BIOS INT 19h procedure then uses the IPL table priority in NVRAM to decide whether to call an entry containing a boot handler which will read the MBR of 00h (floppy disk BAID; the first device in the BCV table to register disk 00h), an entry containing a boot handler which will read the MBR of 80h (the hard drive BAID; the first device in the BCV Table to register disk 80h) or one of the BEV entries in the table. A device only has a BEV or a BCV if it is a bootable device.

SCSI [ edit ]

An ISA SCSI controller card may hook INT 13 which is responsible for providing disk services. It will do so in its BCV if it is a PnP ISA card. Once it has done this, any subsequent calls to INT 13h will be "caught" by the SCSI option ROM (or "SCSI BIOS"), allowing it to respond for disks that may exist on the SCSI bus. Before it had hooked the interrupt there may have been no disks on the system, but by intercepting the interrupt and altering the values returned, the SCSI BIOS can make all the disks on the SCSI bus visible to the system.

Читайте также:  Как установить телескопические направляющие в духовке

In this particular case, the BIOS itself may call INT 13h to provide a list of possible boot devices to the user, and because the SCSI BIOS has hooked the interrupt the user will be able to choose not only which standard system devices to boot from, but also which SCSI disks as well. This is because, as suggested in Appendix D of the Boot BIOS Specification, the BIOS could populate the IPL table with device and vendor information from INT 13h calls to the different disks, paired with the Hard Disk Number (80h, 81h . ), to allow any Hard Disk Device to be booted from, rather than just the first disk of the first controller to hook INT 13h be bootable (the highest priority item in the BCV table), referred to as a BIOS Aware IPL Device (BAID) in the specification.

Multiple controllers can hook INT 13h at once. For instance, after the SCSI controller, an AHCI controller can also hook INT 13h by putting a call to the previous handler, which was stored in the IDT at entry 13h by the SCSI controller, at the end of its own handler, which it then puts in the IDT at entry 13h. If INT 13h is called with DL = 83h, then the controller that assigned a disk range containing 83h will respond, otherwise it will skip and call the previous handler. The first controller to hook INT 13h will see that 0 disks have been installed by checking the byte at 0040:0075 , which resides in the BIOS Data Area (BDA), and if it has 4 disks to enumerate, it will assign the range 80h–83h and store ‘4’ in the BDA.

Network boot ROM [ edit ]

Another common option ROM is a network boot ROM. The option ROM contains the program required to download the boot code. The original IBM Personal Computer ROMs hooked INT 18H (originally to invoke Cassette BASIC) and INT 19H, as these two interrupts were designated when the boot process is about to begin. INT 19H is called to initiate the boot process, while INT 18H is called when the system tries to boot from all possible devices and none were bootable. Originally, by hooking INT 18H, the system would invoke Cassette BASIC (if present) or try to boot from the network when all other boot devices (floppy drives, hard drives, etc.) had failed. By hooking INT 19H, the system would attempt to boot from the network before any other devices. The BBS specifies that the NIC option ROM does not hook 19h, instead the BIOS 19h handler should call the BEV, which will then download the boot code.

UEFI Option ROMs [ edit ]

The PCI spec allows multiple option ROM images on the same device. These option ROMs could be Legacy x86 & UEFI. If the Option ROM format is set to UEFI Compatible in the UEFI BIOS, the DXE stage will load the newer EFI ROM if one is present (which is written in EFI byte code) and the legacy ROM if one is not. UEFI BIOS can use legacy option ROMs when a Compatibility Support Module (CSM) is enabled. Note that when Secure Boot is enabled, execution of the Compatibility Support Module and legacy ROMs is prohibited because legacy firmware drivers do not support authentication, which is a security threat. [4]

Ссылка на основную публикацию
Adblock detector