快轉到主要內容

FreeBSD使用device.hints禁用裝置在開機時載入

· 民國115年丙午年
·
切換繁體/簡體
分類 資訊科技 BSD系統
標籤 FreeBSD
目錄

透過一連串技巧將特定裝置加入黑名單,讓FreeBSD系統不要去動它。

1. 問題點
#

在Intel UHD 630 + Intel Arc A380的電腦,目前Intel Arc A380獨顯在FreeBSD 15開機會導致kernel panic,因為i915kms驅動有問題。我可不可以只用Intel UHD 630的內顯開機不管獨顯,問題是兩者共用同一個i915kms的kernel module,不能透過禁止載入該模組的方式來封鎖。那我想FreeBSD有沒有類似Linux的vfio的東西可以把PCI裝置抓走不讓主機看到。

於是找到了pttdevs。這東西確實是為bhyve的PCI Passthrough所設計的機制。

2. 新增裝置到pptdevs
#

列出顯卡的PCI位址,Intel Arc A380有GPU和音訊裝置。

pciconf -lv

編輯/boot/loader.conf,寫入pptdevs將裝置交給pptdevs管理。

pptdevs="3/0/0 4/0/0"

3. 設定device.hints
#

除了pptdevs之外,還要透過/boot/device.hints設定disbled,用黑名單的方式徹底停用這個裝置。

hint.pci.3.0.0.disabled="1"

hint.pci.4.0.0.disabled="1"

照理說device hints應該就會禁止顯卡載入了,pptdevs顯得沒必要。但在我的測試是依然會載入。

4. 強制X11使用特定GPU
#

透過這次的實踐,我重新理解了FreeBSD的開機處理順序。/boot/loader.conf裡面的設定類似GRUB,是在開機核心初始化的時候就會執行的設定,接著才會從/etc/rc.conf載入系統服務。考慮到我們要在系統開機早期就搶顯卡控制權,那麼就要在/boot/loader.conf裡面儘早載入vmm,然後才可以馬上設定pptdevs。如果是在/etc/rc.conf裡面設定載入vmm模組的話就來不及了,就會導致pptdevs設定失敗。

可是雖然這樣做了,FreeBSD理論上看不到Arc A380了才對,開機是能載入i915kms(tty解析度有變化),但載入SSDM卻還是會crash掉系統,用tty啟動Wayland或X11也都是crash.

好吧,我嘗試在/usr/local/etc/xorg.conf.d/20-intel.conf強制指定只能用內顯。耶,成功了。這樣問題可能在於X Server啟動的時候會嘗試去動被封印的獨顯導致kernel panic。

Section "Device"
    Identifier "Intel iGPU"
    Driver "modesetting"
    BusID "PCI:0:2:0" # pciconf -lv查詢
EndSection

防止Wayland來亂,然後在SDDM設定檔/usr/local/etc/sddm.conf.d/kde_settings.conf強制以X11後端啟動

[General]
DisplayServer=x11

但是目前就變成只能用KDE X11了,不能用KDE Wayland。Wayland做不到指定使用哪個顯卡的機制…? 哦哦,KDE Wayland依然可以啟動耶,只要SDDM有起來就行了。

參考資料
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。