我可以在UEFI環境中運行EFI應用程序build and manually execute。但是,我希望在啓動時自動執行我的應用程序。在啓動時自動運行EFI應用程序
有沒有辦法告訴引導加載程序來做到這一點,或者我需要將我的應用程序中的驅動程序自動執行?是否有可能在我失蹤的FDF,DEC,DSC或INF文件中輸入一些內容?
我可以在UEFI環境中運行EFI應用程序build and manually execute。但是,我希望在啓動時自動執行我的應用程序。在啓動時自動運行EFI應用程序
有沒有辦法告訴引導加載程序來做到這一點,或者我需要將我的應用程序中的驅動程序自動執行?是否有可能在我失蹤的FDF,DEC,DSC或INF文件中輸入一些內容?
您可以將startup.nsh腳本文件添加到調用您應用程序的UEFI Shell啓動驅動器。
以下鏈接應該作爲使用shell中腳本的便捷參考:UEFI Shells and Scripting。具體看第3部分(EFI Shell腳本)。但是,如果您實際構建自己的固件,則還可以查看創建可引導的EFI映像並將默認引導選項設置爲此二進制文件。如果您將二進制文件作爲ROM的一部分包含在內,這是非常有用的,但它可能會涉及到設置文件系統,因此它被視爲正常啓動選項。另外,如果您可以完全訪問固件源,也可以從BDS驅動程序加載並調用二進制文件。我不推薦這種路線,除非您專門打算創建一個永遠不會啓動任何其他圖像的獨立設備。
@NicholasEmbry答案包含幾乎所有需要的東西,但我想澄清一些事情並在該領域添加最新的改進。
添加UEFI應用程序映像到啓動選項實際上是最知名的方法,當你沒有你的固件的源代碼,典型的情況是什麼。您沒有創建任何特殊的引導映像應該是簡單的UEFI應用圖像,什麼意思,你INF
應該包含:
MODULE_TYPE = UEFI_APPLICATION
這個選項不只是選項ROM這是所有UEFI可讀介質。例如,您可以在存儲上創建FAT32
分區(無論它是USB,HDD,SSD等,只需要固件可讀),並將應用程序映像放置在此分區上。然後啓動到UEFI Shell並使用bcfg
命令來影響您的啓動順序。
bcfg
命令可以被BIOS供應商阻止。在這種情況下,請按照this post的程序操作。這是使用USB棒啓動rEFInd。 rEFInd
包含bcfg
工具,併爲您提供使用它的能力。
如何使用bcfg
?
全部在幫助help bcfg -b
中描述。 -b
是UEFI傳呼機。對於那些誰喜歡的快捷鍵,這個命令將顯示所有引導選項系統:
bcfg boot dump -v
可以使用命令添加應用程序:
bcfg boot add <boot_pos> <path_to_uefi_image> <boot_order_name>
<boot_pos>
- 在引導順序中的位置。請注意,您通常希望在OS之前放置您的應用程序。如果在您的操作系統之前沒有可用的啓動選項編號,您當然可以將您的操作系統的一個選項向下移動bcfg boot mv <old_pos> <new_pos>
,然後在兩者之間添加您的應用程序映像。
<path_to_uefi_image>
- 指向您的UEFI映像的路徑。這是UEFI可讀的路徑,即。 fs0:\foobar.efi
<boot_order_name>
- 這是你的應用程序將如何在開機BIOS菜單
這個答案是真棒可見。請Nicholas,你能告訴我更多關於第二個和第三個選項嗎? –