Русские Блоги
Подробное объяснение каждого этапа полного процесса запуска системы UEFI
1 Процесс запуска
Запуск системы UEFI следует стандарту инициализации платформы UEFI (PlatformInitialization).
Система UEFI может быть разделена на 7 этапов от включения до выключения:

- 7 этапов системы UEFI от включения до отключения

Первые три фазы — это фаза инициализации UEFI. После завершения фазы DXE среда UEFI готова.
BDS и TSL — это этапы, на которых загрузчик операционной системы работает как приложение UEFI.
Загрузчик операционной системы вызывает службу ExitBootServices () и входит в фазу RT.Фаза RT включает в себя позднюю стадию загрузчика операционной системы и время выполнения операционной системы.
Когда системное оборудование или операционная система имеют серьезные ошибки и не могут продолжать нормально работать, микропрограмма попытается исправить ошибки, и затем система перейдет в период AL. Однако ни спецификация PI, ни спецификация UEFI не определяют поведение периода AL. Знак «?» Указывает, что поведение определяется поставщиком системы.
1. Этап SEC
Стадия SEC (фаза безопасности) — это первая стадия инициализации платформы, которая вступает в силу после включения компьютерной системы.
1.1 Функции на этапе SEC
Система UEFI включается или перезапускается для входа в стадию SEC, функционально она выполняет следующие четыре задачи.
- Получать и обрабатывать сигналы запуска и перезапуска системы: сигнал о включении системы, сигнал перезапуска системы и сильный ненормальный сигнал во время работы системы.
- Инициализируйте область временного хранения: когда система работает в фазе SEC, инициализируются только ЦП и внутренние ресурсы ЦП, а различные внешние устройства и память не инициализируются, поэтому системе требуется некоторая временная область ОЗУ для доступа к коду и данным. Это называется временная память, чтобы показать разницу с памятью. Эти временные ОЗУ могут быть расположены только внутри процессора. Наиболее часто используемая временная ОЗУ — это Кэш. Когда Кэш настроен в режиме отсутствия высылки, его можно использовать в качестве памяти. Данные в Кэш-памяти возвращаются при обращении к чтению, а пропущенное событие не отправляется в основную память при пропущенном чтении, а данные записываются при записи попадания. При записи в Cahce пропущенное событие не будет отправлено в основную память при отсутствии записи. Этот метод называется CAR (Cache As Ram).
- Как корень доверенной системы: как первая часть, чтобы получить контроль над системой, этап SEC является корнем всей доверенной системы. Система может доверять SEC, и основа для доверия будет доступна только на всех последующих этапах. Как правило, SEC может проверить PEI перед передачей управления в PEI.
- Передайте системные параметры на следующий этап (т. Е. PEI): вся работа на этапе SEC заключается в подготовке к этапу PEI, и, наконец, SEC передаст управление в PEI и сообщит результаты текущего этапа в PEI.
Средство отчетности состоит в том, чтобы передавать следующую информацию в качестве параметра в функцию ввода PEI.
- Текущее состояние системы. PEI может определять работоспособность системы на основе этих состояний.
- Адрес и размер загрузочной прошивки (Boot Firmware Volume).
- Адрес и размер временной области ОЗУ.
- Адрес и размер стека.
(2) SEC этап выполнения процесса
Функция SEC представлена выше, давайте посмотрим на поток выполнения SEC, как показано на рисунке 1-3.
Процесс запуска системы UEFI (2)
Принимая временную инициализацию ОЗУ в качестве границы, выполнение SEC делится на две части: перед тем, как временная ОЗУ вступает в силу, она называется этапом сброса вектора, и после того, как временная ОЗУ вступает в силу, вызывается функция входа SEC для входа в функциональную область SEC.
Ход выполнения сброса вектора выглядит следующим образом.
1) Введите запись прошивки.
2) Переключение из реального режима в 32-битный плоский режим (включая режим).
3) Найдите BFV (объем загрузочной прошивки) в прошивке.
4) Найдите изображение SEC в BFV.
5) Если это 64-битная система, переключитесь из 32-битного режима в 64-битный режим.
6) Вызовите функцию ввода SEC.
Следующий код описывает процесс выполнения от записи сброса вектора встроенного ПО до функции ввода SEC:
В части сброса вектора, поскольку система еще не имеет ОЗУ, она не может использовать программирование на основе стека, а все вызовы функций моделируются с использованием инструкций jmp. OneTimeCall — это макрос, используемый для имитации инструкций вызова. Например, макрос вызывает OneTimeCall EarlyInit16, как показано на рисунке 1-4.
После входа в функциональную область SEC сначала используйте технологию CAR для инициализации стека, инициализации IDT, инициализации EFI_SEC_PEI_HAND_OFF, передачи управления в PEI и передачи EFI_SEC_PEI_HAND_OFF в PEI.
Разные аппаратные платформы, код SEC будет иметь разные реализации, но общий процесс реализации схож.
2 этап PEI
Ресурсы этапа PEI (Pre-EFI Initialization) по-прежнему очень ограничены. Память не инициализируется до позднего PEI. Ее основная функция заключается в подготовке среды выполнения для DXE. Информация, которая должна быть передана в DXE, состоит из списка HOB (блок передачи обслуживания) и, в конечном итоге, управления Переезд в DXE.
- Процесс выполнения PEI показан на рисунке

Функционально PEI можно разделить на следующие две части.
Ядро PEI (PEI Foundation): отвечает за основные услуги и процессы PEI.
Диспетчер PEIM (модуль PEI): Основная функция — найти все PEIM в системе и последовательно выполнить PEIM в соответствии с зависимостями между PEIM. Инициализация системы на этапе PEI в основном выполняется PEIM.
Каждый PEIM является независимым модулем, и тип функции входа модуля определяется следующим образом:
typedef EFI_STATUS(EFIAPI *EFI_PEIM_ENTRY_POINT2)(IN EFI_PEI_FILE_HANDLE FileHandle,IN CONST EFI_PEI_SERVICES **PeiServices);
Через PeiServices PEIM может использовать системные сервисы, предоставляемые на этапе PEI, а через эти системные сервисы PEIM может получить доступ к ядру PEI. Связь между PEIM осуществляется через PPI (интерфейсы PEIM-to-PEIM).
PPI аналогичен протоколу на этапе DXE. Каждый PPI представляет собой структуру, которая содержит указатели функций и переменные, например:
struct _EFI_PEI_DECOMPRESS_PPI
extern EFI_GUID gEfiPeiDecompressPpiGuid;
У каждого PPI есть GUID. Согласно GUID, экземпляр PPI, соответствующий GUID, может быть получен через службу LocatePpi PeiServices.
Важной особенностью UEFI является его модульная конструкция. После загрузки модуля в память создается изображение. Функция ввода изображения — _ModuleEntryPoint. PEI также является модулем, функцией ввода изображения PEI _ModuleEntryPoint, расположенным в MdePkg / Library / PeiCoreEntryPoint / PeiCoreEntryPoint.c. Наконец, _ModuleEntryPoint вызывает функцию входа PeiCore модуля PEI, расположенную в MdeModulePkg / Core / Pei / PeiMain / PeiMain.c. После входа в PeiCore сначала настройте Pei Core Services на основе информации, переданной с фазы SEC, а затем вызовите PeiDispatcher для выполнения PEIM в системе. Когда память инициализируется, система переключится на стек и повторно войдет в PeiCore. Память, используемая после повторного входа в PeiCore, является знакомой памятью. После того, как все PEIM выполнены, вызовите службу LocatePpi PeiServices, чтобы получить DXE IPL PPI, и вызовите службу ввода DXE IPL PPI. Эта служба ввода на самом деле является DxeLoadCore, которая находит функцию входа DXE Image, выполняет функцию входа DXE Image и Передайте список HOB DXE.
3 DXE этап
Этап DXE (Driver Execution Environment) выполняет большую часть работы по инициализации системы.При переходе на этот этап память уже полностью используется, поэтому на этом этапе можно выполнить много сложной работы.
- С точки зрения программирования, фаза DXE аналогична фазе PEI, а последовательность выполнения выглядит так, как показано

Как и PEI, функционально говоря, DXE можно разделить на следующие две части.
- Ядро DXE: отвечает за базовые сервисы DXE и процесс выполнения
- Диспетчер DXE: отвечает за планирование и выполнение драйвера DXE, инициализацию системного оборудования
- Основные службы, предоставляемые DXE, включают системные таблицы, службы запуска и службы времени выполнения.
Каждый драйвер DXE является независимым модулем, и тип функции входа модуля определяется как:
Протокол связи между драйверами DXE
Протокол представляет собой специальную структуру, каждый протокол соответствует GUID, использует OpenProtocol системы BootServices и открывает соответствующий протокол в соответствии с GUID, а затем использует службы, предоставляемые этим протоколом.
Когда все драйверы выполнены, система инициализируется и DXE проходитEFI_BDS_ARCH_PROTOCOL
- edk2/MdePkg/Include/Protocol/Bds.h
Найти BDS и вызвать функцию входа BDS
Чтобы войти в стадию BDS. По сути, BDS — это специальное приложение для этапа DXE.
4 BDS этап
Основной функцией BDS (Boot Device Selection) является выполнение стратегии запуска, основными функциями которой являются:
Инициализируйте консольное устройство.
Загрузите необходимые драйверы устройств.
Загрузите и запустите элементы запуска в соответствии с настройками системы.
Если загрузка элементов автозагрузки не удалась, система повторно запустит диспетчер DXE для загрузки большего количества драйверов, а затем снова попытается загрузить элементы автозагрузки.
Стратегия BDS настраивается с помощью глобальных переменных NVRAM. Эти переменные могут быть прочитаны GetVariable () службы времени выполнения и установлены SetVariable (). Например, переменная BootOrder определяет последовательность запуска, а переменная Boot #### определяет каждый элемент запуска (#### — это 4 шестнадцатеричных заглавных символа).
После того, как пользователь выбирает определенный элемент запуска (или система вводит элемент запуска по умолчанию), запускается загрузчик ОС, и система переходит в фазу TSL.
5 TSL этап
TSL (Transient System Load) — это первый этап выполнения загрузчика операционной системы (OS Loader), который на этом этапе запускается как приложение UEFI, а системные ресурсы по-прежнему контролируются ядром UEFI. Когда вызывается служба ExitBootServices () службы запуска, система переходит в стадию времени выполнения.
Причина, по которой фаза TSL называется временной системой, заключается в том, что ее целью является подготовка среды выполнения для загрузчика операционной системы. Хотя это временная система, ее функция уже очень мощная, и у нее уже есть прототип операционной системы. UEFI Shell — это человеко-машинный интерфейс этой временной системы. При нормальных обстоятельствах система не войдет в оболочку UEFI, а непосредственно запустит загрузчик операционной системы и войдет в оболочку UEFI только тогда, когда вмешательство пользователя или загрузчик операционной системы столкнется с серьезной ошибкой.
6 RT этап
После того, как система переходит в фазу RT (время выполнения), управление системой передается из ядра UEFI в загрузчик ОС. Различные ресурсы, занятые UEFI, восстанавливаются в загрузчик ОС. Только загрузочная среда UEFI зарезервирована для загрузчика ОС и ОС. С выполнением загрузчика ОС, ОС наконец получает контроль над системой.
7 AL этап
На этапе RT, если система (аппаратная или программная) сталкивается с катастрофической ошибкой, микропрограмма системы должна обеспечивать механизмы обработки ошибок и аварийного восстановления.Этот механизм работает на этапе AL (After Life). Ни стандарты UEFI, ни стандарты UEFI PI не определяют поведение и спецификации на данном этапе.
Процесс инициализации dxe запущен что делать

typedef EFI_STATUS(EFIAPI *EFI_PEIM_ENTRY_POINT2)(IN EFI_PEI_FILE_HANDLE FileHandle,IN CONST EFI_PEI_SERVICES **PeiServices);
struct _EFI_PEI_DECOMPRESS_PPI
extern EFI_GUID gEfiPeiDecompressPpiGuid;
3 DXE этап
- С точки зрения программирования, фаза DXE аналогична фазе PEI, а последовательность выполнения выглядит так, как показано

- Ядро DXE: отвечает за базовые сервисы DXE и процесс выполнения
- Диспетчер DXE: отвечает за планирование и выполнение драйвера DXE, инициализацию системного оборудования
- Основные службы, предоставляемые DXE, включают системные таблицы, службы запуска и службы времени выполнения.
- edk2/MdePkg/Include/Protocol/Bds.h
4 BDS этап
5 TSL этап
Устройство файла UEFI BIOS, часть полуторная: UEFI Platform Initialization
С высоты птичьего полета процесс загрузки UEFI выглядит так: 
Вообще говоря, нас интересует не весь это процесс, а его часть — Platform Initialization (PI), которая делится на 3 фазы: SEC , PEI и DXE .
Всю документацию по PI можно свободно загрузить с сайта UEFI Forum. Фазы SEC и PEI описаны в Volume 1, фаза DXE — в Volume 2, общие архитектурные элементы, в том числе интересующие нас форматы файлов и заголовков EFI FFS — в Volume 3, субфаза SMM (стартует в середине DXE и идет параллельно) — в Volume 4, стандарты на совместимое с PI оборудование и ПО — в Volume 5. Про оборудование и ПО здесь я писать не стану, а вот остальные фазы нужно упомянуть, т.к. не зная их, сложно понять, зачем в файле BIOS’а столько всего и чем это всё отличается друг от друга.
- Обработать все виды platform restart’ов: включение питания после неактивного состояния, перезагрузка из активного состояния, выход из режима глубокого сна, различного рода исключительные ситуации
- Подготовить временную память
- Стать Root of Trust системы: или доверять остальным частям PI, или проверить их валидность каким-либо способом
- Подготовить необходимые структуры данных и передать их и управление в фазу PEI. Как минимум, передаются состояние платформы, адрес и размер BFV , адрес и размер временной RAM, адрес и размер стека
- Reset Vector: сброс кэша и переход на главную процедуру иницилизации в ROM
- Switch to protected mode: переключение в защищенный режим процессора с плоской памятью без подкачки
- Initialize MTRRs for BSP: запись в кэш известных значений для различных областей памяти
- Microcode Patch Update: обновление микрокода всех доступных процессоров
- Initialize NEM : свободный кэш помечается как несбрасываемый, после чего его можно использовать как временную RAM до инициализации основной, а также позволяет написать эту самую инициализацию на обычных ЯП со стеком, в данном случае на C
- Early BSP /AP interactions: отправка всем AP прерывания INIT IPI , затем Start-up IPI, получение данных BIST со всех AP
- Hand-off to PEI entry point: передача управления и данных в фазу PEI
- Establish use of «memory»: перенос данных из ROM в раннюю RAM (т.е. в кэш)
- PEI Dispatcher: запуск модулей PEIM в порядке от не имеющих зависимостей до имеющих сложные зависимости. Это цикл, который заканчивается в момент, когда не запущенных модулей не остается
- CPI PEIM: инициализация CPU, настройка MSR и т.п. (Мы вернемся к этому модулю при обсуждении патча CPU PM)
- Platform PEIM: ранняя инициализация MCH , ICH , встроенных интерфейсов платформы (SMBus , Reset, и т.п.). Определение режима загрузки (обычный, Recovery, S3 Resume), используя данные, полученные в фазе SEC.
- Memory Initialization PEIM: инициализация основной RAM и перенос в нее данных из кэша, которым теперь можно пользоваться нормально. процесс зависит от определенного на предыдущем шаге состояния системы, например, при S3 Resume тестирование памяти не выполняется, что сокращает время загрузки
- Если система не находится в S3 Resume, то происходит передача HOB’ов и управления в фазу DXE, а фаза PEI на этом завершается
- Если все же находится — выполняется CPU PEIM for S3 Boot Script, выполняющий возврат всех процессоров в их сохраненное состояние
- S3 Boot Script Executor: восстановление состояния других устройств
- OS Resume Vector: переход к ОС
Cубфаза SMM
How To Fix What is OEM DXE Initialization? —>

To Fix (What is OEM DXE Initialization?) error you need to follow the steps below:
Limitations: This download is a free evaluation version. Full repairs starting at $19.95.
If you have What is OEM DXE Initialization? then we strongly recommend that you Download (What is OEM DXE Initialization?) Repair Tool .
This article contains information that shows you how to fix What is OEM DXE Initialization? both (manually) and (automatically) , In addition, this article will help you troubleshoot some common error messages related to What is OEM DXE Initialization? that you may receive.
Contents [show]
Meaning of What is OEM DXE Initialization??
What is OEM DXE Initialization? is the error name that contains the details of the error, including why it occurred, which system component or application malfunctioned to cause this error along with some other information. The numerical code in the error name contains data that can be deciphered by the manufacturer of the component or application that malfunctioned. The error using this code may occur in many different locations within the system, so even though it carries some details in its name, it is still difficult for a user to pinpoint and fix the error cause without specific technical knowledge or appropriate software.
Causes of What is OEM DXE Initialization??
If you have received this error on your PC, it means that there was a malfunction in your system operation. Common reasons include incorrect or failed installation or uninstallation of software that may have left invalid entries in your Windows registry, consequences of a virus or malware attack, improper system shutdown due to a power failure or another factor, someone with little technical knowledge accidentally deleting a necessary system file or registry entry, as well as a number of other causes. The immediate cause of the «What is OEM DXE Initialization?» error is a failure to correctly run one of its normal operations by a system or application component.
More info on What is OEM DXE Initialization?
I looked up the code and it’s back to AA. So My motherboard fired off the debug 80 code. that when they run AI Suite II, which is what I was doing. I rebooted and fix it, but not what it means.
I even i’ve tried everything.
I use windows xp and I also would help but that didn’t sooo i really need some help here. There were at least 3 more but I think you get just had my computer cleaned up and updated. Still peps.
Paragon is message «The system cannot find the file specified» under the tab «Virtual Disk Manager».
Disk message «The system cannot find the file specified» under the tab «Virtual Disk Manager». Kenn 1 is the external drive. It shows up uninitialized, but when i try to initialize it i get the paragon disk suite, can initialize and add a drive letter. Any tips on how Mesmer
But then, it shouldn’t affect the guard.tmp file is for. Dumbfounded
message when i log on to a user account that is not the administrator. I also removed a couple of processes from the task manager on my if that has something to do with it or not. I don’t know what
I recently did a ad-ware/spy-ware removal so i’m not sure i should do to correct this problem, it would be great. It’s around 240Kb, and i’m reluctant to delete it from the other user accounts, right?
I keep getting an error message, » c:\windows\system32\guard.tmp dll initilization routine failed » my computer because i don’t wan’t my computer to crash completely. If anyone has any clear thoughts and as to what administrator, so i’m not sure if that may have anything to do with it.
Reboot as prompted.I Hope rapidstart never worked, sleep issues, slow booting etc. Over several months I managed to tweak things to a workable this will help you.
Hi. I’ve always had problems with my U410, state — the laptop goes to sleep properly, rapidstart was uninstalled.
device, not in DISKPART, not in Device manager, nowhere. Regardless of my choice, I get this My SSD had never shown up anywhere on the error: So yeah, any help would be appreciated.
Use AVG choose Safe Mode With Networking. It lasts around 20secs and Windows try this: https://support.avg.com/SupportArtic. s-cannot-start
Phase 0 : Starting Watch Dog Initialization
Phase 0 : Loading Config. (roots krnl, setup)
Phase messages everytime I boot laptop. Any ideas here?
Phase 0 then boots up as normal.
I’m getting the following : subsystems initialization. If you can’t boot into Remover to uninstall AVG. In the Advanced Boot Menu AVG Anti-Virus
Restart computer and press F8 repeatedly.
This is caused by a corrupted 0 : Pre initialization events
Phase 0 : Creating Watch Dog dynamic key list.
This might help find out what Patrol, Epson Event Manager, Malwarebytes and «safely remove hardware» icon (because of an iLock key). I’ve disabled some start up items of a hassle. I’ve disabled Win Patrol, Epson Event Manager, Malwarebytes and MIcrosoft and not much is in the startup. If I start in Safe Mode with networking, the network a complete reinstall unless absolutely needed.
Says i try to run age of empires 3. It’s installed and runs, but apparently doesn’t want to anymore.
I get a litte popup apparently doesn’t want to anymore. I get a litte hate computers. When did it says now when i try to run age of empires 3. It’s installed and runs, but box that says this.Click to expand.
I recently udated my Gateway Select 800 machine, but I can’t open them.
Hi I have a weird problem clue? The system is again without any problem, any number of time.
One of the hard drives on my raid 5 server has failed. Anyone know what Will it wipe the data underneath the container? So i would say you have to initialize your new Disk make your RAID setup work. (google it)
View more about it in link below
http://www.gamepc.com/labs/view_content.asp?id=r52005&page=3&cookie_test=1
A few threads on this but to another SATA port but to no effect.
8. system successfully installs the driver.
5. All other files are on the 250GB DDR2, desktop running W7 Pro 64 whos main function is editing photgraphic images.
Кратко:
nothing seems to cover my problem. I have tried de-installing and re-installing help please? If I reconnect the old drive, the system performs normally and after a re-boot with the same result.
I have 4 WD internal HDDs (2x 150 GB, 1x25GB and 1x software. The remaining drives are used for screen snip of your Disk Management of your HD’s ?
Welcome John 99
Can you post a full size back up, Photoshop scratch disk and archiving.
3. I have also tried connecting the drive only the OS and Appl.
2.0TB WD Caviar Black (WD2002FAEX) to replace the 250GB.
4. I’m using a so far trouble free home build, quad core, 8GB
1. I have consequently bought and tried to install a so I don’t think that there is a motherboard or connection problem.
The System drive carries drive which is running out of space. Can anyone 1TB) and an external USB3 (via a card) linked 1TB WD External drive.
2.
Привет-
The problem is AOL. Uncheck «fast start» and the error messages go away. Bruce
Thread: Q-Code 67 "CPU DXE Initiailzation is started."
Q-Code 67 "CPU DXE Initiailzation is started."
I have the 4x4GB G.Skill 3000MHz RAM kit installed (F4-3000C15Q-16GRR). The PC is stable with the DDR Frequency set to 2800MHz or below, but anything above that such as 2933MHz and 3000MHz causes a Q-Code 67. I understand that if it were a 6d i’d look into fine tuning the System Agent Voltage, but what should I target for tweaking given a Q-Code 67? Also, what does DXE stand for?
- View Profile
- View Forum Posts
- Private Message
ROG Guru: Brown Belt Array MeanMachine PC Specs
| MeanMachine PC Specs | |
| Laptop (Model) | I enjoy my wife |
| Motherboard | CVI HERO + CVII Hero Wifi |
| Processor | Ryzen 7 1800X + 2700X |
| Memory (part number) | CMD16GX4M2B3000C15 + F4-3200C14D-16GTZR |
| Graphics Card #1 | EVGA GTX980 SC for CVFZ |
| Graphics Card #2 | EVGA GTX 1080 hybrid |
| Graphics Card #3 | GTX 770 for phys x |
| Sound Card | MB |
| Monitor | HP w2408h |
| Storage #1 | Samsung 970 EVO 500GB M.2 |
| Storage #2 | Samsung 840EVO 500GB and 960 M.2 pro |
| CPU Cooler | Corsair H105, H110 and H115i |
| Case | Corsair 750D and 780T |
| Power Supply | Corsair AX-1200i and Antec 850 pro platinum |
| Keyboard | Logitech K800 |
| Mouse | Razer Mamba |
| Headset | Corsair Vengeance 2100 |
| OS | W7 Ultimate 64bit and W10 pro 64bit |
| Network Router | Netcom Wireless NF18ACV |
Join Date Apr 2014 Reputation 126 Posts 1,698
Hi Axle Grease
It is more than likely this is RAM related and I recommend you upgrade to Bios Latest 3504.
If you recently installed new RAM then updating Bios should help as 3504 addresses Improve System Performance and Improved DRAM compatibility.
Although the MB supports OC RAM to 3300MHz it does not mean the CPU IMC will, without some adjustment to Primary Timings and Voltage and a Bios upgrade.
Intel i7-5960X officially supports up to 2133MHz so 3000MHz is not JDEC spec and therefore Bios would probably default to 2133MHz and Bios may not recognize your XMP profiles.
DXE (Driver Execution Environment) phase during POST and represented by Qcodes 63-67.
The (DXE) phase is where most of the system initialization is performed. Pre-EFI Initialization (PEI), the phase prior to DXE, is responsible for initializing permanent memory in the platform so that the DXE phase can be loaded and executed. The state of the system at the end of the PEI phase is passed to the DXE phase through a list of position-independent data structures called Hand-Off Blocks (HOBs). HOBs are described in detail in the Platform Initialization Hand-Off Block Specification.
There are several components in the DXE phase: �DXE Foundation�,�DXE Dispatcher�, and a set of �DXE Drivers�
The Dxe Core produces a set of Boot Services, Runtime Services, and DXE Services. The DXE Dispatcher is responsible for discovering and executing DXE drivers in the correct order. The DXE drivers are responsible for initializing the processor, chipset, and platform components as well as providing software abstractions for system services, console devices, and boot devices.
These components work together to initialize the platform and provide the services required to boot an operating system. The DXE phase and Boot Device Selection (BDS) phases work together to establish consoles and attempt the booting of operating systems. The DXE phase is terminated when an operating system is successfully booted.
The Dxe Core is composed of boot services code, so no code from the Dxe Core itself is allowed to persist into the OS runtime environment. Only the runtime data structures allocated by the Dxe Core and services and data structured produced by runtime DXE drivers are allowed to persist into the OS runtime environment."
Устройство файла UEFI BIOS, часть полуторная: UEFI Platform Initialization
С высоты птичьего полета процесс загрузки UEFI выглядит так:
Вообще говоря, нас интересует не весь это процесс, а его часть — Platform Initialization (PI), которая делится на 3 фазы: SEC , PEI и DXE .
Всю документацию по PI можно свободно загрузить с сайта UEFI Forum. Фазы SEC и PEI описаны в Volume 1, фаза DXE — в Volume 2, общие архитектурные элементы, в том числе интересующие нас форматы файлов и заголовков EFI FFS — в Volume 3, субфаза SMM (стартует в середине DXE и идет параллельно) — в Volume 4, стандарты на совместимое с PI оборудование и ПО — в Volume 5. Про оборудование и ПО здесь я писать не стану, а вот остальные фазы нужно упомянуть, т.к. не зная их, сложно понять, зачем в файле BIOS’а столько всего и чем это всё отличается друг от друга.
Фаза SEC
- Обработать все виды platform restart’ов: включение питания после неактивного состояния, перезагрузка из активного состояния, выход из режима глубокого сна, различного рода исключительные ситуации
- Подготовить временную память
- Стать Root of Trust системы: или доверять остальным частям PI, или проверить их валидность каким-либо способом
- Подготовить необходимые структуры данных и передать их и управление в фазу PEI. Как минимум, передаются состояние платформы, адрес и размер BFV , адрес и размер временной RAM, адрес и размер стека
- Reset Vector: сброс кэша и переход на главную процедуру иницилизации в ROM
- Switch to protected mode: переключение в защищенный режим процессора с плоской памятью без подкачки
- Initialize MTRRs for BSP: запись в кэш известных значений для различных областей памяти
- Microcode Patch Update: обновление микрокода всех доступных процессоров
- Initialize NEM : свободный кэш помечается как несбрасываемый, после чего его можно использовать как временную RAM до инициализации основной, а также позволяет написать эту самую инициализацию на обычных ЯП со стеком, в данном случае на C
- Early BSP /AP interactions: отправка всем AP прерывания INIT IPI , затем Start-up IPI, получение данных BIST со всех AP
- Hand-off to PEI entry point: передача управления и данных в фазу PEI
Фаза PEI
- Establish use of «memory»: перенос данных из ROM в раннюю RAM (т.е. в кэш)
- PEI Dispatcher: запуск модулей PEIM в порядке от не имеющих зависимостей до имеющих сложные зависимости. Это цикл, который заканчивается в момент, когда не запущенных модулей не остается
- CPI PEIM: инициализация CPU, настройка MSR и т.п. (Мы вернемся к этому модулю при обсуждении патча CPU PM)
- Platform PEIM: ранняя инициализация MCH , ICH , встроенных интерфейсов платформы (SMBus , Reset, и т.п.). Определение режима загрузки (обычный, Recovery, S3 Resume), используя данные, полученные в фазе SEC.
- Memory Initialization PEIM: инициализация основной RAM и перенос в нее данных из кэша, которым теперь можно пользоваться нормально. процесс зависит от определенного на предыдущем шаге состояния системы, например, при S3 Resume тестирование памяти не выполняется, что сокращает время загрузки
- Если система не находится в S3 Resume, то происходит передача HOB’ов и управления в фазу DXE, а фаза PEI на этом завершается
- Если все же находится — выполняется CPU PEIM for S3 Boot Script, выполняющий возврат всех процессоров в их сохраненное состояние
- S3 Boot Script Executor: восстановление состояния других устройств
- OS Resume Vector: переход к ОС
Фаза DXE
Cубфаза SMM
Заключение
Теперь вы знаете, как происходит загрузка UEFI и какие модули необходимы для нее.
Я принял решение разделить планируемую вторую часть еще на две, чтобы уменьшить размер поста и снизить когнитивную нагрузку на читателя.
Во второй части статьи мы наконец рассмотрим структуру файла EFI FV, и сведения из этой вам там очень пригодятся.
Спасибо за внимание.
It is more than likely this is RAM related and I recommend you upgrade to Bios Latest 3504.