tsutsuiの作業記録置き場

NetBSDとかPC-6001とかの作業記録のうち、Twitterの140字では収まらない内容や記事としてまとめるべき内容をとりあえず置いてみる予定

Raspberry Pi Zero WH + NetBSD/evbarm で RaSCSI

Raspberry Pi + NetBSD + RaSCSI 関連エントリ

Raspberry Pi Zero + NetBSD + RaSCSI

Raspberry Pi 3 + NetBSD/evbarm で RaSCSI のエントリで Raspberry Pi 3 Model B と NetBSD/evbarm の組み合わせで RaSCSI を動かす記事を書きましたが、今度は Raspberry Pi Zero + NetBSD/evbarm + RaSCSI を試してみた、というメモです。

発端

発熱と電源の問題も気になっていたのですが、 Raspberry Pi 3B で pkgsrc のパッケージバイナリビルドをしていると RaSCSI の検証ができない、という問題もあり、せっかくだからと Amazon お急ぎ便Raspberry Pi Zero WH のセットをポチりました。

Raspberry Pi Zero と NetBSD

とりあえずポチったものの、その時点では Raspberry Pi Zero が NetBSD 8.0_RC1 で起動するのかどうかは確認できていませんでした。

なお、えびじゅんさんが作成されている -current の Raspberry Pi用イメージでは Zero での動作確認もされています。

上記の通りえびじゅんさんのイメージでは Zero W のサポートも入っているのですが、大きな違いとして -current では FDT (Flat Device Tree) の対応が Raspberry Pi にも追加されており、 Zero 用の FDT定義の .dts ファイルが必要だったりするようです。

本来は -current でテストしたほうがカーネル的にはスムーズだったかもしれませんが、今回の NetBSD + RaSCSI のテストではカーネルモジュールの関連でカーネルのバージョンをある程度固定させたかったので、あえて 8.0_RC1 でテストしています。

Raspberry Pi Zero 無印と W の違いは無線LAN関連らしいというのは聞いていて、とりあえず RaSCSI には無線LANは直接必要ないので問題ないであろうと判断していました。 W と WH の違いというのもよく把握していなかったのですが、

単に GPIO の 40ピンのピンヘッダが予めはんだ付けされているかどうかの違い、ということでした。急ぐなら WH を買っとけというところですね。

Raspberry Pi 3 vs Raspberry Pi Zero

Amazon の Raspberry Pi Zero WH セットのページ の説明にあるとおり、 Zero の CPUは ARMv6 ということなので初代 Raspberry Pi と同じということになります。同じ CPUというか同じ SoCなら基本的なデバイスはどちらも同じはずで、初代用の RPIで起動するのではないかという予想はありました。

たとえば、初代および Zero の BCM2835 と RPI2,3 の BCM2836 ではデバイスのアドレス配置が src/sys/arch/arm/broadcom/bcm2835reg.h に定義されているように異なります。これは RaSCSI の NetBSD対応時にも課題として挙がっており、現状は sysctl(3) 関数で CPU種別を見てアドレスを切り替える処理が入っています。

オリジナルの raspbian 等ではほかに何か知見がないだろうか、ということでマストドンでそれっぽくつぶやいてみたところ、

Izumi Tsutsui @tsutsuii

ラズパイ3Bで一通り動かしてみた後にラズパイ0をいじる時にハマりポイントってあるんですかね。ARMv7とARMv6の違いとか消費電流とかコネクタの違いとかはわかっているつもりだけれど

2018年5月12日 13:59
ブロマガだとマストドン トゥートの iframe 引用ができないので適当に手動引用

あっきぃさんから以下の反応をいただきました。

あっきぃ @akkiesoft

遅いってだけですかね

2018年5月12日 13:59
あっきぃ @akkiesoft

ZeroでOTGモード有効にすると、USB-Ethernetバイスに見せられるように鳴ったりしますが、その状態で3Bに持ってくとUSBとLANが使えなくてテンパる(設定をキレば使えるようになる)。

2018年5月12日 14:01

OTGモードについてググって調べてみると、とりあえず以下の Qiita の @chromabox さんのページの説明がわかりやすい感じでした。

要は、以下のような感じだと思います。

  • ラズパイ側のカーネルのドライバに細工してラズパイ側のUSBを相手側から USB-Ethernet に見せかけるようにしてデバッグをする手法
  • Zero は本体上に Ethernet が無いのでデフォルトでそういう手段が提供されている?
  • NetBSDだとそんなものはサポートしていないので cmdline.txt でパラメータを渡されるカーネル側はあまり関係ないはず?
  • config.txt の設定で start.elf がデバイスを変に設定するとハマるかもしれない?

とりあえず Linux を起動することもないので OTGに関しては明示的に変更しない限りは問題ないかな、と判断しました。

Raspberry Pi Zero の GPIO

初代 Raspberry Pi と 2以降ではGPIO のピンヘッダのピン数が違う、という話は聞いていたのですが、 Raspberry Pi Zero では GPIOピンヘッダは 2 および 3 と同じ 40ピンになっています。これも何か違いがあったりするのだろうか、と聞いてみると

だんだん引用がめんどくさくなったので 対象トゥートスレッド をスクショ貼り付け

というわけで、GPIO も (すでに対応済みのアドレスの差を除けば) 特に気を使う必要はなさそうでした。

Raspberry Pi Zero + NetBSD + RaSCSI 検証開始

土曜日の深夜というか日曜日の早朝 3:20 にポチってその日の 15時前に届く、というお急ぎ便パワーを存分なく発揮してテストを開始。

Izumi Tsutsui @tsutsuii

昨日の深夜にポチった Raspberry Pi Zero WH セット届いた。アマゾンプライム力。

2018年5月12日 14:48


Raspberry Pi 3 でテストしていた SDにも Raspberry Pi 1用の ARMv6 のカーネルは入っていたので安直にそれをそのまま起動すると、あっさり起動してきました。


エラーが出ているのは RPI3 で外付けUSBメモリを mount するようにしていた設定が残っていたためです

dmesg はこんな感じです。

とりあえずでデフォルトの RPI の GENERIC的カーネルだったため、まずカーネルモジュールロードで以下の問題が発生。

が、起動時にカーネルモジュールをロードするようにしても rascsi コマンドの起動ではエラーに。

要は、カーネルモジュールを使う使わないに関わらず、 /dev/mem 経由での GPIOレジスタ操作は必須で、結果として NetBSD で RaSCSI を使用する場合はカーネルoptions INSECURE の設定はほぼ必須、という結論でした。

RaSCSI on Raspberry Pi Zero

NetBSD的に options INSECURE の問題はあったものの、カーネルを入れ替えると Zero でも RaSCSI はあっさり動作しました。






Raspberry Pi 3 Model B での転送速度は 1.6MB/s 弱といったところでしたが、 Zero ではやや下がって 1.4MB/s 程度。ただ、速度的にはこれでも十分だと思います。

Raspberry Pi Zero での留意点

NetBSD 固有の話でもないですが、 Zeroを使う場合の留意点をメモ。

USBインターフェース

仕様としてわかっている話ですが、Ethernetは USB外付けになるので、HUBがないと Ethernetとコンソールが同時に使えません。また、後述の電源関連その他で Ethernetがトラブるとキーボードを挿し直す必要があったり、トラブった状態でUSBを抜き差しするとカーネルがパニックしたり、といろいろ面倒でした。トラブルを避けるにはセルフパワーなUSBハブをつないだほうが無難かも。

電源容量

Raspberry Pi 3 Model B は 2.1A以上の電源が要求されるのに対し、 Raspberry Pi Zero は 1.0A程度という仕様のようです。が、 RaSCSI の変換アダプタもそれなりに電流を消費するせいなのか、 Androidタブレット付属の 1500mA を謳うアダプタと適当な micro USB ケーブルの組み合わせだといろいろトラブルがありました。

上記の SD書き込み以外にも、 RaSCSI での書き込みを行うと Ethernet の通信がおかしくなるという事例があったのですが、これは完全には解消しませんでした。これが電源の問題なのかドライバの問題なのかは検証できていませんが、セルフパワーのUSBハブで動作が変わるかまた検証してみようと思います。

まとめ

Raspberry Pi Zero であっても、性能的には RaSCSI の動作に特に支障はないようです。Ethernetなしで SDカード単独で組み込むのであれば Zeroで十分 という気はします。

Ethernet を使う場合は、外付けインターフェースの関係で消費電流的メリットが相殺されてしまう可能性があること、接続する USB NICによってはドライバの安定性から検証する必要があること、キーボード(コンソール)との同時使用ができなくなることなどから、トータルで判断する必要がありそうです。