View
231
Download
2
Category
Preview:
Citation preview
GR-SAKURAでmruby @ Mac OS X
2014/12/27
第1回 Kansai.mrb向け資料
by M.Kosuga
自己紹介• 趣味で、Arduino/AVRを使った電子工作や、Raspberry pi等を使ったシステムを作ってます。
• ガジェット好き
• Kyoto.rbに出没してます。
• 本町ラスパイもくもく会をやってます。
はじめに
• MacOSでGR-SAKURA向けのmruby環境をローカル環境で構築する流れをお話しします。
ご注意
• 構築は、Mavericksで行いましたので、Yosemiteだとうまくいかない可能性はゼロではないです。
mrubyの動作状況• STM32F4 DISCOVERY(¥1,800くらい) CortexM4, RAM192KB(ただし、128KB+64KB)
• STM32 Nucleo F401RE(¥1500くらい) CortexM4, RAM96KB
• chipKit Max32(¥5,000くらい) PIC32, Arduino互換, RAM128KB
• GR-SAKURA(¥3,500くらい/¥5,000くらい)Renesas RX63N, RAM128KB
• Raspberry pi ※bare metal (B+ ¥5,500くらい)arm11, RAM512MB
←普通にruby動く
参考にさせていただいたサイト• jjzakさん : GR-SAKURAでmrubyを使う - Qiita ※http://qiita.com/jjzak/items/8e9d9d98370181aa97fa
• たろサさん : GR-SAKURAでmrubyを動かすhttp://d.hatena.ne.jp/tarosay/20131006/1381042546
※記事が2013/2/23と少し古かったので、今の環境で試した結果をフィードバック
• MacでGR SAKURAのクロスコンパイル環境を構築 http://blog.goo.ne.jp/mikotolv5/e/e4d60ad40b9e53ad114e572662ad4972
全体の流れ1. gccのインストール
2. クロスコンパイル環境の構築
3. libmruby.aの作成
4. GR-SAKURA用のライブラリ取得
5. 作業用ディレクトリの作成
6. mrubyのプログラム作成
1. gccのインストール• Xcodeのインストールで使えるようになるgccだけだと、次のクロス環境のmakeでエラーになる →gcc-4.8をインストール (gcc-4.7でも実績報告あり)
• インストール方法は2通り
• MacPorts
• homebrew ←私は実績のあったこちらを選択
1. gccのインストール(続き)
• homebrew-versionsを使用
• $ brew tap homebrew/versions
• $ brew install --enable-all-languages --use-llvm gcc48
1. gccのインストール(続き)• 加えて、以下のライブラリ・プログラムをHomebrewでインストール
$ brew install mpfr gmp libmpc libelf texinfo
mpfra C library for multiple-precision floating-point computations with correct rounding.
gmpa free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers.
libmpca C library for the arithmetic of complex numbers with arbitrarily high precision and correct rounding of the result.
libelf ELF object file access library.
texinfosingle source file to produce output in a number of formats, both online and printed (dvi, html, info, pdf, xml, etc.)
2. クロスコンパイル環境の構築
• KPITのサイトからソースを取得
• http://www.kpitgnutools.com/sourceCode.php
• GNU v14.02を選択
• 数日前にv14.03を試してみたが、エラーになったので、14.02が確実(要継続調査)
2. クロスコンパイル環境の構築(続き)
• 以下のような構成しました
/Users/<ユーザ名>/sakura/kpit/binutils-2.24 ※binutilsのソース /Users/<ユーザ名>/sakura/kpit/gcc-4.8.3 ※gccのソース /Users/<ユーザ名>/sakura/kpit/newlib-2.1.0 ※newlibのソース /Users/<ユーザ名>/rx-tools ※クロスコンパイル環境 /Users/<ユーザ名>/sakura/src/mruby ※mrubyのソース /Users/<ユーザ名>/sakura/src/sample ※作業用ディレクトリ /Users/<ユーザ名>/sakura/src/sample/gr_mruby ※mrubyのライブラリとinclude
2. クロスコンパイル環境の構築(続き)
• binutilsのコンパイル$ ./configure -target=rx-elf -prefix=/Users/<ユーザ名>/rx-tools -disable-werror CC=gcc-4.8$ make; make install
• パスを通しておくexport PATH=$PATH:~/rx-tools/bin/
2. クロスコンパイル環境の構築(続き)
• gccのコンパイル$ mkdir build$ ln -s ../newlib-2.1.0/newlib . $ ln -s ../newlib-2.1.0/libgloss . $ cd build$ ../configure --prefix=/Users/<ユーザ名>/rx-tools --target=rx-elf --enable-lnguages=c,c++ --disable-libstdcxx-pch --disable-multilib --with-newlib --disable-nls --disable-libgfortran CC=gcc-4.8$ make; make install
2. クロスコンパイル環境の構築(続き)
• newlibのコンパイル$ ./configure --enable-newlib-hw-fp --target=rx-elf --prefix=/Users/<ユーザ名>/rx-tools gcc-4.8$ make; make install
以上で、~/rx-tools/配下にクロスコンパイル環境が構築されます。パスを通しておくのを忘れずに。
3. libmruby.aの作成• ソースの取得git clone https://github.com/mruby/mruby
• include/mrbconfig.hの編集#define MRB_USE_FLOAT#define MRB_FUNCALL_ARGC_MAX 6#define MRB_HEAP_PAGE_SIZE 32#define MRB_USE_IV_SEGLIST#define KHASH_DEFAULT_SIZE 2#define POOL_PAGE_SIZE 256
3. libmruby.aの作成• build_config.rbにクロスコンパイルコードを書く MRuby::CrossBuild.new('grsakura') do |conf| toolchain :grsakura ・・・ conf.gem "#{root}/mrbgems/mruby-math" ・・・end
3. libmruby.aの作成• tasks/toolchains/に、grsakura.rakeファイルを作成MRuby::Toolchain.new(:grsakura) do |conf| toolchain :gcc TOOL_PATH = “/Users/<ユーザ名>/rx-tools/bin" conf.cc do |cc| cc.command="#{TOOL_PATH}/rx-elf-gcc" cc.flags << "-Wall -g -O2" ・・・
• その後、makeすると出来上がる
4.GR-SAKURA用のライブラリ取得• クラウドコンパイラから取得 http://japan.renesas.com/products/promotion/gr/index.jsp
• ログイン(ゲストログインでも可)する。
• プロジェクト作成 (テンプレートはGR-SAKURA_Sketch_V1.xを選択)
• 一度ビルド(makefileを作るため)
• プロジェクト一式をダウンロード
5.作業用ディレクトリの作成
• ダウンロードしてきたプロジェクト一式をコピー
• gr_mrubyフォルダを作成し、mrubyのincludeとlibmruby.aをコピー
• makefileに以下の修正を行う- LIBFILESに./gr_mruby/libmruby.aを追- CCINCに-I./gr_mruby/includeを追加
5.作業用ディレクトリの作成(続き)
• gr_sketch.cppを作成
• cdigitalWrite()処理の実装
• setup()の定義- 使用するGPIOの初期設定- mrubyの初期設定 mrb_open,mrb_define_method, mrb_load_irep
5.作業用ディレクトリの作成(続き)
あと一歩!
• gr_common/include/rxduino/rxduino.hを編集→型定義の部分を全てコメントアウト(別のヘッダファイルと定義が重複しててエラーになるため)
おまたせしました。 これで環境が整いました。
6.mrubyのプログラム作成• sample.rb作成 HIGH = 1 LOW = 0 cdigitalWrite(100, LOW); cdigitalWrite(101, LOW); cdigitalWrite(102, LOW); cdigitalWrite(103, LOW); k = Math.sqrt(4) if k==2 then cdigitalWrite(100, HIGH); else cdigitalWrite(101, HIGH); end loop do end
6.mrubyのプログラム作成• sample.rbをバイトコードに変換~/sakura/src/mruby/bin/mrbc -Bcode sample.rb→sample.cが生成される。
• makefileのOBJFILESに./sample.oを追加
• make→sketch.binが作成されて完了
最後に• 現状でmrubyのローカル環境を作るのは組み込み/Cの知識が必要。でも、ruby使いたい→Wakayama.rbボードをおすすめ
• GR-PEACHが登場 →RAMが10Mもあるので、mrubyの可能性が大きく広がる可能性(期待大)
3. クロスコンパイル環境の構築(続き)
• mrubyのモジュールを作るのには必要ないですが、GDBはV14.02では以下のエラーがでる。
• Undefined symbols for architecture x86_64: "_n_high_128", referenced from: _regcache_raw_write in regcache.old: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [gdb] Error 1
• ソースに以下のコメントあり/* RX hack: add the high part of 128(96) bit register */
• V14.01は問題なくビルドできた
Recommended