bcmbm-mruby v1.0の使い方


2019/01/23追記: v1.1リリースしました。

BCM/mips mrubyのクロスビルドしたVMバイナリーを用意したので、使い方を書きます。mrubyは2.0.0ベースです。もちろん完全非保証です。

私はFreeBSDで実行していますが、LinuxやMac OS Xでもできると思います。

ターゲットはBCM4712とBCM535xです。

まずgithubのソースツリーをリカーシブルでcloneします。

$ git clone --recursive https://github.com/yamori813/bcmbm-mruby.git

mrubyとtoolsの下でmakeしてコマンドを用意します。mrubyはhostのコマンドだけで問題ありません。

最新のリリースタグにあるmain.bin.gzのバイナリファイルをダウンロードして同じディレクトリにコピーします。解凍の必要はありません。

flashに書き込み用のイメージをビルドします。

% make image

samples/hello.rbがコンパイルされて入ります。自分で作ったスクリプトを入れたい場合は以下のようにします。

% make image RBSCRIPT=myscript.rb

main.trxというファイルが出来上がるので、これをtftpでアクセスできるディレクトリにコピーします。

ブートローダのCFEのイメージ形式のtrxはこんな感じになってます。

Headerには一つ目のkernel.gzのサイズなどが入っています。二つ目のrootfs以降はただ追加されているだけです。Linuxの場合、64Kのブロックのバウンファリーにrootfsを開始位置を合わせるのですが、mrbはメモリにコピーしてから実行するので、VMのすぐ後にあります。

ターゲットにシリアルを接続して115200ボーでターミナルソフトを起動します。

ターゲットの電源を入れるとログが出るので^CでCFEを止めます。

IPアドレスはターゲットのデフォルトのIPアドレスのネットワークをホスト側にaliasで設定するか、ターゲットをホストのネットワークに設定します。

ターゲットのIPアドレスを設定する場合は以下のようにします。

CFE> ifconfig eth0 -addr=10.0.1.123

tftpでホストからmain.trxを取得してFlashに書き込みます。元々のルーターの機能は無くなりますので注意してください。

CFE> flash -noheader 10.0.1.37:main.trx flash1.trx

host側からputする場合は

CFE> flash -noheader : flash1.trx

として

echo "bin
put main.trx 
quit
" | tftp 10.0.1.123

します。

これで電源を入れ直すとmrubyのスクリプトが実行されます。

Starting program at 0x80001000
bcmbm-mruby 2a3c2cd(master) Fri Dec 14 15:15:50 JST 2018
mruby ec812c64(master)
BOOT_CONSOLE : uart0
Clock : 200000000
Hello Bear Metal mruby on YABM..........

電源投入後5秒くらいで処理に入れるのもBear Metalのメリットと思います。DHCPとかNTPするとちょっと遅くなりますが。

蟹さんと同じようにVMとmrbを完全に分離して焼く事も出来るのですが、設定の手間がかかるので、一般的なCFEのファームウエアの構成にしました。

ほとんどmrbgemが入ってないので、追加したい時はvmのクロスビルドが必要です。

このmruby VMではfloatは使えません。

Mac OS Xでの場合

USB Ethernetモジュールを使って焼いてみました。(このときクライアントでアップできることを知らなかったので、tftpのサーバを上げる方法になります。ターゲットをtftpのサーバモードにしてputする方が簡単です。)

Ethernetインターフェースに適当なアドレスを設定します。

tftpdを起動します。

$ sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist

imageを作りtftpのディレクトリにコピーします。

$ make image
$ sudo cp main.trx /private/tftpboot/

後はターゲットで読み込んで焼きます。

CFE> flash -noheader 10.10.10.3:main.trx flash1.trx
Reading 10.10.10.3:main.trx: Done. 294912 bytes read
Programming...done. 294912 bytes written
*** command status = 0

tftpdはリブート後も起動しますので、使わなくなったら止めた方がよいでしょう。

sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist

雪豹で試しましたが、他でもいけるのではないかと思います。