1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

bcmbm-mruby v1.0の使い方

Last updated at Posted at 2018-12-14

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はこんな感じになってます。

trxformat.png

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インターフェースに適当なアドレスを設定します。

スクリーンショット(2019-01-28 19.21.13).png

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

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

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?