前面的例子都是在 NT32 模拟环境中运行的,在启动这个环境的时候会有一个5秒的滚动条。为了更爽快一些,可以将这个滚动条设置为一闪而过,马上进入Shell环境。“以文找文”,搜索“Start showing progress bar”字样,确定下面的代码显示这个字符串:
\IntelFrameworkModulePkg\Universal\BdsDxe\FrontPage.c (Experiment)
/** Function show progress bar to wait for user input. @param TimeoutDefault - The fault time out value before the system continue to boot. @retval EFI_SUCCESS User pressed some key except "Enter" @retval EFI_TIME_OUT Timout expired or user press "Enter" **/ EFI_STATUS ShowProgress ( IN UINT16 TimeoutDefault ) { EFI_STATUS Status; CHAR16 *TmpStr; EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground; EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background; EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color; EFI_INPUT_KEY Key; UINT16 TimeoutRemain; if (TimeoutDefault == 0) { return EFI_TIMEOUT; } DEBUG ((EFI_D_INFO, "\n\nStart showing progress bar... Press any key to stop it! .\n")); SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff); SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0); SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff); // // Clear the progress status bar first // TmpStr = GetStringById (STRING_TOKEN (STR_START_BOOT_OPTION)); if (TmpStr != NULL) { PlatformBdsShowProgress (Foreground, Background, TmpStr, Color, 0, 0); }
追踪发现是下面的代码调用到上面的 \IntelFrameworkModulePkg\Universal\BdsDxe\FrontPage.c (Experiment)
/** This function is the main entry of the platform setup entry. The function will present the main menu of the system setup, this is the platform reference part and can be customize. @param TimeoutDefault The fault time out value before the system continue to boot. @param ConnectAllHappened The indicater to check if the connect all have already happened. **/ VOID PlatformBdsEnterFrontPage ( IN UINT16 TimeoutDefault, IN BOOLEAN ConnectAllHappened ) ………………………… ………………………… HotkeyBoot (); if (TimeoutDefault != 0xffff) { Status = ShowProgress (TimeoutDefault); StatusHotkey = HotkeyBoot ();
上面的代码又是下面调用到的
// // Init the time out value // Timeout = PcdGet16 (PcdPlatformBootTimeOut);
最后确定参数是来自 PCD ,修改 \Nt32Pkg\Nt32Pkg.dsc
[PcdsDynamicHii.common.DEFAULT]
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdSetupConOutColumn|L"SetupConsoleConfig"|gEfiGlobalVariableGuid|0x0|80
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdSetupConOutRow|L"SetupConsoleConfig"|gEfiGlobalVariableGuid|0x4|25
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|10
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1
将上面红色标记的修改为你希望的即可.
这里是一个修改为20秒的例子
强呀,人生又节约了好多秒的等待,红字的10,应该是等待1o秒吧,我把他设置成了1,也差不多秒进shell界面。