OrangePi ZeroでBuildrootを使う
AliexpressでOrangePi Zeroというものを買った。 値段は送料込みで10ドルぐらい。
名前の通り、RaspberryPi ZeroやZeroWの競合にあたると思われる製品で、 RaspberryPi ZeroWと比べると、HDMIとカメラコネクが無いかわりに、 RJ45の有線LANがついてる。
PCとして利用するのを目的としたオリジナルのRaspberryPiと違い、 このフォームファクタの物は、他の機器の中に組み込んでアレコレすると思うので、 HDMIは余計だと思うので、この選択は正しいと思う。
値段的に半額な上に、 ほとんど入手不可能(2017年05月時点)なRaspberryPi Zeroと違い、 潤沢に在庫があるのが良い。
これを何に使おうかと買ってから考えた結果、 Webラジオクライアントにしてみる事にした。
電源を入れると、適当なWebラジオに接続しに行き、勝手に再生がはじまるというもの。
これを実現するなら、なるべく起動が早い方がいいだろう、という事で、 Buildrootを使って環境を構築する事にした。
1つ先に注意しておくと、OrangePiZeroの内蔵サウンドデバイスを動かす事には成功していない。 Linuxカーネルソースの変更履歴を見ると、 OrangePiZeroのSOCであるH2+のサウンドデバイスは絶賛開発中のようだ。
Buildrootの準備
buildroot自体でもOrangePiファミリーはサポートしてるんだけど、 OrangePi Zero自体はまだ入ってないみたい。
Wifiが使いたいのだが、最新リリースでは使えない。
探した所、Buildrootへのパッチを発見した。 見た所、OrangePi ZeroのWifiと有線LANポートのドライバを入れてくれるパッチらしい、 これを使う事にした。
OrangePi Zeroの準備
RaspberryPi Zeroと違って、画面がないので、シリアルデバッグをする事になる。
シリアルピンが準備されていて、 buildrootでビルドしたイメージは、 デフォルトでここにデバッグメッセージを出したりログインできるようになっている。
SDカードへの書き込み
ビルドしたbuildrootは、output/images/sdcard.imgにイメージを吐くので、 これをddでSDカードに書き込む。
今の自分の環境では28MB程度のイメージになっている。
なぜか、cpioイメージとext4のイメージの両方が入っているので、 本当はもう17MBぐらい減る気がする。
Buildrootのカスタマイズ
Webラジオに必要な変更を加える。
Wifi
ドライバはあっても、設定しないと繋らない。
まず、modprobeしてドライバを読んでやる必要がある。 overlayディレクトリが(パッチによって)../overlayに指定されているので、 こに、overlay/etc/init.d/S10modprobeという名前で、
というファイルを置いた。
これでドライバが読めた。
WPA経由の無線LANで接続するためには、wpa_supplicantがいる。 この設定がいろいろいる。
まず、これをコンパイルしないとはじまらない、 buildrootのmake menuconfigから、wpa_supplicantをインストール設定をする。
次に、Wifi接続のパスフレーズをファイルに書いておく、これはwpa_passphraseコマンドで生成できる。 これをoverlay/etc/wpa_supplicant.confというファイル名で置いた。
最後に/etc/network/interfacesの設定が必要だ。 これは、overlayではなくパッケージのコンパイルによって生成されるので、 board/orangepi/post-build.sh経由で生成する。 次の行を足した。
サウンドデバイスの設定
内蔵サウンドが動いてくれないので、USBサウンドアダプタを使う事にした。 たまたま手元にあったので、SoundBlaster Play!を使ってみる。
Linuxカーネルの設定で、alsaサウンド、USBサウンドを有効にする。
何故かdmixに関してのエラーがでるため、alsaの設定をした。 overlay/etc/asound.confに
と書いておいたら解決した。 また今度、alsaに関しては勉強したい。
なんかめっちゃうるさいので、 init.dの中で、amixer set PCM 5%とか書いてボリュームをしぼっておいている。
mpg123
なつかしのmpg123がWebラジオに対応していたので、これを使う事にした。 buildrootのパッケージあったので有効にするだけだった。
最後にinit.dに乱数で選択した局を再生するスクリプトをしこんで完成。
まとめ
以上の構成で電源を入れてから8秒ぐらいでラジオ再生がはじまる。
ubootの起動待ちで2秒待っていたり、乱数の初期化などの時間もかかっているので、 まだ改善の余地がありそう。
こう書くと簡単だが1週間以上試行錯誤した。 しかし、まあbuildrootに詳しくなったのでよしとしよう。