簡體   English   中英

如何創建可啟動應用程序映像 (efi)?

[英]How to create bootable application image (efi)?

我試圖在 UEFI 環境中啟動精靈微內核。 所以我編譯了一個最小的引導加載程序並創建了一個 ESP 映像。 如果我通過 HDD 啟動,這可以正常工作,但我想通過 qemu -kernel 選項直接啟動它(這是我使用 AMD SEV 時的一些特殊要求)。 這行不通。

如果我使用包含胖圖像的 grub mkimage,我可以像這樣使用 grub 啟動 kernel,例如:

mcopy -i "${basedir}/disk.fat" -- "${basedir}/kernel" ::kernel
mcopy -i "${basedir}/disk.fat" -- "${basedir}/module" ::module

grub-mkimage -O x86_64-efi 
             -c "${basedir}/grub-bootstrap.cfg" 
             -m "${basedir}/disk.fat" 
             -o "${basedir}/grub.efi"  

但是我的系統的目標是極簡主義和安全性,因此是微內核,所以 grub 及其漏洞是毫無疑問的。

所以我的問題是:如何創建類似於 grub-mkimage 的可啟動應用程序映像?

我已閱讀有關 efi 存根啟動的信息,但無法真正弄清楚如何構建 efi 存根映像。

通常我是一個裸機嵌入式程序員,所以整個 uefi 啟動對我來說有點奇怪。 我很高興有任何提示或建議。 另外我認為堆棧溢出可能不是解決此類低級問題的最佳場所,您能否推薦其他論壇?

我想通過 qemu -kernel 選項直接引導它

為什么? 這是一個特定於 qemu 的 hack,在其他任何東西(包括任何真正的計算機)上都不存在。 通過使用這個 hack,您唯一要做的就是無法測試您通常用來啟動的任何東西(因此無法測試任何真正重要的東西)。

(這是我使用 AMD SEV 時的一些特殊要求)

這沒有任何意義(這有點像說“我耳朵里有一根香蕉,因為我正在努力學習如何彈鋼琴”)。

AMD 的 SEV 是一組旨在增強虛擬機安全性的擴展,與您的啟動方式(或者您是從 BIOS 還是 UEFI 或特定於 qemu 的 hack 啟動)無關。

我很高興有任何提示或建議。

我的建議是停止使用特定於 GRUB(多引導)、特定於 Qemu( -kernel )和特定於 Linux/Unix(elf)的工具,並實際嘗試使用 UEFI。 這將要求您使用(Microsoft 的)PE32+ 文件格式編寫自己的引導加載程序,該文件格式本身使用 UEFI 的服務。 請注意,GNU 的工具(他們的 GCC 的“Gnu-EFI”東西)相對糟糕(它在 ELF 文件周圍放置了一個 PE32+ 包裝器,並進行運行時修補以使生成的弗蘭肯怪物工作); 現在有更好的選擇(例如 Clang/LLVM/lld 工具鏈)。

如果您關心安全性,那么還需要了解 UEFI SecureBoot(以及密鑰管理和數字簽名)。 如果您關心安全虛擬機,我還建議您了解 AMD 手冊中的SKINIT指令(用於在啟動后創建動態信任根);但不要忘記這是 AMD 特定的,不會起作用在任何英特爾 CPU 上,並且大部分已經過時(BIOS 和 TPM 中的“可信測量”東西大多被 SecureBoot 取代),並且(即使在英特爾 CPU 上)如果你只是來賓,那么管理程序可以模擬它以任何它想要的方式(並且它不會保證任何東西都是安全的)。

最后; 請注意,直接啟動微內核也沒有多大意義。 微內核中沒有設備驅動程序; 因此,在啟動微內核后,您最終會遇到“無法啟動任何設備驅動程序,因為沒有設備驅動程序”的問題。 相反,您需要加載許多文件(例如,可能是初始 RAM 磁盤),然后(例如)啟動某種“啟動日志處理程序”(以顯示錯誤消息等); 然后找到並啟動kernel,然后啟動其他進程(例如“設備管理器”來檢測設備和驅動程序;“VFS 層”來處理文件系統和文件 IO 等)。 對於整個事情; 啟動 kernel 只是一個相對微不足道的小步驟(只不過是啟動一個提供多任務處理的全局共享庫),隱藏在完成所有工作的大量代碼中。

可悲的是; 直接啟動單片 kernel 是有意義的,因為它可以包含所有驅動程序(或者至少,如果內核的可執行文件是具有動態加載驅動程序的“模塊化單片”,則它具有足夠的內置內存來處理初始 RAM 磁盤); 大多數初學者教程都假設這種“不屬於任何微內核的東西的整體”想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM