たまたま転がり込んで来たOnion Omegaを今更ながらFreeBSDで使えるようにしてみました。OmegaはmipsなAtherosのわりと新しめのAR9330というSOCを使っていて、RAM 64M/Flash 16Mなので私のターゲットの中では結構リッチな方です。世の中的にはOmega2が使われ初めていて、一周遅れで自分らしいなと妙に納得したりしています。
AR9330はAR9331と同じものでAP121と呼ばれているものではないかと思われます。
私はオペレーションはMacなので、ドーターボードについているUART USBデバイス変換のSiLabsのチップのドライバつかってシリアルコンソールにアクセスします。
こちらにfreebsd-wifi-buildでのビルド方法があるので、これを参考にZRouterでビルドできるようにしてみました。
上記のビルドスクリプトをみると、TP Linkタイプのイメージを作成する必要がありmktplinkfwコマンドを利用しているようです。このイメージはU-Bootといいつつ別のものになってしまっているようです。ZRouterにもmktplinkfwコマンドは入っていたのですが、古いもののようなので、freebsd-wifi-buildからソースをコピーしてビルドできるようにしてみました。
mktplinkfwはshare/mk/converters/ではなくMakefileに直接書いてあったので、調整してとりあえずビルドできるようにはなったのですがlzma errorが起きて起動できません。いろいろ試して再起動した後にはerrorが起きないようなので、試す時は常に再起動するようにしました。
ところがOKが出るのですが、そこから進みません。よくよく調べてみるとAR933xは他のAR7/9系とは別のuartのコードが用意されていて、これを使う必要がありました。AtherosのSOCで100のSwitchを内蔵しているチップはAR724x -> AR933x -> AR934xとなっていますが、なぜAR933xだけ別物になってしまったのでしょうか。。。
最初のログが出るまでのデバッグはなにも見えない中でCPUがどうなっているか想像してのデバッグで、無の世界で禅の修行している気分になります。
これでやっとブートログが出ました。ちょっと前にAR9340もいじっていたので、簡単にできるかと思ったら、一日近くかかってしまいました。
実際イメージを焼くには上のページの処理にeraseを実行する必要もありました。
後はhintsをsys/mips/confを参考に調整してみました。
このSOCではEthernetインターフェースのargeは二つありますが0がSwitchのPHY4に接続されていて外に出ています。
USBも正常に認識されています。
GPIOも沢山あるのでBitbangでI2CやSPIも使えます。
~~objcopyがbinutilからelftoolchainに変わってから、おかしくなっているので、古いバイナリを発掘して使っています。~~2018/01に直りました。
もちろん技適がないのでWIFIは確認していません。:)
とりあえずmrubyを入れてイメージを作ってみました。RAMもFlash大きいので、いろいろできそうです。
カーネル起動だけ
setenv ipaddr 10.10.10.102;setenv serverip 10.10.10.3
tftpboot 0x80600000 Onion_Omega.bin
bootm
焼き直し
setenv ipaddr 10.10.10.102;setenv serverip 10.10.10.3
tftpboot 0x80020000 Onion_Omega.bin
erase 0x9f020000 0x9f7fffff
cp.b 0x80020000 0x9f020000 $filesize
u-bootの環境変数が保存できないので、毎回入力が必要でちょっと不便です。
このブートは圧縮して入っていて128Kと小さくなっています。16MのFlashが付いているのにちょっと不思議な気もします。追記:このブートはu-boot_mod由来で、このプロジェクトが小さめに作るポリシーだったようです。
とりあえず半分だけ消しています。イメージが大きくなった場合は0x9fff0000まで広げられます。