筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2023-04-13 AlmaLinux 9 (20221116)で Raspberry Pi 400のWi-Fiを使えるようにする
■ AlmaLinux 9 (20221116)で Raspberry Pi 400のWi-Fiを使えるようにする
突然ですが Raspberry Pi 400を買いました。Raspberry Pi 4ではなく400にした理由は、 たまたま買おうとしたときにスイッチサイエンスに在庫があるのが400だったのと、キーボード付きなのと、端子が後ろに集中していて使いやすそうだと思ったからです。
アップするの忘れてたけど Raspberry Pi 400 ゲット。 pic.twitter.com/fpnUgNDpsL
— めた110 (@metalefty) April 13, 2023
FreeBSDとAlmaLinuxを入れて遊ぶつもりですが、まずはAlmaLinuxの方から。
まずは、国内のミラーからRasPi用のイメージをダウンロードしてきます。今回使用したのは AlmaLinux-9-RaspberryPi-9.1-20221116.aarch64.raw.xz
です。
イメージの書き込みかたは省略します。イメージを書きんだSDカードを挿して電源を入れると普通に起動しました。Raspberry Pi 400はUSBからのブートにも対応しているため、SDカード以外にもUSBメモリやSSDを挿しても使えるようです。
以下の初期パスワードでログインします。
ユーザー名: root
パスワード: almalinux
Wi-Fiが使えない
AlmaLinux 9の配布されたイメージそのままの状態では、Wi-Fiが使えませんでした。
nmcliコマンドで確認してみると、Wi-Fiは有効になっているものの WIFI-HW
がmissing
となっており、Wi-Fiのハードウェアが見つからない状態になっているようです。
$ nmcli radio
WIFI-HW WIFI WWAN-HW WWAN
missing enabled missing enabled
これはPi 400 のハードウェアが Pi 4 と微妙に異なるためで、Pi 4がBCM43455というチップを採用しているのに対し、Pi 400はBCM43456を採用しているようです。
dmesgをgrepしてみると、ファームウェアの読み込みに失敗していることがわかります。ドライバとしてはbrcmfmacで対応しているのですが、ファームウェアがないためハードウェアを使用できていないようです。
$ dmesg | grep brcmfmac
[ 19.848452] brcmfmac: F1 signature read @0x18000000=0x15294345
[ 19.859149] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43456-sdio for chip BCM4345/9
[ 19.886424] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43456-sdio.raspberrypi,400.bin failed with error -2
[ 19.902527] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43456-sdio.bin failed with error -2
[ 19.968835] usbcore: registered new interface driver brcmfmac
[ 20.926139] brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50
ファームウェアは linux-firmware
というパッケージに含まれていて、/lib/firmware
以下にインストールされているのですがこの中に 43456 用のものがないことがわかります。ファイル名にRaspberry Piのモデル名らしきものがありますが、ここにもPi 400はないですね。
$ find /lib/firmware/brcm | grep -i raspberry
/lib/firmware/brcm/brcmfmac43455-sdio.Raspberry Pi Foundation-Raspberry Pi 4 Model B.txt.xz
/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt.xz
/lib/firmware/brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.txt.xz
/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt.xz
/lib/firmware/brcm/brcmfmac43455-sdio.Raspberry Pi Foundation-Raspberry Pi Compute Module 4.txt.xz
/lib/firmware/brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.txt.xz
/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,3-model-a-plus.txt.xz
本来であれば、linux-firmware パッケージが更新されて dnf update
するだけで Pi 400 対応になってくれると良いのですが、今回は別のところからファームウェアを持ってくることにします。
こちらのbrcm-supprementalリポジトリにあるファイルの中から、以下の3つのファイルを持ってきて /lib/firmware/brcm
の下にコピーしてやります。他のファイルはxzで圧縮されていますが、圧縮しなくてもOKです。
- brcmfmac43456-sdio.raspberrypi,400.bin
- brcmfmac43456-sdio.raspberrypi,400.clm_blob
- brcmfmac43456-sdio.raspberrypi,400.txt
コピーしたら再起動します。
Wi-Fiが使えるようになった
再起動すると、Wi-Fiが使えるようになっています。nmcliのWIFI-HW
がmissingではなくなっていますし、dmesgをgrepした結果にもファームウェアの読み込みエラーが出なくなっています。
$ nmcli radio
WIFI-HW WIFI WWAN-HW WWAN
enabled enabled missing enabled
$ dmesg | grep brcmfmac
[ 8.911175] brcmfmac: F1 signature read @0x18000000=0x15294345
[ 8.963376] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43456-sdio for chip BCM4345/9
[ 9.065806] usbcore: registered new interface driver brcmfmac
[ 9.226089] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43456-sdio for chip BCM4345/9
[ 9.256216] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/9 wl0: May 14 2020 17:26:08 version 7.84.17.1 (r871554) FWID 01-3d9e1d87
[ 13.425989] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
[ 13.986762] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
[ 17.410402] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
この状態で、nmcli device wifi list
とコマンドを実行すると、周囲のWi-Fi SSIDが表示されます。
接続するには nmcli device wifi connect [SSID] password [パスワード]
というコマンドを実行します。
まとめ
AlmaLinux 9でRaspberry Pi 400のWi-Fiが使用できないのは、Pi 4と使用しているハードウェアが微妙に異なり、標準パッケージにファームウェアが含まれていないためです。ファームウェアを特定のディレクトリに置くと、Wi-Fiが使えるようになります。
いずれはlinux-firmwareパッケージが更新されて標準で使えるようになるといいのですが、これを書いている時点では上記の方法でファームウェアを追加してやる必要があります。