ROCK Pi Sを設定してみる (NetworkManagerでWi-Fi設定が主)

ROCK Pi S

ROCK Pi Sを購入したので、「armbianで遊ぶぞー」と思っていたのだが、armbianのサイトからダウンロードできるOSイメージは「minimal legacy kernel 4.4.y」と書かれていて、実際にダウンロードできたファイルも Armbian_21.02.1_Rockpi-s_buster_legacy_4.4.247_minimal.img (Debianの場合)だった。レガシーな4.4系しか提供されていないらしい。
しかし、どうせならメインラインである5.10系を使いたい。
そこで、何も考えずにarmbianのビルドを行ったが、ビルドそのものは成功するものの、完成したイメージをmicroSDカードに焼いたところ起動しなかった。これはフルイメージでもミニマルイメージでも同じ。確認のためにレガシーをビルドしたところ、これはフルイメージでもミニマルイメージでも正常に起動した。
どうもメインラインだと起動しないらしい。うちの環境でビルドした場合だけそうなのかと思って調べてみたら見つけた。
Rockpi S doesn't boot mainline kernel
書いてある内容から21.05で対応したって意味かな?と思ったけど、その21.05でビルドして起動しないので未完了っぽい。残念。

2021年9月13日追記:
その後、対応時期とバージョンは不明ながらメインラインも利用できるようになっています。ただし、有線LANはデフォルト無効になっててGPIOでUART接続しないと何もできないやつ。一応、 /boot/armbian_first_run.txt.template があって、編集して/boot/armbian_first_run.txtにするかリネームするかすると本来は機能する筈がそれが効かない。ダメじゃん。なお、 /boot/armbian_first_run.txt は機能はしないけど初回のシステム起動が成功すると /boot/armbian_first_run.txt は削除される。
ここは、昔ながらのやり方で /etc/network/interfaces に allow-hotplug eth0iface eth0 inet dhcp の2行を書いてやる。
ちなみに /boot/armbian_first_run.txt や /etc/network/interfaces の編集というのはarmbianのイメージを書き込んだmicroSDカードをPCのメモリカードスロット(PCになければUSBメモリカードアダプタ)でPCに接続してマウントして編集。WindowsでArmbianをマウントやファイル編集できるかは不明。Linuxでやる場合はマウントは良いとしてファイル編集は管理者権限が要る。LinuxのCLIでファイル操作する場合はUbuntu系だと /media/ログイン中のユーザー名/hogehoge/etc/network/interfaces のようなPathになると思われる。間違って操作中のPCの /etc/network/interfaces を編集しないようご注意ください。
で、編集したらアンマウントしてからROCK Pi Sに挿してROCK Pi Sを起動する。
DHCPサーバの要るネットワークでROCK Pi Sを起動すると有線LANが生きるので arp -a などで生えたIPアドレスを調べてRock Pi Sにssh接続する。
ssh root@生えたIPアドレス で接続し、パスワードが 1234 (armbainの初回ログインはこれ)
で、ログインして管理者パスワードの変更と最初のユーザー作成が終わったら、そこで改めてネットワークの設定を行ってください。普通のDHCPクライアントで良いということならそのままでも可。

RockPi SでArmbianのメインライン系のBuster(debian系)イメージをArmbianのサイトからダウンロードして使用する場合、無線LANインターフェイスのwlan0が無くて使えないというのを体験しました。2021年9月上旬にArmbian.comで提供されていたArmbian Buster edge 5.13.12ミニマルイメージを使うとそうなりました。
cfg80211カーネルモジュールが正常でない?。これはapt (apt updateとapt upgrade) でシステムを最新状態に更新すると直りました。5.13.12から5.14.2に更新されたら正常になりました。つまり有線LAN環境でシステム更新が必要です。まぁ日本ではRockPi Sで無線LANを使わない(使えない)のでどうでも良い話ですが。

ネットワーク

Armbianのレガシーイメージの場合、有線LANは特に何もせずにLANケーブルで繋げばIPv6はSLAACで、IPv4はDHCPで自動的につながる。NetworkManagerがデフォルトなのでそれ用の設定を必要に応じて追加で。(有線LANについてはこれだけ)

以下、無線LANについて。ただし、この記事は「ROCK Pi Sを設定」と題しておきながらROCK Pi Sでは確認していないのでスミマセン

$ dmesg
中略
[   10.645051] [WLAN_RFKILL]: get_wifi_addr_vendor: rk_vendor_read wifi mac address failed (-1)
後略

MACアドレスが読み取れないという警告。元々固定されたユニークなMACアドレスが無いタイプかしら?(次へ)

任意のMACアドレスをarmbianEnv.txtで指定する。

/boot/armbianEnv.txt (1行追加 既存のextraargs行があればその次の行にでも)
extraargs=rtl8723ds.rtw_initmac="00:00:00:00:00:00"

rtl8723dsの部分はモジュール名で変わることがある。lsmodでモジュール名を確認。8723dsって表示されてたら extraargs=8723ds.rtw_initmac="00:00:00:00:00:00" みたいな。
もちろん、MACアドレスは00:00:00:00:00:00ではなく何か適切なのを。
適切がわからなければ、例えばそのときのMACアドレスを ip addr などで調べてwlan0のether値を拝借するとか。

これで、次回以降は起動時にMACアドレスが固定で付くので先のエラーは出なくなる。

/etc/NetworkManager/conf.d/10-disable-wifi-random-mac-address.conf (新規)
[connection]
wifi.mac-address-randomization=0

[device]
wifi.scan-rand-mac-address=no

既に同内容のファイルがあるなら不要

一部のボードではWi-Fiの設定(接続プロファイルの作成)をarmbian-configで行うと、そのときはWi-Fiに接続できるがシステムを再起動すると接続されない状態になってしまう筈。設定が足りないなどのバグだと思うのでそのうちに修正されるかもだけど。(armbian-configで接続プロファイルを作る場合も何か特別なことをするわけではなく以下で行うのと同じ設定ファイルを出力する)
とりあえず、armbian-configは信用しないので使わずにWi-Fiの接続プロファイルを作成する。

$ sudo nmcli device wifi connect AP-SSID password AP-PSK

AP-SSIDの部分を自宅のWi-FiルーターなどのSSIDと置換する。
AP-PSKの部分を自宅のWi-Fiルーターなどの所謂パスワードと置換する。

この nmcli device wifi connect・・ を使った「接続設定」は /etc/NetworkManager/system-connections 下の 接続先APのSSID +.nmconnection という名前のファイルに書き込まれる。

Wi-Fiの設定を/etc/network/interfacesに書くというのはやらない。これで設定を作るとnmcliコマンドで「接続」に対する設定ができないから。

登録した接続プロファイルでAPに手動で接続する場合
$ sudo nmcli connection up 接続先APのSSID
切断する場合は up の代わりに down。
登録したAPの接続プロファイルを削除する場合。
$ sudo nmcli connection delete id 削除するAPのSSID

Wi-Fiは、省電力モードが有効になっていると結構ウザい。Wi-Fiの省電力モードは無効化する。

$ nmcli -p connection show 接続先APのSSID
中略
802-11-wireless.powersave:              0 (default)
後略

上の例のように0であるなどとにかく2以外の値であったら省電力モードが有効である可能性が高い。
0は、デフォルト値ということだが、実際は何かわからない。
1は、無視ということだが意味不明。
2は、省電力モードがオフ。
3は、省電力モードがオン。

次のように変更する。
$ sudo nmcli connection modify 接続先APのSSID 802-11-wireless.powersave 2
$ nmcli -p connection show 接続先APのSSID
中略
802-11-wireless.powersave:              2 (disable)
後略
こうなればOK。
この nmcli connection modify を使った設定変更は /etc/NetworkManager/system-connections 下の 接続先APのSSID +.nmconnection という名前のファイルに書き込まれる。

例えば、armbianの一部のボードでは?先のAPの登録方法だと通信に使用するネットワークインターフェースがwlan0ではなくp2p0にWi-Fi接続ができることがある。どちらが良いのかは知らないがwlan0にしたいなど使用するインターフェースを変更する場合。

$ sudo nmcli connection modify 接続先APのSSID connection.interface-name wlan0
上の例ではwlan0というのが変更後に使用されるインターフェース名。

AP側の2.4GHzと5GHzでSSIDが違うなら利用したい方のSSIDに接続すれば良いが、2.4GHzと5GHzで同じSSIDになっている場合、上記のやり方だけだと使って欲しくない方が使われてたりトラブルの元かも。そこで使って欲しい周波数帯を指定。または利用するチャンネルを指定。両方指定する場合は矛盾がないように。

$ sudo nmcli connection modify 接続先APのSSID 802-11-wireless.band a #5GHz帯を使いたい場合
$ sudo nmcli connection modify 接続先APのSSID 802-11-wireless.band bg #2.4GHz帯を使いたい場合
または
$ sudo nmcli connection modify 接続先APのSSID 802-11-wireless.channel チャンネル番号

ここまではDHCPの場合。
IPアドレスを固定というかマニュアルで設定したいこともある。IPアドレスの指定メソッドをマニュアルにし、IPアドレスとサブネットマスクを指定する。

$ sudo nmcli connection modify 接続先APのSSID ipv4.method manual ipv4.addresses 192.168.0.10/24

ここでは設定するインターフェイス(Wi-FiならSSID)のIPアドレスを192.168.0.10、サブネットマスクを/24 (255.255.255.0)とする。

DHCPならゲートウエイとネームサーバも自動設定だが、マニュアルではこれらも指定しなければならない。

$ sudo nmcli connection modify 接続先APのSSID ipv4.gateway 192.168.0.1  #デフォルトゲートウェイ
$ sudo nmcli connection modify 接続先APのSSID ipv4.dns  192.168.0.1   #ネームサーバ1つめ
$ sudo nmcli connection modify 接続先APのSSID +ipv4.dns 8.8.8.8    #ネームサーバ2つめ (追加)
$ sudo nmcli connection modify 接続先APのSSID +ipv4.dns 8.8.4.4    #ネームサーバ3つめ (追加)

#上の3つのネームサーバをまとめて指定するなら⬇のようにする
$ nmcli connection modify 接続先APのSSID ipv4.dns 192.168.0.1 +ipv4.dns 8.8.8.8 +ipv4.dns 8.8.4.4

この例ではゲートウェイのIPアドレスを192.168.0.1とする。ネームサーバは192.168.0.1と追加でGoogleのDNS 8.8.8.8と8.8.4.4を指定する。

nmcliコマンドで設定すると即時反映で設定もファイルに書き出されるので次回以降も指定した内容が使われる。ラクだけど何か気に入らない。

一部のSBCではWi-FiインターフェイスのMACアドレスが固定でないらしい。MACアドレスが変わると上の設定だけではWi-Fi接続に失敗する。MACアドレスが変わるため、設定に書き込まれているMACアドレスのインターフェイスが無くで失敗するみたい。

$ sudo nmcli connection modify 接続先APのSSID 802-11-wireless.cloned-mac-address AA:BB:CC:DD:EE:FF     AA:BB:CC:DD:EE:FFの部分を(以後使い続ける)好みのMACアドレスにする

$ sudo nmcli connection modify 接続先APのSSID -802-11-wireless.mac-address ""     元のMACアドレスを無効化

ついでに、指定のWi-Fi APとの通信の接続開始と接続終了

$ sudo nmcli connection up 接続先APのSSID      設定済みのAPへの接続を開始

$ sudo nmcli connection down 接続先APのSSID     設定済み且つ接続中のAPとの通信を終了

システム起動時など自動的にWi-Fi APとの接続を開始することをしっかり指定する。この指定をしなくても自動接続してくれるかもだけど、アヤフヤじゃなくて自動接続して欲しいということを指示。

$ sudo nmcli connection modify 接続先APのSSID connection.autoconnect yes     自動接続オンを指示

逆に自動接続させたくない場合は最後の yes を no に変える。

ROCK Pi Sを買ってみた

ROCK Pi S

昨年末頃に、ADS-B受信用に使っていたOrange Pi Zero Plusが停止(死亡?)したため新しくOrangePi Zero 2を購入したのだが、これがどうもよろしくない。OSとして利用するつもりだったarmbianはまだ使い物にならない段階でしかもあまり開発が活発ではない。orangepi.orgで提供されているOSは2020年11月から更新がなく、USBの挙動がなんかヘン。そして安定稼働しない。温度が上がったわけでもメモリやストレージを使い果たしたわけでもないのだが暫く動かしてるとハングアップする。そんな感じ。長期稼働を目的としてるのに信用できない。
そこでOrangePi Zero 2とは別のSBCを購入することに。今度はROCK Pi S。理由は安いから。もちろんスペックは低い。こちらはarmbianで「サポート」のステータスなのでOSが使い物にならないということはない(筈)。

2021年5月2日追記: Orange Pi Zero 2でUSBがおかしかったのは接続したUSBデバイスのせいだったみたい。

Rock Pi S 1
ROCK Pi Sについてはこちら。ROCK Pi Sはバリアントが多く、メモリ容量、Wi-Fi/Bluetoothの有り無しの他にPoEの有無、SLC NANDの有無とNANDの容量の違いがある。NANDはSLCということになっている。これは「なんちゃってSLC」かもしれないが不明。
今回の購入はALLNET Chinaから。ROCK Pi S本体はSLC NANDは無しで512MBメモリ+Wi-Fi/Bluetoothのものを選択。これがUS$13.99。専用金属ケースUS$4.99。送料がUS$7.30。安いようでこれだけで3,000円弱なので安くはない印象。China Postの普通便にしては送料が高すぎ。
注文から出荷までは早かった。しかし、深圳から出荷され同じ深圳にある国際交換局に届くまで複数の仕分けセンターを行ったり来たりを2週間。待ちくたびれた頃にようやく深圳の国際交換局に届いたかと思ったらその日の夜には日本に到着。翌朝に通関。通関が日曜だったのでその日の配達はなかったが翌日(今日)配達された。普通は国際交換局に届いてから飛行機に乗るまでが長いので珍しいかなと。仮に、集荷の翌日に国際交換局に行ってたら3泊4日、夜中通関で当日配送だったら2泊3日もありえたかもなので深圳内の無駄な2週間が残念。
で、あっちこっちで仕分けをくぐり抜けた割には潰れもなく無事到着。
上の画像は、左の白いのが届いたパッケージ。右は大きさ比較用のDVD(実際はBD-R)

Rock Pi S 2
白いビニールの中はダンボールで、緩衝材として白い繭のような発泡材が申し訳程度に入っている。スカスカなので潰れなかったのが奇跡。

Rock Pi S 3
ROCK Pi Sの基板本体は樹脂ケースに入っていた。NanoPiやOrangePiは袋だったので「やるなぁ」という感じ。右はROCK Pi S用のケース。

Rock Pi S 4
それぞれ開けてみた。右のケースの方は中にネジなどが入っていた。

Rock Pi S 5
ROCK Pi Sのチップの文字が浮かび上がるように斜めから撮ってみた。
一番大きなチップがSoCでRockchip RK3308。その下のチップがXi'an UniIC Semiconductorsのメモリ。このメモリは変わることがあるみたい。
SoCの左下方向にType-CのUSBポートがあって指紋の一部のようなものが写っているが、これは「がとらぼ」の中の人が触ったのではなく最初から。梱包した人は素手なのかしら?汚いし気持ち悪いのでやめていただきたいところ。

Rock Pi S 6
ケースの内側に基板を置いて四隅をネジ止め。今回はハット類は買ってないのでスペーサーは使わない。黒いネジは7本入ってたけどどういうことかしら?
このケースは全体的に粉体塗装っぽいザラザラ仕上げになっているが、内側のLANコネクタ近くはハケで塗ったみたいにテカってる。

Rock Pi S 7
RK3308はあまり熱が出ない?冷却は一切考慮されていないようで、ヒートシンクは付属しないしオプションも用意されていない。そもそも、ケース内部に空気を流すことも想定されていない造りなのでヒートシンクや冷却ファンを付けても熱をケース外に逃す方法が無い。それでも何も無しはいくらなんでもあんまりですと思ったので大きさがSoCとほぼ同じなヒートシンクを熱伝導テープで貼り付けた。(たぶん意味はない)
IPX-SMAケーブルは付属しないが、余ったのがあったので取り付けた。ケース側にはアンテナ用の穴が開いているのでそこに端子を取り付けた。

Rock Pi S 8
例によってSMA端子にはダミーロードを取り付ける。

Rock Pi S 9
RJ45とUSB Type-Aの端子がある側。端子のツラはぴったり。さすが専用ケース。

Rock Pi S 10
ダミーロードの代わりに2.4GHzのWi-Fi用を取り付けてみた。(使わないけど)
ALLNET Chinaでは2.4GHzと5.8GHz(中国のWi-Fi)のハイブリッド外付けアンテナとIPX-SMAケーブルのセットがUS$3.99で販売されている。IPX-SMAが意外と高いのでこの価格は妥当かと思う。ROCK Pi Sのケースの写真はWi-Fiアンテナが写っているので付属していると勘違いするかもなので注意。「ケース」という商品はあくまでケースだけでWi-Fiアンテナは付属しない。

Rock Pi S 11
OS入りのmicroSDカードを挿してLANと電源用USB Type-Cのケーブルを接続すると起動する。写真では判らないかもだけど青いLEDがどぎつく眩しい。このLEDはちょっと勘弁して欲しいかな。上の画像ではMIC ARRAYと書かれた上の穴から青いのが見えているが、何かのハットが付いていたらここからは光がモレないかも。本来は中央のWi-Fiアンテナ端子用(の穴)の下にある「ACT」の小さい丸穴が青LED用の穴みたい。その左隣に電源のインジケータとして「PWR」の丸穴があってそちらは緑のLEDだがそれは全然目立たない。光もキツくない。上の画像でもACTの左下にPWRの丸穴が写っているが、緑がかき消されて青く光ってるように見えている。(正面からだと緑に見える)

ROCK Pi SでUNIX BENCH

$ cpufreq-info -s
408000:45826, 600000:363, 816000:35, 1008000:158, 1200000:70, 1296000:6563  (144)
$ ./Run -c 1 -c 4

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: rockpi-s: GNU/Linux
   OS: GNU/Linux -- 4.4.247-rockpis -- #11 SMP PREEMPT Sun Feb 14 22:51:47 CET 2021
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   15:00:39 up 9 min,  1 user,  load average: 0.22, 0.11, 0.08; runlevel 5

------------------------------------------------------------------------
Benchmark Run: Mon Mar 08 2021 15:00:39 - 15:28:42
0 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        5065729.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1311.5 MWIPS (9.7 s, 7 samples)
Execl Throughput                                684.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        141067.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           41527.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        325098.1 KBps  (30.0 s, 2 samples)
Pipe Throughput                              396605.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  49805.8 lps   (10.0 s, 7 samples)
Process Creation                               1946.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1330.8 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    449.7 lpm   (60.1 s, 2 samples)
System Call Overhead                         636397.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    5065729.5    434.1
Double-Precision Whetstone                       55.0       1311.5    238.5
Execl Throughput                                 43.0        684.0    159.1
File Copy 1024 bufsize 2000 maxblocks          3960.0     141067.4    356.2
File Copy 256 bufsize 500 maxblocks            1655.0      41527.0    250.9
File Copy 4096 bufsize 8000 maxblocks          5800.0     325098.1    560.5
Pipe Throughput                               12440.0     396605.3    318.8
Pipe-based Context Switching                   4000.0      49805.8    124.5
Process Creation                                126.0       1946.3    154.5
Shell Scripts (1 concurrent)                     42.4       1330.8    313.9
Shell Scripts (8 concurrent)                      6.0        449.7    749.5
System Call Overhead                          15000.0     636397.3    424.3
                                                                   ========
System Benchmarks Index Score                                         298.7

------------------------------------------------------------------------
Benchmark Run: Mon Mar 08 2021 15:28:42 - 15:56:55
0 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       20245021.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5247.3 MWIPS (9.7 s, 7 samples)
Execl Throughput                               2028.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        225129.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           61434.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        592134.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1560579.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 229681.6 lps   (10.0 s, 7 samples)
Process Creation                               4016.2 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3672.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    496.8 lpm   (60.3 s, 2 samples)
System Call Overhead                        2458935.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   20245021.9   1734.8
Double-Precision Whetstone                       55.0       5247.3    954.1
Execl Throughput                                 43.0       2028.7    471.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     225129.0    568.5
File Copy 256 bufsize 500 maxblocks            1655.0      61434.0    371.2
File Copy 4096 bufsize 8000 maxblocks          5800.0     592134.7   1020.9
Pipe Throughput                               12440.0    1560579.4   1254.5
Pipe-based Context Switching                   4000.0     229681.6    574.2
Process Creation                                126.0       4016.2    318.7
Shell Scripts (1 concurrent)                     42.4       3672.6    866.2
Shell Scripts (8 concurrent)                      6.0        496.8    828.1
System Call Overhead                          15000.0    2458935.9   1639.3
                                                                   ========
System Benchmarks Index Score                                         772.9

$ cpufreq-info -s
408000:70067, 600000:1689, 816000:35, 1008000:158, 1200000:70, 1296000:325078  (580)

使っているOSはArmbian 21.02.2 Buster with Linux 4.4.247-rockpisというもの。
今回はClass2のクソ遅いmicroSDカードを使っているのでファイルコピーなどの性能が低く計測されている可能性があるので念の為。
1.3GHzが最高クロックの状態で測定してシングル・4パラレルの両方でRockchip RK3328のNanoPi NEO3 (1.3GHz)のおよそ90%というインデックススコア。意外と良い値。これで温度が上がらないならRK3308は良いチップかも。

Up