banner
fwqaaq

fwqaaq

🐭👨

UEFI 介紹

計算機啟動流程#

ROM -> LOADER -> RUNTIME -> OS LOADER -> OS

  • Loader:常見的包括 BIOS 和 UEFI(後者是前者的繼任者),一般就是內存初始化,以及加載 Runtime 和 OS Loader 程序。
  • Runtime:固件程序是為了提供運行時服務,它是對硬件最基礎的抽象(給 OS 提供一系列抽象)。
  • OS Loader:或者也也有很多人稱作 BootLoader。它需要做:文件系統引導、網卡引導、操作系統啟動配置項設置、操作系統加載等等。常見的 OS Loader 包括 GRUB、U-Boot、LinuxBoot 等。

UEFI 如何尋找 Loader 並啟動#

現在用的更多的是 UEFI 來做 Loader,而非 BIOS,保留 BIOS 名稱只是口頭的習慣。主板的 UEFI 固件只認識 efi 格式的文件,所以不能加載 elf 格式的內核。這時候就需要 OS Loader,它是一個承上啟下的角色,在 UEFI 方,會將自己包裝為 efi 格式,並保存在硬盤特定位置;如果面對 kernel,則會解析 elf 格式並加載。

這樣計算機在啟動階段才能順利找到 Loader,並進一步加載運行 OS。Loader 實際上就是是程序的格式。Loader 所處的特定位置,要求位於啟動設備的 FAT32 格式分區,然後在這個根目錄下新建 efi 目錄,並在 efi 目錄下新建 boot 目錄,計算機固件就會按照這個固定路徑尋找 Loader,裡面放著 Bootx64.efi必須遵守的規範(如果是 32 位系統,則不能帶 64)。

這個 FAT32 分區一般位於整個磁盤的最開始位置,大小大約 100M 左右(也可以是 GB,甚至更多,比較靈活),UEFI 固件會把存在 FAT32 格式分區的磁盤都當作啟動磁盤,並把這些發現的磁盤都添加到開機菜單裡,至於能不能啟動,先不管,當選擇一個具體的目標,如果是帶 UEFI 前綴的就去搜索固定路徑(/efi/bootloader

同樣,Loader 查找 kernel 文件也是如此,也將 kernel 文件放在同一目錄。當 Loader 找到 kernel 文件,就按照 elf 文件格式進行解析,如果是可以運行的 elf 文件,就讀取到內存並跳轉運行。

那 kernel 在 FAT32 分區如何讀區?#

這就是 UEFI 存在的目的,不必去考慮要加載到哪塊內存,段式還是分頁。它會在啟動階段和運行階段提供非常豐富的服務供開發者調用。啟動階段的服務稱為啟動時服務,顧名思義,這些服務只在啟動時可用;而運行時服務就是在計算機結束啟動進入正常運行後也是可以使用的。這些都在 UEFI 的接口提供。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。