BC-11AH-A (ASKEY社製モジュール搭載 Raspberry Pi 802.11ah HAT)の使用手順

Posted by: otsuka

Newracom社製の 11ah chip NRC7394 を実装しているASKEY社製モジュールを搭載した
Raspberry Pi 用の 11ah HAT(拡張モジュール) BC-11AH-A を発売しました。

この HAT を装着した Raspberry Pi の使用するためのソフトウェア設定の手順を紹介します。


基本的には chip vendor である Newracom の用意した
NRC7394 Software Package for Host mode (Linux OS)
を利用する必要があります。

上記ページ上では Newracom の開発ボードである nrc7394 EVK 向けのみの対応と注意書きがありますが、
BeatCraft 製の Raspberry Pi 802.11ah HAT で正常に動作することを確認しています。

設定は NRC7394 Evaluation Kit user Guide (Raspberry Pi setup) に従って以下の順序で行います。

  1. Raspberry Pi4 起動用 microSD カードの作成
  2. Raspberry Pi OS の設定
  3. NRC7394 Software Pacakge のインストールと設定

NRC7394 Software Pacakge (以後 nrc7394_sw_pkg と呼びます)は
Raspberry Pi4 での動作を前提にしていますが、
Raspberry Pi3 でも全く問題なく動作します。
以下の内容は Raspberry pi4 向けに設定する手順を記述しています。
Raspberry Pi3 向けに設定する場合は機種に関する該当箇所を適宜 Raspberry Pi3 向けに読み替えてください。

BC-11AH-A のハードウェア設定に関しては、BC-11AH-A_users_manual.pdf を参照してください。
以下の手順に従って BC-11AH-A を使用する場合、モード切り替えスイッチは ROM に設定して使用します。


1. Raspberry Pi4 起動用 microSD カードの作成

Raspberry Pi Imager を使用するか、
または Raspberry Pi 公式ページから OS image のダウンロード後 dd コマンドにより
Raspberry Pi4 起動用 microSD カードを作成します。
OS image は 32bit 版の Raspberry Pi OS (Legacy) の Desktop を使用します。

2024年11月現在での legacy イメージ (Debian11 bullseye ベース)を使用する理由は、
nrc7394_sw_pkg の動作が dhcpcd でのネットワーク管理を前提にしており
dhcpcd でネットワークが管理されているのは bullseye までだからです。

Debian12 bookworm ベースの最新のイメージからは
ネットワークの設定が NetworkManager で行われるよう変更されているため
そのままでは動作させることができません。
(32bit 版の GUI なし lite イメージに dhcpcd や iptables をインストールして追加の設定をすれば
最新のイメージでも動作することは確認しています。)

2. Raspberry Pi OS の設定

1 の手順で作成した起動用 microSD カードで Raspberry Pi4 を起動したら以下の設定を行います。

2.1. 32bit kernel の有効化
Raspberry Pi4 向けの Raspberry Pi OS は 6.1.* kernel 以降 32bit 版でも 64bit kernel が使われるようになりました。
https://github.com/raspberrypi/firmware/commit/379d5bfa60bf3b0afff413a18344aaaf3bde0083
このまま使用すると後の手順でビルドする NRC7394 host driver は
32bit ユーザーランド上でビルドされるため 32bit 版 modules になり
64bit kernel には load できないので
/boo/config.txt に arm_64bit=0 を記述して再起動し 32bit kernel が使われるようにします。
(Raspberry Pi3 では最初から 32bit kernel で起動するのでこの手順は不要です。)

2.2. SSH、SPI、Serial Port の有効化
raspi-config を使って ssh、spi、serial port を有効にします。
serial port は login shell としての使用は no で無効のままにし hardware interface のみ yes で有効にします。

2.3. 追加 package のインストール
最初に今後の Raspberry Pi OS の設定や使用に便利なアプリケーションをインストールしておきます。
インストールするアプリケーションは好みに応じて選択・調整してください。
pi@raspberrypi:~ $ sudo apt install vim lv tree screen
次に NRC7394 host driver をビルドするのに必要な kernel header をインストールします。
pi@raspberrypi:~ $ sudo apt install raspberrypi-kernel-headers
さらに、11ah でのスループット計測用に iperf をインストールします。
pi@raspberrypi:~ $ sudo apt install iperf iperf3

2.4. RasPi on board の Broadcom Wifi と Blutooth の無効化
既存の電波帯域と 11ah との干渉を避けて 11ah インタフェースのみを有効にするため、
Device Tree Overlay に用意されている Broadcom の Wifi と Blutooth の無効化設定を使って無効化します。
/boot/config.txt に末尾に以下の記述を追加して再起動します。
dtoverlay=disable-bt
dtoverlay=disable-wifi
また、Broadcom Wifi と Blutooth の driver が読み込まれないよう、
/etc/modprobe.d/raspi-blacklist.conf に以下の記述を追加します。
blacklist brcmfmac
blacklist brcmutil
11ah といっしょに on board の Wifi と Blutooth も使用したい場合は、
一旦これらの設定を行って 11ah の正常動作が確認できたら
/boot/config.txt と /etc/modprobe.d/raspi-blacklist.conf からこれらの記述を削除して
Wifi と Bluetooth に必要な設定を適宜行ってください。

2.5. Newracom Wifi に必要な package のインストールと設定
11ah インタフェースを AP (Access Point) として使用する際に必要なパッケージをインストールします。
pi@raspberrypi:~ $ sudo apt install hostapd dnsmasq
11ahインタフェースを STA (Station) として使用する際に誤って使われないよう、
Raspberry Pi OS の wpa_supplicant パッケージの設定ファイルをリネームしておきます。
pi@raspberrypi:~ $ cd /etc/wpa_supplicant/
pi@raspberrypi:~ $ sudo mv wpa_supplicant.conf wpa_supplicant.conf.unused

2.6. mac80211 driver の load
NRC7394 host driver が依存する mac80211 driver が OS の起動時に自動で読み込まれるよう設定します。
/etc/modules に default では i2c-dev のみが記述されているので、mac80211 を加え以下の内容になるようにします。
i2c-dev
mac80211

3. NRC7394 Software Pacakge のインストールと設定

Raspberry Pi OS に行っておく設定が完了したら NRC7394_SW_PKG のインストールを行います。
Newracom の github の nrc7394_sw_pkg のリリースページ https://github.com/newracom/nrc7394_sw_pkg/releases/tag/v1.2.1 から
nrc7394_sw_pkg-1.2.1.tar.gz をダウンロードし展開しておきます。
pi@raspberrypi:~ $ curl -LOJ https://github.com/newracom/nrc7394_sw_pkg/archive/refs/tags/v1.2.1.tar.gz
pi@raspberrypi:~ $ tar xvf nrc7394_sw_pkg-1.2.1.tar.gz

3.1. dts による User mode SPI device driver の無効化
NRC7394 モジュールは SPI Master 0 で Raspberry Pi と接続されていますが、
User mode SPI device driver が load されていると chip-select ピンが busy になり
NRC7394 host driver を load することができません。
そこで、Blutooth や Wifi と同様に Device Tree Blob Overlay の仕組みを使って
User mode SPI device driver を無効にします。
まずそのために用意された dts をビルドして dtbo にし、/boot/overlay/ に配置します。
pi@raspberrypi:~ $ cd nrc7394_sw_pkg-1.2.1/dts/
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/dts $ dtc -I dts -O dtb -o newracom.dtbo newracom_for_5.16_or_later.dts
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/dts $ sudo cp newracom.dtbo /boot/overlays/
起動時にこの Device Tree Blob Overlay が読み込まれるよう /boot/config.txt に以下の記述を追加し、再起動します。
dtoverlay=newracom
以下のように spidev0.0 が無くなりspidev0.1 だけになっていたら OK です。
pi@raspberrypi:~ $ ls -l /dev/spidev*
crw-rw---- 1 root spi 153, 0 Nov 6 /dev/spi0.1

3.2. nrc7394_sw_pkg のインストール
update.sh を実行し、/home/pi/ に nrc_pkg をインストールします。
pi@raspberrypi:~ $ cd nrc7394_sw_pkg-1.2.1/package/evk/sw_pkg/
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/evk/sw_pkg $ ./update.sh
Copy new package
apply nrc_pkg
Change mode
Done

3.3. NRC7394 host driver と cli_app の更新
インストールされた nrc_pkg 内の NRC7394 host driver は
現在起動している kernel より古い kernel 向けにビルドされているので
src から再度ビルドし直して配置します。
pi@raspberrypi:~ $ cd nrc7394_sw_pkg-1.2.1/package/src/nrc
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/src/nrc $ make clean
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/src/nrc $ make

make[1]: Entering directory '/usr/src/linux-headers-6.1.21-v7l+'
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-mac80211.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-trx.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-init.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-debug.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/hif.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/wim.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-fw.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-netlink.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-hif-cspi.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/mac80211-ext.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-stats.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-pm.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-dump.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-bd.o
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc-s1g.o
  LD [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc.o
  MODPOST /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/Module.symvers
  CC [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc.mod.o
  LD [M]  /home/pi/nrc7394_sw_pkg-1.2.1/package/src/nrc/nrc.ko
make[1]: Leaving directory '/usr/src/linux-headers-6.1.21-v7l+'
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/src/nrc $ cp nrc.ko /home/pi/nrc_pkg/sw/driver/
また、NRC7394 host driver を操作する cli_app バイナリも src からビルドして更新します。
pi@raspberrypi:~ $ cd nrc7394_sw_pkg-1.2.1/package/src/cli_app/
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/src/cli_app $ make
libcli_app.a
cli_app
pi@raspberrypi:~/nrc7394_sw_pkg-1.2.1/package/src/cli_app $ cp cli_app /home/pi/nrc_pkg/script/

3.4. NewraPeek のインストール
Sniffer mode の際に使用する packet キャプチャーソフト NewraPeek をインストールします。
NewraPeek は Wireshark を 11ah 対応にしたものです。
詳細や使用方法はUG-7394-011-NewraPeek.pdfで確認してください。
pi@raspberrypi:~ $ cd nrc_pkg/script/sniffer/Wireshark_4.0.5/
このディレクトリにある README.txt のインストール手順に従います。
まず Raspberry Pi OS 11 (bullseye) の Wireshark 3.4.16 の関連パッケージをインストールします。
pi@raspberrypi:~/nrc_pkg/script/sniffer/Wireshark_4.0.5 $ sudo apt install -y wireshark lxqt-sudo omniidl libpcap0.8-dev python3-ply libsnacc0c2 snacc libminizip1
NewraPeek は deb パッケージのバイナリで提供されていますので、deb ディレクトリに移動し
ディレクトリ内にある Wireshark-4.0.5 11ah 対応改変版 deb パッケージで
default の Wireshark 3.4.16 を上書きします。
pi@raspberrypi:~/nrc_pkg/script/sniffer/Wireshark_4.0.5 $ cd deb/
pi@raspberrypi:~/nrc_pkg/script/sniffer/Wireshark_4.0.5/deb $ sudo dpkg -i lib*.deb
pi@raspberrypi:~/nrc_pkg/script/sniffer/Wireshark_4.0.5/deb $ sudo dpkg -i wireshark*.deb
pi@raspberrypi:~/nrc_pkg/script/sniffer/Wireshark_4.0.5/deb $ sudo dpkg -i tshark*.deb


これで全てのパッケージのインストールと設定が完了し、
BC-11AH-A が使用できる状態になりました。
11ah インタフェースの操作は
/home/pi/nrc_pkg/script/ にある start.py、stop.py などのスクリプトと
/home/pi/nrc_pkg/script/conf ディレクトリ内にある設定ファイルで行っていくことになります。
実際の操作の詳細は
UG-7394-001-EVK User Guide (Host Mode).pdf
で確認してください。