kansai mrb gr_sakura

27
GR-SAKURAでmruby @ Mac OS X 2014/12/27 第1回 Kansai.mrb向け資料 by M.Kosuga

Upload: kosuga-masakatsu

Post on 12-Aug-2015

236 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Kansai mrb gr_sakura

GR-SAKURAでmruby @ Mac OS X

2014/12/27

第1回 Kansai.mrb向け資料

by M.Kosuga

Page 2: Kansai mrb gr_sakura

自己紹介• 趣味で、Arduino/AVRを使った電子工作や、Raspberry pi等を使ったシステムを作ってます。

• ガジェット好き

• Kyoto.rbに出没してます。

• 本町ラスパイもくもく会をやってます。

Page 3: Kansai mrb gr_sakura

はじめに

• MacOSでGR-SAKURA向けのmruby環境をローカル環境で構築する流れをお話しします。

Page 4: Kansai mrb gr_sakura

ご注意

• 構築は、Mavericksで行いましたので、Yosemiteだとうまくいかない可能性はゼロではないです。

Page 5: Kansai mrb gr_sakura

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動く

Page 6: Kansai mrb gr_sakura

参考にさせていただいたサイト• 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

Page 7: Kansai mrb gr_sakura

全体の流れ1. gccのインストール

2. クロスコンパイル環境の構築

3. libmruby.aの作成

4. GR-SAKURA用のライブラリ取得

5. 作業用ディレクトリの作成

6. mrubyのプログラム作成

Page 8: Kansai mrb gr_sakura

1. gccのインストール• Xcodeのインストールで使えるようになるgccだけだと、次のクロス環境のmakeでエラーになる  →gcc-4.8をインストール  (gcc-4.7でも実績報告あり)

• インストール方法は2通り

• MacPorts

• homebrew ←私は実績のあったこちらを選択

Page 9: Kansai mrb gr_sakura

1. gccのインストール(続き)

• homebrew-versionsを使用

• $ brew tap homebrew/versions

• $ brew install --enable-all-languages --use-llvm gcc48

Page 10: Kansai mrb gr_sakura

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.)

Page 11: Kansai mrb gr_sakura

2. クロスコンパイル環境の構築

• KPITのサイトからソースを取得

• http://www.kpitgnutools.com/sourceCode.php

• GNU v14.02を選択

• 数日前にv14.03を試してみたが、エラーになったので、14.02が確実(要継続調査)

Page 12: Kansai mrb gr_sakura

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

Page 13: Kansai mrb gr_sakura

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/

Page 14: Kansai mrb gr_sakura

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

Page 15: Kansai mrb gr_sakura

2. クロスコンパイル環境の構築(続き)

• newlibのコンパイル$ ./configure --enable-newlib-hw-fp --target=rx-elf --prefix=/Users/<ユーザ名>/rx-tools gcc-4.8$ make; make install

以上で、~/rx-tools/配下にクロスコンパイル環境が構築されます。パスを通しておくのを忘れずに。

Page 16: Kansai mrb gr_sakura

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

Page 17: Kansai mrb gr_sakura

3. libmruby.aの作成• build_config.rbにクロスコンパイルコードを書く MRuby::CrossBuild.new('grsakura') do |conf| toolchain :grsakura  ・・・ conf.gem "#{root}/mrbgems/mruby-math"  ・・・end

Page 18: Kansai mrb gr_sakura

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すると出来上がる

Page 19: Kansai mrb gr_sakura

4.GR-SAKURA用のライブラリ取得• クラウドコンパイラから取得 http://japan.renesas.com/products/promotion/gr/index.jsp

• ログイン(ゲストログインでも可)する。

• プロジェクト作成 (テンプレートはGR-SAKURA_Sketch_V1.xを選択)

• 一度ビルド(makefileを作るため)

• プロジェクト一式をダウンロード

Page 20: Kansai mrb gr_sakura

5.作業用ディレクトリの作成

• ダウンロードしてきたプロジェクト一式をコピー

• gr_mrubyフォルダを作成し、mrubyのincludeとlibmruby.aをコピー

• makefileに以下の修正を行う- LIBFILESに./gr_mruby/libmruby.aを追- CCINCに-I./gr_mruby/includeを追加

Page 21: Kansai mrb gr_sakura

5.作業用ディレクトリの作成(続き)

• gr_sketch.cppを作成

• cdigitalWrite()処理の実装

• setup()の定義- 使用するGPIOの初期設定- mrubyの初期設定 mrb_open,mrb_define_method, mrb_load_irep

Page 22: Kansai mrb gr_sakura

5.作業用ディレクトリの作成(続き)

あと一歩!

• gr_common/include/rxduino/rxduino.hを編集→型定義の部分を全てコメントアウト(別のヘッダファイルと定義が重複しててエラーになるため)

Page 23: Kansai mrb gr_sakura

おまたせしました。 これで環境が整いました。

Page 24: Kansai mrb gr_sakura

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

Page 25: Kansai mrb gr_sakura

6.mrubyのプログラム作成• sample.rbをバイトコードに変換~/sakura/src/mruby/bin/mrbc -Bcode sample.rb→sample.cが生成される。

• makefileのOBJFILESに./sample.oを追加

• make→sketch.binが作成されて完了

Page 26: Kansai mrb gr_sakura

最後に• 現状でmrubyのローカル環境を作るのは組み込み/Cの知識が必要。でも、ruby使いたい→Wakayama.rbボードをおすすめ

• GR-PEACHが登場 →RAMが10Mもあるので、mrubyの可能性が大きく広がる可能性(期待大)

Page 27: Kansai mrb gr_sakura

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は問題なくビルドできた