5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FreeBSDでmruby

Last updated at Posted at 2016-02-14

mruby with ZRouter.org

mrubyは組み込みを対象にしているので、クロスビルドの機能があります。またhttpなどの通信スタックも用意されています。

FreeBSDのルータ向けビルドシステムのZRouterとmrubyのクロスビルドを組み合わせて環境を作ります。ZRouterとmrubyは極めて親和性が高いです。

もちろんターゲットの機器はハードオフで入手した無線ルーターのジャンクを利用します。

デフォルトでprofileのmrubyを選択すれば素のmruby入りがつくれます。ビルドにはホスト側にrubyとbisonをpkgでインストールする必要があります。ネットワークアクセスが出来るようにビルドしてみます。

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

ports/lang/mruby/build_config.rbをベースにzrouterのターゲットに以下を入れます。

  conf.gem :git => 'https://github.com/mattn/mruby-uv.git'
  conf.gem :git => 'https://github.com/mattn/mruby-http.git'
  conf.gem :git => 'https://github.com/luisbebop/mruby-polarssl.git'
  conf.gem :git => 'https://github.com/matsumoto-r/mruby-simplehttp.git'
  conf.gem :git => 'https://github.com/matsumoto-r/mruby-httprequest.git'

上記のmebgemsに依存したライブラリなどをvendor/Buffalo/vendor.mkなどに以下を追加します。

WORLD_SUBDIRS_PORTS+=${ZROUTER_ROOT}/ports/devel/libuv
WORLD_SUBDIRS+= secure/lib/libcrypto
WORLD_SUBDIRS_LIB+=librt libdl

libuvのビルドのためにホスト側にautoconf,automake,libtoolをpkgをインストールしておきます。

修正した、build_config.rbを環境変数のMRUBY_CONFIGに設定してmrubyを追加してZRouterのビルドを流すとその設定でmrubyがビルドされイメージに入ります。

これでインターネットへのアクセスはできたので、LEDやセンサーを使えるようにします。FreeBSDではGPIOが使えるので、これに接続する事にします。ネットで検索してもFreeBSDのGPIOをサポートしたモジュールはなさそうだったので作ってみました。

こんなスタックができました。このスタックを一発でビルドできるZRouterはほんとよくできていると思います。

mruby_freebsd.png

ターゲットの機器はFlashが8M(空き2Mくらい)でRAMが32Mあれば十分使えます。

後日追記:i2cも使えるようにしてみました。mrubyでi2c

下記のフィブナッチ(Fibonacci)コードでベンチマークとってみました。

def fib n
  return n if n < 2
  fib(n-2) + fib(n-1)
end

puts fib(32)
SOC Type Endian Clock 1.2 1.3 1.4 2.0 2.1 3.0 3.1
AR2312 MIPS 4K Big 180MHz 121
AR2315 MIPS 4K Big 180MHz 89 118 103
AR2318 MIPS 4K Big 180MHz 122
AR7240 MIPS 24K Big 350MHz 64
AR7242 MIPS 24K Big 400MHz 45
AR7161 MIPS 24K Big 680MHz 57
AR9132 MIPS 24K Big 400MHz 53 54 62
AR9330 MIPS 24K Big 400MHz 47 84 88 95 90 58 123
AR1321 MIPS 74K Big 535MHz 19 16 18
BCM5356 MIPS 74K Little 333MHz 24 24
RT2880 MIPS 4K Little 60
RT3050 MIPS 24K Little 320MHz 25 29 33 26 27 29
RT3883 MIPS 74K Little 500MHz 18 18
RT5350 MIPS 24K Little 360MHz 25 26 29 23
MT7620 MIPS 24K Little 580MHz 13 15 16 14
RT1310 ARM 5T Little 300MHz 145
88E6281 ARM 5T Little 1200MHz 232
A10 ARM Cortex-A8 Little 1000MHz 15
QEMU MIPS 4K Big 31

AR2315はAtheros(後にQualcommが買収)という会社のチップで2005年くらいに製造されていました。RT3050はRalink(後にMediaTekが買収)という会社のチップで2008年くらいに製造されていました。
fib(32)だったらMac mini 2010では4秒くらいなので、それなりに遅いですが、同じコードが動く事はすごいと思います。
Atherosが遅い原因はわかっていません。

5
5
0

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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?