レビュー

ついにRaspberry Pi 5にグラボを接続して画面出力に成功したので手順をまとめてみた


Raspberry Pi 5はPCIe接続に対応しており、M.2 SSDを接続して起動ディスクとして使ったりPCIe拡張カードを接続したりできます。「PCIe接続に対応しているということは、グラフィックボードの接続も可能なのでは?」と考えてあれこれ試していたところ、ついにグラフィックボードの接続と画面表示に成功したので手順をまとめてみました。

Test GPU (XFX AMD Radeon RX 460 4GB GDDR5) · Issue #564 · geerlingguy/raspberry-pi-pcie-devices · GitHub
https://github.com/geerlingguy/raspberry-pi-pcie-devices/issues/564

・目次
◆0:技適についての前置き
◆1:グラボの接続に必要なパーツ
◆2:カーネルコンパイルやファームウェアの設定編集手順
◆3:グラフィックボードを接続して画面を出力する
◆4:GUIを起動してGPUをゴリゴリ動かしてみる
◆5:記事作成時点では動作しないグラフィックボードもあり
◆6:「Raspberry Pi 5」でレビューして欲しい点を教えて!

◆0:技適についての前置き
今回使うRaspberry Pi 5はRaspberry Pi財団からGIGAZINE編集部に直接送られてきたもので、技術基準適合証明を受けていません。そこで、「技適未取得機器を用いた実験等の特例制度」の届出を行っています。なお、すでに日本国内では技適取得済みのRaspberry Pi 5が売られているので、一般ユーザーが技適について気にする必要はありません。


◆1:グラボの接続に必要なパーツ
今回はRaspberry Pi 5(左)にグラフィックボード「Radeon RX 560 AERO ITX 4G OC」(右)を接続して画面を出力させてみます。なお、写真のRaspberry Pi 5には純正空冷ファンが装着されていますが、ファンは必須ではありません。また、今回の手順はPolaris世代のAMD製GPUを対象にしたものです。


Raspberry Pi 5に認識させるPCIe拡張カードの種類によっては「カーネルコンパイルしてから認識させる」「認識可能なダミー用カードを接続してから本命のカードに差し替える」といった操作が必要になる場合があります。それぞれの手順や必要なパーツは以下の記事で確認可能。今回は「グラフィックボードの認識に必要なモジュールを有効化してカーネルコンパイルした後に、認識可能なダミー用カードを接続してからグラフィックボードに差し替える」という手順でRaspberry Pi 5にグラフィックボードを認識させます。

Raspberry Pi 5にPCIe拡張カードを接続する方法まとめ&カーネルコンパイルの手順も詳しく解説 - GIGAZINE


というわけで、Raspberry Pi 5にグラフィックボードを認識させるために必要なパーツは以下の通り。左上から順に「Raspberry Pi OSをインストールしたmicroSDカード」「Raspberry Pi 5」「Raspberry Pi 5の電源」「グラフィックボード(Radeon RX 560 AERO ITX 4G OC)」「ダミー用カード」「PCIeとM.2の変換ボード(X1000)」「M.2とPCIe×4の変換ボード(NGFFP4X-N03)」「グラフィックボード用のライザーカード」「グラフィックボード用の補助電源およびケーブル」です。ダミー用カードは「特別な設定不要でRaspberry Pi 5に認識させられるカード」なら何でもOK。今回はモデムカードを使っています。


必要なパーツを用意したらRaspberry Pi 5に「PCIeとM.2の変換ボード(X1000)」と「M.2とPCIe×4の変換ボード(NGFFP4X-N03)」を取り付けます。


NGFFP4X-N03はグラフィックボードを接続できそうな形状ですが、Raspberry Pi 5の3.3Vの電流量が少ないためNGFFP4X-N03に直接グラフィックボードを接続すると電流不足で起動できません。そこで、今回はATX電源を補助電源として使い、ライザーカードを介してRaspberry Pi 5と接続することにします。


今回は補助電源にATX電源を使っており、電源単体で通電させるために端子をショートさせる必要があります。そこで、電源端子の先端にEVGA製ATX電源に付属していた「電源を入れるためのパーツ」を接続しています。「電源を入れるためのパーツ」がない場合はインターネット上の情報を参考に針金クリップなどで代用してください。


◆2:カーネルコンパイルやファームウェアの設定編集手順
Raspberry Pi 5の電源を入れてシリアルコンソールやSSHを用いて操作可能な状態にし、カーネルのコンパイル作業を進めます。


まずは以下のコマンドを実行して管理者権限を取得。

sudo su


続いて、以下のコマンドを実行してカーネルコンパイルに必要なパッケージをインストールします。

apt install git bc bison flex libssl-dev make libncurses5-dev


さらに、以下のコマンドを実行してAMD製GPU用のファームウェアをインストールします。

apt install -y firmware-amd-graphics


パッケージのインストールが完了したら、起動時にGUIではなくCLIを表示するように設定を変更します。まず、以下のコマンドを実行してRaspberry Pi 5の管理画面を開きます。

raspi-config


以下のような管理画面が開いたら「1 System Options」を選択。


「S5 Boot / Auto Login」を選択。


「B2 Console Autologin Text console」を選択。


すると管理画面の先頭に戻るので「Finish」を選択。


再起動していいか確認する画面が表示されたら「Yes」を選択してシステムを再起動します。


再起動したら管理者権限を取得。

sudo su


カーネルモジュールの自動読み込みを有効にしていると、うまくグラフィックボードを認識できない場合があるので、AMD製GPU関連のカーネルモジュールの自動起動を無効化します。まず、以下のコマンドを実行して設定ファイルを作成してエディタで開きます。

nano /etc/modprobe.d/blacklist-amdgpu.conf


空白のファイルが作成されたら「blacklist amdgpu」と書き込んで保存します。


続いて、カーネルコンパイルに必要なファイルをダウンロードしたり変数を設定したりするために以下のコマンドを順番に実行します。なお、カーネルはRaspberry Piプロジェクトの公式カーネルではなく第三者の独自カスタムカーネルを使います。

mkdir gpu_kernel

cd gpu_kernel

git clone --depth=1 --branch rpi-6.1.y-gpu-pi5 https://github.com/Coreforge/linux.git

cd linux

KERNEL=kernel_2712

make bcm2712_defconfig


次に、必要なモジュールを指定するために以下のコマンドを実行してカーネルコンパイルの設定画面を開きます。

make menuconfig


設定画面が開いたらメニューを「Device Drivers」「Graphics support」の順にたどり、「AMD GPU」を「M(module)」に設定。さらに「Enable amdgpu support for SI parts」「Enable amdgpu support for CIK parts」「Always enable userptr write support」の3つを有効化します。


続いて、「ACP (Audio CoProcessor) Configuration」を選択。


「Enable AMD Audio CoProcessor IP support」を有効化したらEscキーを押して1つ前の画面に戻ります。


「Display Engine Configuration」を選択。


「AMD DC - Enable new display engine (NEW)」「Enable HDCP support in DC」「AMD DC support for Southern Islands ASICs」「Enable kgdb break in DC」の4つを有効化したらEscキーを押して1つ前の画面に戻ります。


さらに、「HSA kernel driver for AMD GPU devices」を有効化してEscキーを押して前の画面へ。


「Kernel Features」を選択。


「Kernel support for 32bit EL0」を選択。


「Fix up misaligned multi-word loads and stores in user space」を有効化したら「Save」を選択。


ファイル名入力画面が表示されたら何も入力せず「Ok」を選択。


「Exit」を選択。


管理画面のトップページに戻ったら「Ctrl+C」で管理画面を閉じます。


続いて、カーネルのバージョン名を書き換えるために以下のコマンドを実行して設定ファイルを開きます。

nano .config


「CONFIG_LOCALVERSION="○○○○"」と記されている部分を分かりやすい名前に書き換えます。今回は「CONFIG_LOCALVERSION="-v8_16k"」と記されていたので「CONFIG_LOCALVERSION="-v8_16kradeon"」に書き換えて保存しました。


バージョン名を書き換えたら、以下のコマンドを実行してカーネルをコンパイルします。

make -j4 Image.gz modules dtbs


カーネルのコンパイル中は以下のように進行状況がズラズラ~っと表示されます。コンパイル完了まで1時間弱かかるので待機します。


コンパイルが完了したら以下のコマンドを実行してカーネルモジュールをインストールします。

make modules_install


続いて、以下のコマンドを順番に実行して必要なファイルをコピーします。

cp arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware/

cp arch/arm64/boot/dts/overlays/*.dtb* /boot/firmware/overlays/

cp arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/

cp arch/arm64/boot/Image.gz /boot/firmware/$KERNEL.img


次に、GUIの起動に必要なライブラリ「memcpy_unaligned.c」をインストールするために以下のコマンドを順番に実行しまs。

wget https://gist.githubusercontent.com/Coreforge/91da3d410ec7eb0ef5bc8dee24b91359/raw/b4848d1da9fff0cfcf7b601713efac1909e408e8/memcpy_unaligned.c

gcc -shared -fPIC -o memcpy.so memcpy_unaligned.c

mv memcpy.so /usr/local/lib/memcpy.so


続いて、システムの起動時に「memcpy」を読み込めるようにする設定ファイルを作成します。まず、以下のコマンドを実行。

nano /etc/ld.so.preload


空白のファイルが作成されたら「/usr/local/lib/memcpy.so」と書き込んで保存します。


さらに、PCIe接続を明示的に有効化するために、以下のコマンドを実行してファームウェアの設定ファイルを編集します。

nano /boot/firmware/config.txt


設定ファイルが開いたら、末尾に以下の2行を追加します。Raspberry Pi 5はスペック上はPCIe Gen2に対応しているとされていますが、ファームウェアの設定ファイルに「dtparam=pciex1_gen=3」と書き込むことでPCIe Gen3での高速接続が可能となります。

dtparam=pciex1
dtparam=pciex1_gen=3


次に、EEPROMを書き換えるために以下のコマンドを実行します。

rpi-eeprom-config --edit


編集画面が開いたらファイルの内容を以下のように書き換えて保存します。

[all]
BOOT_UART=1
POWER_OFF_ON_HALT=1
WAKE_ON_GPIO=1
BOOT_ORDER=0xf41
PCIE_PROBE=1


ここまで設定できたら以下のコマンドを実行してシステムを再起動します。

reboot


再起動したら管理者権限を取得。

sudo su


カーネルのバージョンを確認するために以下のコマンドを実行します。

uname -a


カーネルのバージョン名が設定した通りの名前になっていればカーネルコンパイルとインストールは成功です。今回は「-v8_16kradeon」と正しく表示されました。


カーネルを正しくインストールできていることを確認したら以下のコマンドを実行してシステムを終了します。

halt


◆3:グラフィックボードを接続して画面を出力する
カーネルコンパイルやファームウェアの準備が完了したので、いよいよRaspberry Pi 5にグラフィックボードを接続します。接続の大まかな流れは「先にダミー用のカードを接続して認識させた後に、ダミー用カードをグラフィックボードに差し替えて認識させる」というもの。具体的な手順は以下の通りです。

まず、ダミー用のカードをRaspberry Pi 5に取り付けて電源を入れます。


続いて管理者権限を取得。

sudo su


以下のコマンドを実行してRaspberry Pi 5がダミー用のカードを認識できているか確認します。

lspci


「Communication controller : LSI Corporation Device」という名前でカードを認識できていることが確認できました。


続いて、以下のコマンドを実行して接続情報の詳細を確認します。

lspci -nn


コマンドの実行結果はこんな感じ。「Communication controller : LSI Corporation Device」が含まれる行の先頭の「0000:01:00.0」と末尾の数字4桁「0630」をメモしておきます。この「0000:01:00.0」PCIのバスから見たデバイスの位置を示し、「0630」はデバイスIDを示しています。


続いてダミー用カードの接続状況を操作するために、以下のコマンドを実行して操作対象のディレクトリを探します。

find /sys/devices | grep 0000:01:00.0


検索結果にズラリと表示されるディレクトリが操作対象のディレクトリです。今回は「/sys/devices/platform/axi/1000110000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0」が操作対象のディレクトリであることが分かります。対象ディレクトリが間違いでないことを確認するために、操作対象ディレクトリの「device」という名前のファイルのパスをメモしておきます。今回は「/sys/devices/platform/axi/1000110000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/device」をメモ。


続いて、以下のコマンドを実行してファイルの中身を確認します。

cat /sys/devices/platform/axi/1000110000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/device


ファイルの中身にデバイスの位置とデバイスIDが含まれていればOK。今回の実行結果は以下の通りで、デバイスの位置を示す「0000:01:00.0」とデバイスID「0630」が含まれていたので、このまま操作を続けます。

0/0000:01:00.0/device
0x0630


続いて以下のコマンドを実行して操作対象ディレクトリ内の「remove」ファイルに1を書き込み、ダミー用カードをシステムからソフトウェア的に取り外します。

echo "1"> /sys/devices/platform/axi/1000110000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/remove


以下のコマンドを実行してデバイスの接続状況を確認します。

lspci


「lspci」の実行結果に「Communication controller : LSI Corporation Device」が含まれていないので、取り外しが成功していることが分かります。


次に、ダミー用カードをRaspberry Pi 5から物理的に取外します。


そして、グラフィックボードをRaspberry Pi 5に接続します。さらに、ディスプレイや電源とも接続しておきます。


グラフィックボードを接続したら操作対象ディレクトリの1つ上の階層にある「rescan」ファイルに「1」を書き込んでデバイスを再スキャンします。実行すべきコマンドは以下の通り。

echo "1"> /sys/devices/platform/axi/1000110000.pcie/pci0000:00/0000:00:00.0/rescan


続いて、以下のコマンドを実行してデバイスの接続状況を確認します。

lspci


実行結果はこんな感じ。「Radeon RX 550 640SP / RX 560/560X」と記されていることから、グラフィックボードを認識できていることが分かります。


さらに、「dmesg」を実行してカーネルのログを確認してみます。

dmesg


実行結果はこんな感じ。「AMD GPU」に関連するエラーが出力されていた場合はモジュールのロードに失敗している可能性が高いのでカーネルコンパイルを最初からやり直す必要があります。今回は当該エラーは発生していなかったので、無事に成功してる模様。


グラフィックボードを無事に認識できているようなので、以下のコマンドを実行してAMD製GPU用のカーネルモジュールを読み込みます。

modprobe amdgpu


すると、ディスプレイにCLI画面が表示されるはず。これでRaspberry Pi 5にグラフィックボードを接続して画面を出力することができました。


◆4:GUIを起動してGPUをゴリゴリ動かしてみる
画面出力に成功したので、ここからはRaspberry Pi 5に接続したキーボードで操作を進めます。


GUIを起動するべく、以下のコマンドを実行。

wayfire-pi


しばらく待つとGUIが起動します。記事作成時点では「マウスポインタが表示されない」という問題が存在しますが、マウスの認識自体はできているので、「右クリックメニューを出す」「画面上をドラッグしてみる」といった操作を行ってマウスポインタの位置を把握すれば実用的とは言い難いもののマウスで操作可能です。


続いて、グラフィックボードをゴリゴリ動かすために3Dベンチマークソフト「glmark2」や稼働状況監視ソフト「radeontop」をインストールします。まずはマウスやキーボードを駆使してターミナルを起動します。


管理者権限を取得。

sudo su


以下のコマンドを順番に実行して「glmark2」と「radeontop」をインストールします。

apt install glmark2

apt install -y libdrm-dev libncurses-dev libxcb-dri2-0-dev

git clone https://github.com/clbr/radeontop.git

cd radeontop

make


インストールが完了したら「glmark2」を実行してグラフィックボードに3D処理を実行させます。

glmark2


「glmark2」の実行画面はこんな感じ。


さらに、別のターミナルを開いて以下のコマンドを順番に実行。

cd radeontop

./radeontop


これで、グラフィックボードでCG処理を実行しつつ動作状況を監視できるようになりました。


◆5:記事作成時点では動作しないグラフィックボードもあり
NVIDIA製GPU搭載グラフィックボードも認識させられるか試してみたのですが、NVIDIA製GPUに対応するモジュールを有効化してカーネルコンパイルしてもエラーが発生して認識させられませんでした。また、インターネット上には「Polaris世代より新しい世代のAMD製GPUも認識させられない」という情報も存在しています。


ちなみに、「Raspberry Pi 5はPCIe接続に対応」ということを知った当初は以下のような「Raspberry Pi 5よりも圧倒的に巨大なグラフィックボードを接続して画面出力!」という姿を妄想していたのですが、「NVIDIA製GPUを認識させられない」「Raspberry Pi 5の3.3Vの電流量が少ない」といった問題が発生したため実現できませんでした。


◆6:「Raspberry Pi 5」でレビューして欲しい点を教えて!
「こうするとどうなるかやってみて!」「こういうことできる?」「こんな時どうなる?」など実際に使うからこそ試して欲しいポイントを以下のリンク先から教えてください~。他の誰かと内容が重なってもOK、むしろ多ければ多いほど「やはりこういう点が気になるのだな~」というのがわかるので助かるのです。そして次のレビュー記事作成に反映されてお役立ち!

• Discord | "「Raspberry Pi 5」がGIGAZINE編集部に届いたのでレビューするけど何が知りたい?" | GIGAZINE(ギガジン)

この記事のタイトルとURLをコピーする

・関連記事
Raspberry Pi 5のGIGAZINEレビュー総まとめ「必要な電源」「クーラーは必須なのか」「OSインストール手順」「M.2 SSDを接続する方法」「RTC機能の詳細」などの疑問を解決できるレビューが盛りだくさん - GIGAZINE

Raspberry Pi 5にM.2 SSDを接続して起動ディスクに設定する方法まとめ、相性の良いSSDやSSDごとの転送速度の違いも検証してみた - GIGAZINE

Raspberry Pi 5にPCIe拡張カードを接続する方法まとめ&カーネルコンパイルの手順も詳しく解説 - GIGAZINE

「Raspberry Pi 5」の外観やポートの数を徹底チェック&どんなチップが搭載されているのか接写画像を撮影しまくってみた - GIGAZINE

「Raspberry Pi 5」にOSをインストールして超小型デスクトップPCとして使えるようにする手順を初心者にも分かりやすくまとめてみた - GIGAZINE

Raspberry Pi 5をUSBメモリや外付けSSDからブートする手順&低電力時の警告画面をスキップする方法まとめ - GIGAZINE

「Raspberry Pi 5」に純正アクティブクーラーを装着して冷却部位やHATとの干渉具合をチェックしてみた - GIGAZINE

Raspberry Pi 5に純正アクティブクーラーは必須なのか?クーラーの有無で温度がどう変化するのか検証してみた - GIGAZINE

Raspberry Pi 5は5V/5A対応電源アダプター以外でも使用可能なのか?純正電源と非純正電源で高負荷時の安定性を比較してみた - GIGAZINE

Raspberry Pi 5のRTC機能を使って電源オフでも時刻を維持する方法、オフラインでも時刻を維持できるので遠隔監視などに便利 - GIGAZINE

「Raspberry Pi 5」に強い光を照射すると強制終了するデスフラッシュ現象を確認したので詳細を共有します - GIGAZINE

「Raspberry Pi 5」登場、CPUとGPUがRaspberry Pi 4の2~3倍の性能で独自開発I/Oコントローラー「RP1」も搭載 - GIGAZINE

Raspberry Pi 5のベンチマーク結果をRaspberry Pi財団が公表、前世代の2倍以上のスコアをたたき出す - GIGAZINE

Raspberry Pi公式キーボードとマウスが届いたので外観を詳しくチェックしてみたよレビュー - GIGAZINE

in レビュー,   ハードウェア, Posted by log1o_hf

You can read the machine translated English article here.