uefi bds boot flow
2017-01-14 15:06
1066 查看
BdsEntry.c 是BDS的入口函数所在的文件,其入口函数为BdsEntry。
在BdsEntry 中会调用
// Check if we have the boot next option
//
mBootNext = BdsLibGetVariableAndSize (
L"BootNext",
&gEfiGlobalVariableGuid,
&BootNextSize
);
得到当前boot menu中的选项,即决定从哪一项开始启动os,而这一项是由BootNext 来决定的.
之后调用
BdsBootDeviceSelect ()——>BdsLibBootViaBootOption
在BdsLibBootViaBootOption中会调用如下code来装载os Image.
// Report status code for OS Loader LoadImage.
//
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
Status = gBS->LoadImage (
TRUE,
gImageHandle,
DevicePath,
NULL,
0,
&ImageHandle
);
然后调用gBS->StartImage 来开始进入下下一阶段.
Status = gBS->StartImage (ImageHandle, ExitDataSize, ExitData);
在BdsEntry 中会调用
// Check if we have the boot next option
//
mBootNext = BdsLibGetVariableAndSize (
L"BootNext",
&gEfiGlobalVariableGuid,
&BootNextSize
);
得到当前boot menu中的选项,即决定从哪一项开始启动os,而这一项是由BootNext 来决定的.
之后调用
BdsBootDeviceSelect ()——>BdsLibBootViaBootOption
在BdsLibBootViaBootOption中会调用如下code来装载os Image.
// Report status code for OS Loader LoadImage.
//
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
Status = gBS->LoadImage (
TRUE,
gImageHandle,
DevicePath,
NULL,
0,
&ImageHandle
);
然后调用gBS->StartImage 来开始进入下下一阶段.
Status = gBS->StartImage (ImageHandle, ExitDataSize, ExitData);
相关文章推荐
- UEFI Boot Flow 系列之BDS
- UEFI Boot Flow系列之 概述
- UEFI Boot Flow 系列之 PEI Phase
- UEFI Boot Flow 系列之概述
- UEFI Boot Flow 系列之SEC
- UEFI Boot Flow 系列之PEI
- UEFI Boot Flow
- UEFI Boot Flow 系列之 PEI Phase
- UEFI Boot Flow
- UEFI Boot Flow 系列之 SEC Phase
- 计算机到底如何启动?(UEFI boot)
- Tensorflow + Ubuntu 16.04 + GTK780 + GIGABYTE-uefi DualBIOS 配置
- Linux boot flow
- 华硕主板禁用UEFI安全启动(Disable Secure Boot for ASUS Motherboard)
- 联想ThinkPad x230iBIOS中 UEFI/Legacy Boot选项是灰色解决办法
- UEFI secure boot
- u-boot分析 六 (从code flow看u-boot到kernel的启动过程)
- UEFI boot sequence
- UEFI boot: how does that actually work, then?
- uefi模式下修复windows启动分区:使用bcdboot.exe工具