Freebsd

UEFI 解決問題

  • March 4, 2021

背景

我來自使用基於原始碼的發行版 Gentoo。考慮到這一點,我的 PC 中有 4 個硬碟,我決定進行試驗,並可能切換到 FreeBSD。我寫這個問題來自:

作業系統規格

% cat /etc/os-release 
NAME=FreeBSD
VERSION=12.2-RELEASE-p3
VERSION_ID=12.2
ID=freebsd
ANSI_COLOR="0;31"
PRETTY_NAME="FreeBSD 12.2-RELEASE-p3"
>snip<

在埠樹中執行 KDE-5 版本,並將 synth 作為包管理器

問題

正確安裝上述所有內容後,我正在微調項目。我很喜歡編輯配置文件,因為這是 Gentoo 的主要機制。我遇到了一個我自己最終無法解決的問題,主要是因為 FreeBSD 文件已經過時了。請參閱:錯誤 235040 - 基於 Lua 的載入程序 (8) 無法獲取 /boot/loader.rc.local


問題

  1. >

讓 loader.efi 指向 loader_4th.efi 解決了這個問題。

這只是一個符號連結。在創建它之前我想知道,因為列表中沒有連結

# ls -al /boot/loader*
-r-xr-xr-x  3 root  wheel  372736 Jan  3 18:40 /boot/loader
-r-xr-xr-x  1 root  wheel  327680 Jan  3 18:40 /boot/loader_4th
-r-xr-xr-x  1 root  wheel  428032 Jan  3 18:40 /boot/loader_4th.efi
-r-xr-xr-x  1 root  wheel  327680 Nov 28 17:18 /boot/loader_4th.old
-r-xr-xr-x  3 root  wheel  372736 Jan  3 18:40 /boot/loader_lua
-r-xr-xr-x  2 root  wheel  490496 Jan  3 18:40 /boot/loader_lua.efi
-r-xr-xr-x  1 root  wheel  372736 Nov 28 17:18 /boot/loader_lua.old
-r-xr-xr-x  1 root  wheel  278528 Jan  3 18:40 /boot/loader_simp
-r-xr-xr-x  1 root  wheel  367616 Jan  3 18:40 /boot/loader_simp.efi
-r-xr-xr-x  1 root  wheel  278528 Nov 28 17:18 /boot/loader_simp.old
-r--r--r--  1 root  wheel    7492 Jan  3 18:40 /boot/loader.4th
-rw-r--r--  1 root  wheel     179 Feb 26 18:23 /boot/loader.conf
-r-xr-xr-x  2 root  wheel  490496 Jan  3 18:40 /boot/loader.efi
-r--r--r--  1 root  wheel     468 Jan  3 18:40 /boot/loader.rc
-rw-r--r--  1 root  wheel      28 Feb 27 16:18 /boot/loader.rc.local
  1. 會切換12.2-RELEASE12.2-STABLE幫助嗎?我不知道,因為沒有Google結果出現,除瞭如何切換分支

我正在使用來自(由於沒有 DRM 核心模組,此驅動程序沒有 KMS 選項)中的nvidia-driverblob :x11/nvidia-driver

device     = GP107 [GeForce GTX 1050 Ti] 

半解/加重

如果我啟動到 UEFI Shell 並使用該mode命令,FreeBSD 載入程序將正確顯示。我也可以在載入程序載入(以錯誤的解析度)後選擇選項 3 以 Escape 到載入程序提示符並使用gop set,但我必須在每次重新啟動時使用任一選項,因為我的系統預設為 1024x768。有沒有辦法強制 UEFI 永久預設為新設置?

問題

我在 FreeBSD 論壇上的舊文章中找到了 @Claus Anderson 提到的大部分項目,但無論我擺弄什麼設置,我的efifb(VT)解析度都停留在 1024x768。這對我來說是不可接受的,因為我更喜歡使用控制台而不是 GUI 終端(Alt + Fn 與 Konsole)。因為這只是個人喜好,所以我一直在探勘,終於有了解決方案,以防它可以幫助其他讀者/訪客。

解決方案

我的電腦是由 OEM 定制的,包含一個MSI Z270-A PRO。當我開始安裝多個作業系統時,我使用了 UEFI 設置實用程序並關閉了僅 UEFI 模式,該模式在實用程序的啟動設置菜單中稱為UEFI + Legacy,但更廣為人知的是 CSM,並且隨著時間的推移,我將所有安裝完全遷移到僅 UEFI。

事實證明,啟用 CSM 會為此主機板禁用稱為 Windows 8.1/10 WHQL 支持的功能,即使在我遷移了所有作業系統後,它仍然被禁用。見下圖:

[MSI WHQL 設置

禁用此選項,即使在引導設置中啟用了 Pure UEFI,也會禁用對上圖中底部 2 個選項的訪問:

  1. 內部 GOP 配置
  2. 安全啟動

雖然我不使用安全啟動(個人偏好),但在修改了多種變體後,我確實發現如果禁用對 GOP 配置的訪問,任何啟動的作業系統或 EFI 存根都會卡在 1024x768 的基本解析度上。換句話說,如果沒有打開 WHQL 支持,即使對於與 Windows 無關的作業系統,*GOP 設置也會在 NVRAM 中標記為只讀。*為什麼會這樣,我不知道,因為 WHQL僅通過確保已安裝的驅動程序經過數字簽名並經過 QC 測試來在**Windows中提供驅動程序安全性。**我不知道為什麼需要對非 Windows 作業系統的解析度更改進行測試。


這意味著無論我通過什麼設置通過 FreeBSD 載入程序,我總是在支持 1920x1080/1080p @ 60Hz 的本機解析度的顯示器上獲得 1024x768 的螢幕尺寸,除非我使用引導載入程序選項 3,它發生在 UEFI 之後完成啟動到 rEFInd,NVRAM 被標記為讀/寫。

我現在啟用exec mode 0boot/loader.confWindows 8.1/10 WHQL 支持,並且擁有 1080p 的本機控制台解析度。作為正確設置的副作用,rEFInd 也會啟動到原生解析度。

在找到上述解決方案之前我嘗試過的事情

我不推薦這些,但為了完整起見,我會在這裡列出它們

  1. 更新了我的顯卡韌體,型號和 OEM 相同,但版本更新。
  2. 更新了我的 GOP 協議,認為我的顯卡韌體有問題。

我實際上盡可能徹底地閱讀了這個問題。3次。每次閱讀我都會感到更加困惑。

您花時間描述您的設置。但是你真正的根本問題是什麼?你為什麼堅持這樣做?為什麼你會這樣解釋錯誤報告?(我的解釋不同)。文件實際上並沒有那麼糟糕,但我同意它在一些關鍵的關鍵地方應該要好得多。但我們似乎在追逐另一隻兔子。

我不執行 Gentoo,所以*“OS Specs”*對我來說是陌生的(我希望uname -a)。啟動系統的方法有很多種,但您似乎很長,所以我們不需要深入那裡。

但是 FreeBSD 正處於從基於Forth的載入程序到基於Lua的載入程序的過渡階段。FreeBSD 多年來一直使用 Forth 載入程序,所以很多人都會引用它。Lua loader 是在 11 中引入的,並在 12 中預設。請參閱LUA loader on default

再一次因為它已經使用了很長時間,一些 Forthism 已經悄悄進入/boot/loader.rc.local。這就是 Kyle Evans 和 Warner Losh 在您引用的錯誤報告中試圖進一步解釋的內容。

在現代 FreeBSD 系統上,您不應該篡改/boot/loader.rc.local. 由於遺留原因,它在那裡。它只會被 Forth 載入器而不是 Lua 載入器讀取。

我想要我的Forth!

如果我理解正確,您從原始碼建構所有內容,包括 FreeBSD 本身。在這種情況下,您可以編輯/etc/src.conf和設置:

WITH_FORTH="yes"
WITHOUT_LUA="yes"

然後選擇您使用的載入程序。

現代方式

多年來更改載入程序設置的正確方法一直是使用loader.conf(5)。該文件由兩個載入器讀取和解析。

您只需將“半解決方案”和錯誤 235040之間的點連接起來

編輯/boot/loader.conf(這是“使用者定義的”)並添加以下內容:

exec="gop set 0"
exec="gop set 2"

/boot/loader.conf.local工作方式相同,但適用於具有共同點的站點的機器特定設置loader.conf

可以像 Forth 一樣編寫自己的 Lua 腳本,但它不適合普通使用。

預設解析度

您寫道,您的解析度預設為 1024x768。而不是使用gop set您可能可以使用efi_max_resolution(再次loader.conf(5))。

Value        Resolution
480p         640x480
720p         1280x720
1080p        1920x1080
2160p        3840x2160
4k           3840x2160
5k           5120x2880
WidthxHeight WidthxHeight

所以/boot/loader.conf你可以嘗試:

efi_max_resolution="1080p"

英偉達驅動

同樣,您也不清楚您有什麼問題。您聲明您正在使用x11/nvidia-driver. 這僅與 X11 相關。在引導期間vt(4)控制台驅動程序應該啟動。在進行 BIOS 引導時,如果您沒有 KMS 驅動程序(如您),它將切換到 640x480x16。使用 UEFI,我假設它已經從文本模式切換到圖形模式,因此它會保持解析度。

驅動程序將僅在啟動 X11 時使用。不需要配置,因為它應該被自動檢測。這應該將您發送到Slim之類的圖形登錄管理器或直接發送到桌面。

在 RELEASE 和 STABLE 之間切換

如果您想過一種更活潑的生活方式,那麼您可以切換到 STABLE。或者用 CURRENT 完全瘋狂。但是,如果我理解了您的問題,那麼它不會有任何區別。

24.4. 跟踪開發分支

三個 FreeBSD 版本有什麼區別?(目前、發布和穩定)

引用自:https://unix.stackexchange.com/questions/636771