daemonfreaks.com

FreeBSDでeGPUを使う

posted by jun-g at Sun, 28 May 2023 10:30 JST

先日購入したIntel NUC13 Pro のセットアップ続き、その2。

NUC13はThunderbolt4をサポートしていて、かつFreeBSDもThunderboltをサポートしていて、そして手元に都合良くNVIDIA RTX3060の入ったeGPUがあります。ということで内蔵GPUがサポートされるまでこれを使います。

まずは準備。ドライバーをインストールして起動時にカーネルモジュールを読み込む用にセット。

$ su -
Password:
# pkg install nvidia-driver
...
# sysrc kld_list=nvidia-modeset

再起動した後のdmesg。

# dmesg|grep nvidia
nvidia1: <NVIDIA GeForce RTX 3060> on vgapci1
vgapci1: child nvidia1 requested pci_enable_io
vgapci1: child nvidia1 requested pci_enable_io
nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  515.86.01  Wed Oct 26 08:52:34 UTC 2022

eGPUは無事に認識されました。が、コンソールは引き続きNUC13本体から接続したモニター上に表示されてます。

次にXの設定。先日作ったscfbを使う設定ファイルを退避して起動してみます。

# cd /usr/local/etc/X11/xorg.conf.d
# mv driver-scfb.conf driver-scfb.conf.bak
# startx

が、起動しません…。 Handbookのビデオカードの設定ページ を読むと:

1つ以上のビデオカードが存在する場合には、 BusID 行のコメントを外し、 希望するカードを選択するように設定できます。 ビデオカードバス ID は、 pciconf -lv | grep -B3 display で表示できます。

と書いてありましたので、その通りにします。

# pciconf -lv | grep -B3 display
vgapci0@pci0:0:2:0: class=0x030000 rev=0x04 hdr=0x00 vendor=0x8086 device=0xa7a0 subvendor=0x8086 subdevice=0x3037
    vendor     = 'Intel Corporation'
    device     = 'Raptor Lake-P [Iris Xe Graphics]'
    class      = display
--
vgapci1@pci0:4:0:0: class=0x030000 rev=0xa1 hdr=0x00 vendor=0x10de device=0x2504 subvendor=0x10de subdevice=0x2504
    vendor     = 'NVIDIA Corporation'
    device     = 'GA106 [GeForce RTX 3060 Lite Hash Rate]'
    class      = display

この情報を使ってX用の以下のファイルを作成。

# cat /usr/local/etc/X11/xorg.conf.d/driver-nvidia.conf
Section "Device"
    Identifier    "Device0"
    Driver        "nvidia"
    VendorName    "NVIDIA COrporation"
    BoardName     "NVIDIA GeForce RTX 3060"
    BusId         "PCI:4:0:0"
EndSection

でstartxすると、無事にXが起動し、eGPUに接続したモニター上に表示されました!

続く…。