「Raspberry Pi 5」はPCI Express(PCIe)接続に対応しており、M.2 SSDを接続して起動ディスクに設定することもできます。「M.2 SSD以外にもPCIe接続の拡張カードなら認識させられるのかな?」と考えて多様な拡張カードを試してみたところ、いくつかの拡張カードを認識させることに成功したので認識させるまでの手順をまとめてみました。

Raspberry Pi 5 - Raspberry Pi

https://www.raspberrypi.com/products/raspberry-pi-5/

Raspberry Pi Documentation - The Linux kernel

https://www.raspberrypi.com/documentation/computers/linux_kernel.html

Home | Raspberry Pi PCIe Database

https://pipci.jeffgeerling.com/

Raspberry Pi 5はRaspberry Piシリーズとして初めてPCIe接続に対応しており、M.2 SSDを認識させることが可能です。Raspberry Pi 5にPCIeとM.2の変換ボード「X1000」を介してM.2 SSDを接続して起動ディスクに設定する手順は、以下の記事に詳しくまとめています。今回はUSBスロット増設カードや有線LANポート増設カードなどのPCIe拡張カードをRaspberry Pi 5に認識させる手順を確かめてみます。

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



・目次

◆1:技適についての前置き

◆2:PCIe拡張カードを接続するためのライザーカード

◆3:拡張カードを接続する手順

◆3-a:すんなり認識できるパターン

◆3-b:カーネルコンパイルで認識可能になるパターン

◆3-c:認識可能なカードを接続してから別のカードに差し替えるパターン

◆1:技適についての前置き

今回使うRaspberry Pi 5はRaspberry Pi財団からGIGAZINE編集部に直接送られてきたもので、技術基準適合証明を受けていません。そこで、「技適未取得機器を用いた実験等の特例制度」の届出を行っています。なお、日本では代理店による技適申請の後でRaspberry Pi 5が発売される予定です。



◆2:PCIe拡張カードを接続するためのライザーカード

今回は、Raspberry Pi 5にPCIeとM.2の変換ボード「X1000」を接続し、X1000にライザーカード「NGFFP4X-N03」を接続して、NGFFP4X-N03にPCIe拡張カードを取り付けます。

NGFFP4X-N03の見た目はこんな感じ。



購入した個体はスロットの端が閉じていたので、端のプラスチックを削り取りました。



さらに、裏面にテープを貼って絶縁しています。



Raspberry Pi 5にX1000を装着。



さらに、X1000のM.2スロットにNGFFP4X-N03を装着。これで拡張カードを取り付ける準備が整いました。



◆3:拡張カードを接続する手順

Raspberry Pi 5がどんな拡張カードに対応しているのか分からないので、グラフィックボードやUSBポート増設カード、有線LANポート増設カードなど多種多様な拡張カードを用意しました。



いろいろ試した結果、「特に設定せずに接続」「対応するモジュールを有効化してカーネルコンパイルしてから接続」「すんなり認識できる拡張カードを認識させてから差し替える」の3種類の手順を見いだせたので、それぞれの手順をまとめました。

◆3-a:すんなり認識できるパターン

拡張カードの種類によっては、特別な設定不要で認識させられるものもあります。例えば、以下のEtron Technology製コントローラーを搭載したUSBポート増設カードは設定不要で認識させられました。



認識させる手順は次の通り。まず、NGFFP4X-N03に拡張カードを接続します。



拡張カード用の補助電源も用意します。



補助電源を接続。



USB機器を接続。



ディスプレイなどの周辺機器も接続します。



準備ができたら電源を接続します。



問題なくシステムが起動。



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

lspci

接続したUSBポート増設カードが認識されていました。



USBポート増設カードに接続したUSBメモリも自動的にマウントされています。



ストレージの中身も問題なく確認可能でした。



◆3-b:カーネルコンパイルで認識可能になるパターン

ドライバがLinuxのカーネルモジュールとして用意されている拡張カードの場合、自分でカーネルをコンパイルすることで認識させられる場合があります。例えば、以下のIntel製有線LANポート増設カードは標準状態ではRaspberry Pi 5に認識させることができませんが、Intelのモジュールを有効化してカーネルコンパイルすることで認識させることができます。



カーネルコンパイルの手順は以下の通り。まず、以下のコマンドを実行して必要なパッケージをインストールします。

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

各種パッケージのインストールが完了したら、以下の4つのコマンドを順番に実行します。

git clone --depth=1 https://github.com/raspberrypi/linux

cd linux

KERNEL=kernel_2712

make bcm2712_defconfig

続いて、有効化したカーネルモジュールを指定するために、以下のコマンドを実行します。

make menuconfig

こんな感じの画面が表示されればOK。



有効化したいカーネルモジュールを探して有効化します。今回は念のためIntelのネットワーク関連のモジュールをすべて有効化しました。



モジュールを有効化したらカレントディレクトリにある「.config」を編集します。



編集箇所は以下の赤枠で囲ったバージョン名表記の部分です。この部分を編集しないと既存のカーネルと見分けが付かなくなるので、任意の名前を付けておくというわけです。今回は「CONFIG_LOCALVERSION="-v8-16k"」と記されていたので、「CONFIG_LOCALVERSION="-v8-16kgigazine"」に書き換えて保存しました。



「.config」を書き換えたら、以下のコマンドを実行してカーネルをコンパイルします。

make -j4 Image.gz modules dtbs

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

sudo make modules_install

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

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

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

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

sudo cp arch/arm64/boot/Image.gz /boot/firmware/.img

コピーが完了したらリブートします。

sudo reboot

リブートしたら、以下のコマンドを実行してカーネルのバージョンを確認します。

uname -a

今回は以下のように表示されました。「.config」で設定した「-v8-16kgigazine」が含まれていることから、コンパイルしたカーネルのインストールが成功していることが分かります。



カーネルコンパイルとインストールが完了したらシステムをシャットダウンします。

sudo shutdown -h now

シャットダウンしたら有線LANポート増設カードを取り付けて起動します。



起動したら、有線LANポート増設カードを認識できているか確認するために、以下のコマンドを実行します。

ip a

結果はこんな感じ。Raspberry Pi 5に標準搭載されている有線LANインターフェース「eth0」の下に新たに増設したインターフェース「eth1」が表示されています。



増設したカードにイーサネットケーブルを接続してインターネットに接続します。



すると、リンクアップ状態であることを示す緑色のランプとオレンジ色のランプが点灯しました。



接続状況を確認するために以下のコマンドを実行。

ip a

増設したインターフェース「eth1」にIPアドレスが割り当てられていました。インターネットへの接続が成功しているようです。



GoogleのDNSサーバーにも接続できました。



◆3-c:認識可能なカードを接続してから別のカードに差し替えるパターン

標準状態では認識できずカーネルモジュールも用意されていないデバイスでも、「標準状態で認識可能な拡張カード」を認識させてから目的のデバイスに差し替えることで認識させられる場合もあります。今回は、標準状態では認識されないM.2 SSD「Intel Optane 16GB」を認識させてみます。



まず、Intel Optane 16GBをPCIe-M.2変換カードに装着。



今回は標準状態のRaspberry Pi 5でも認識できるモデムカード(左)を接続してからPCIe-M.2変換カード(右)に差し替えて認識させてみます。



まず、Raspberry Pi 5にX1000とNGFFP4X-N03を接続し、NGFFP4X-N03にモデムカードを接続して起動します。ついでに、PCからシステムの状態を監視できるようにUSBシリアル変換モジュールも接続しています。



システムが起動したら以下のコマンドを実行してPCIインターフェースの情報を確認します。

lspci

今回は「Communication controller : LSI Cooporation Device」というインターフェースが認識されていることが分かります。



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

lspci -nn

結果はこんな感じ。「Communication controller : LSI Cooporation Device」の先頭にある「0000:01:00.0」と末尾の「0630」をどこかにメモしておきます。「0000:01:00.0」はPCIのバスから見たデバイスの位置を示し、「0630」はデバイスIDを示しています。



続いて以下のコマンドを実行。

find /sys/devices | grep 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と一致していることを確認したら、次の作業に進みます。

0/0000:01:00.0/device

0x0630


まず、以下のコマンドで管理者権限を取得します。

sudo su

続いて、接続済みのモデムカードをシステムから削除するために、メモしたファイルパスと同じディレクトリ内にある「remove」という名前のファイルに「1」を書き込みます。今回は「/sys/devices/platform/axi/1000110000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/remove」に「1」を書き込みたいので以下のコマンドを実行します。

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

削除できたか確認するために、以下のコマンドを実行。

lspci

結果はこんな感じ。「Communication controller : LSI Cooporation Device」が消えているので削除は成功です。



モデムカードをシステムから削除できたので、システムは起動したままでモデムカードを物理的に取り外します。



続いて、認識させたい拡張カードを取り付けます。



PCIインターフェースを再スキャンするために、メモしたファイルパスの1つ上のディレクトリにある「rescan」というファイルに「1」を書き込みます。今回は「/sys/devices/platform/axi/1000110000.pcie/pci0000:00/0000:00:00.0/rescan」に「1」を書き込めばOKなので、以下のコマンドを実行します。

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

これで拡張カードが認識されました。認識されているか確認するために以下のコマンドを実行します。

lspci

結果はこんな感じ。「Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series」と記されていることから、Intel Optaneメモリが認識されていることが分かります。



PCIデバイスの接続ログを確認するために以下のコマンドを実行します。

dmesg

結果はこんな感じ。エラーなく認識されていました。



続いて、ストレージとして正しく認識されているか確認するために、以下のコマンドを実行。

fdisk -l

問題なく認識されていました。



Raspberry Pi 5にグラフィックボードを接続する手順もいずれ公開予定なので乞うご期待。



<つづく>

◆「Raspberry Pi 5」でレビューして欲しい点を教えて!

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

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