• 検索結果がありません。

本研修について mruby 概要 mruby IoT フレームワーク Plato mruby ポーティング mruby ポーティング環境への Plato の適用 2

N/A
N/A
Protected

Academic year: 2021

シェア "本研修について mruby 概要 mruby IoT フレームワーク Plato mruby ポーティング mruby ポーティング環境への Plato の適用 2"

Copied!
42
0
0

読み込み中.... (全文を見る)

全文

(1)

mruby IoT framework ‘Plato’と

mruby IoT framework ‘Plato’と

mrubyのポーティング研修テキスト

mrubyのポーティング研修テキスト

特定非営利活動法⼈軽量Rubyフォーラム 特定非営利活動法⼈軽量Rubyフォーラム

(2)

本研修について

mruby概要

mruby IoTフレームワーク “Plato”

mrubyポーティング

mrubyポーティング

mrubyポーティング環境へのPlatoの適用

(3)

mruby

概要

mruby

概要

“Ruby”を省リソース化した“mruby”の概要・特

“Ruby”を省リソース化した“mruby”の概要・特

(4)

mrubyとは

高い生産性で人気の言語Rubyの軽量版

「mruby」

「mruby」

RAMサイズ200KB程度で動作可能

組込み機器にも搭載可能

組込み機器にも搭載可能

経済産業省「地域イノベーション創出研究開発

経済産業省「地域イノベーション創出研究開発

事業」の研究成果として2012年4月に

「mruby」を公開

事業」の研究成果として2012年4月に

「mruby」を公開

(5)

Rubyの高い生産性

ソケット通信の実装例

require 'socket'

#include <stdio.h> require 'socket'

begin sock = TCPSocket.open("192.168.1.1", 30000) 10.times { sock.write("Hello!!") } #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> int main(void) { int sock; C言語 (35行) Ruby } sock.close rescue => e p e end int sock; int i;

struct sockaddr_in svaddr; const char msg[] = "Hello!!";

if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { puts("socket() failed."); return 1; Ruby (10行) return 1; } memset(&svaddr, 0, sizeof(svaddr)); svaddr.sin_family = AF_INET; svaddr.sin_addr.s_addr = inet_addr("192.168.1.1"); svaddr.sin_port = htons(30000);

if (connect(sock, (struct sockaddr*)&svaddr, sizeof(svaddr)) < 0) { • 短いコード • 簡潔な記述 • ポインタ操作なし • メンテナンス性が高い sizeof(svaddr)) < 0) { puts("connect() failed."); exit(2); }

for (i=0; i<10; i++) {

if (send(sock, msg, strlen(msg), 0) != strlen(msg)) { • メンテナンス性が高い • コードが長くなりがち strlen(msg)) { puts("send() failed."); exit(3); } } close(sock); return 0; } • コードが長くなりがち • 処理が複雑になりがち • 危険なポインタ操作 • メンテナンス性が低い }

(6)

mrubyの特徴

ISO, JIS規格のRubyに準ずる言語仕様

ISO, JIS規格のRubyに準ずる言語仕様

本家Rubyと同様に使える

本家Rubyと同様に使える

コンパクトな処理系「mruby VM」

コンパクトな処理系「mruby VM」

mrubyコンパイラが出⼒するバイトコードを

実⾏

実⾏

VMさえ動作すればどんな環境でも動作可能

Windows, Mac, Linux, ITRON, Android,

Windows, Mac, Linux, ITRON, Android,

iOS ...

(7)

補足: Rubyとmruby

Ruby mruby インタプリタ言語 インタプリタ言語/コンパイラ言語 C言語モジュールの呼び出しが可能 C言語モジュールの呼び出し、C言語から C言語モジュールの呼び出しが可能 C言語モジュールの呼び出し、C言語から の呼び出しが可能 実行時にRubyGemsで機能拡張が可能 ビルド時にmrbgemsで機能拡張が可能 実行時にRubyGemsで機能拡張が可能 ビルド時にmrbgemsで機能拡張が可能 ※mrbgemsとRubyGemsとは互換性なし Integer同士の演算 → Integer Float同士の演算 → Float 演算結果が整数値→Integer 演算結果が浮動小数値→Float Float同士の演算 → Float 演算結果が浮動小数値→Float 非常に大きな整数値はBignumで扱われ る 非常に大きな整数値はFloatで扱われる 正規表現を標準装備 正規表現はオプション 正規表現を標準装備 正規表現はオプション ※複数から選択可能

ASCII, Shift_JIS, UTF-8など様々な文字 文字コードはASCII, UTF-8のみ利用可能 ASCII, Shift_JIS, UTF-8

コードが利用可能 ASCII, UTF-8 ※UTF-8はオプション バイナリ配布(ソースコードも入手可) ソースコード配布 ※容易にカスタマイズ可能 ※容易にカスタマイズ可能

(8)

mrubyを支えるコミュニティ

オープンソースコミュニティ

3,700人超のフォロワー

オープンソース

3,700人超のフォロワー

200人以上のコントリビュータ

7,700件を超える改良・修正

・ オープンソース として成⻑ ・Creative ・Powerful

7,700件を超える改良・修正

https://github.com/mruby/mruby (mruby公開サイト)

NPO軽量Rubyフォーラム

ワーキンググループによる活動

ワーキンググループによる活動

会員企業による商

(9)

IoT/M2M時代の新言語 - mruby

 ものとインターネット、ものとものが繋がる → 全てのものがネットワークに繋がっていく → 全てのものがネットワークに繋がっていく  組込み分野もフロンティア領域を重点分野として新しい市場が形成されて いく → これに対応した組込み開発が必須になっていく → これに対応した組込み開発が必須になっていく 経済産業省 組込み開発の今後 資料より

(10)

Plato

Plato

mruby IoT framework

-mruby IoTフレームワーク “Plato”の概要

mruby IoTフレームワーク “Plato”の概要

(11)

mruby IoT framework “Plato”

Plato (仮) - mruby IoT framework

• NEDO助成事業「組込みシステムの⾼効率開発を可能とする開発 • NEDO助成事業「組込みシステムの⾼効率開発を可能とする開発 フレームワークの研究開発」にて開発中(〜2017/2) (九州工業大学、有明工業高等専門学校、SCSK九州) (九州工業大学、有明工業高等専門学校、SCSK九州) • mrubyによるIoT製品開発の効率化 • マイコンボードとシームレスに繋がる統合開発環境の提供 • マイコンボードとシームレスに繋がる統合開発環境の提供 • 組込み向けセキュリティ機能の提供 White-Tiger White-Tiger センサボード Plato IDE

(12)

“Plato”で出来ること

mrubyによるIoT製品開発の効率化

• 組込み向けデバイスクラスライブラリの提供 • 組込み向けデバイスクラスライブラリの提供 • BLE、WiFi、ZigBeeなど様々な通信方式にも対応BLE、WiFi、ZigBeeなど様々な通信方式にも対応 • 典型的なアプリケーションの雛形を自動生成 (Railsのように) (Railsのように) • シミュレータによるPC上でのシミュレーション

(13)

“Plato”で出来ること

mrubyボード(enzi) + センサボード(White-Tiger)

• 汎用IO • 汎用IO • デジタル/アナログIO、UART、I2C、SPI • センサ • センサ • 温度、湿度、照度 • 通信デバイス • BLE • Wi-Fi • Wi-Fi • ZigBee • Ethernet • ファイルシステム • RTC • RTC

(14)

“Plato”で出来ること

Plato IDE

• Visual Studio Codeベースの開発環境 • Visual Studio Codeベースの開発環境

(マルチ環境に対応) • アプリ構成、使用ライブラリをGUIで指定 • アプリ構成、使用ライブラリをGUIで指定 • アプリケーションのコンパイル • アプリケーションのコンパイル • アプリケーションのシミュレーション実⾏ • マイコンへのプログラム書き込み

(15)

“Plato”で出来ること

セキュリティ機能 “Plato Guard”

IoT時代に必要となるセキュリティ機能をオプションで提供 IoT時代に必要となるセキュリティ機能をオプションで提供 • 認証機能による不正アプリケーション実⾏の防⽌ (外部からの攻撃、乗っ取りから守る) 認証機能による不正アプリケーション実⾏の防⽌ (外部からの攻撃、乗っ取りから守る) • 暗号化による実⾏モジュール秘匿化 • 暗号化による実⾏モジュール秘匿化 (アプリケーション資産の漏洩を防ぐ)

(16)

“Plato”が目指すところ

○rduinoよりも簡単に組込み開発を

• mruby(Ruby)でプログラミングできる • mruby(Ruby)でプログラミングできる • 多くのマイコンボードに対応 (バイトコード互換) 多くのマイコンボードに対応 (バイトコード互換) • 必要なデバイスに応じてVMをカスタマイズできる • 必要なデバイスに応じてVMをカスタマイズできる • mruby/cにも対応予定 (⼩サイズ、省電⼒) (⼩サイズ、省電⼒)

(17)

mrubyポーティング

mrubyポーティング

マイコンボードへのmruby適用

マイコンボードへのmruby適用

(18)

mrubyポーティング

mrubyポーティングのために必要なこと

• mrubyビルド環境の構築 • mrubyビルド環境の構築 • mrubyのクロスビルドmrubyのクロスビルド • ターゲットアプリへのmruby組込み

(19)

mrubyビルド環境の構築

mrubyビルド環境の構築

以下の環境を準備する。 以下の環境を準備する。 • 開発OS • Microsoft Windows 開発OS • Microsoft Windows • Mac  これら以外のOSも利⽤可能であるが、本書ではこれら2つに  これら以外のOSも利⽤可能であるが、本書ではこれら2つに 限定して紹介する。 • 本家Ruby • 本家Ruby • Cコンパイラ • GNU Bison • git • git

(20)

mrubyビルド環境の構築

本家Rubyの導入

Windowsの場合

• 下記サイトよりRubyInstallerをダウンロードし、最新版のRuby 環境インストールする。(Ruby 2.0以降を推奨) 環境インストールする。(Ruby 2.0以降を推奨) https://rubyinstaller.org/

Macの場合

• Mac OSにプリインストールされているRubyが利⽤可能。 • Mac OSにプリインストールされているRubyが利⽤可能。

(21)

mrubyビルド環境の構築

Cコンパイラの導入

Windowsの場合

• Cコンパイラを含むC言語開発環境をインストールする。 利⽤可能なC⾔語開発環境の⼀例 利⽤可能なC⾔語開発環境の⼀例

• Microsoft Visual Studio • gcc (MinGW)

• gcc (Cygwin) • gcc (Cygwin)

Macの場合

Macの場合

(22)

mrubyビルド環境の構築

GNU Bisonの導入

Windowsの場合

• 下記サイトよりBisonのインストーラをダウンロードしセット アップする。 アップする。 http://gnuwin32.sourceforge.net/packages/bison.htm

Macの場合

Macの場合

• 以下のコマンドを実⾏してBisonをインストールする。

brew install bison brew install bison

(23)

mrubyビルド環境の構築

gitの導入

Windowsの場合

• 下記サイトよりgit for Windowsのインストーラをダウンロード

しセットアップする。 しセットアップする。 https://git-for-windows.github.io/

Macの場合

Macの場合

• 以下のコマンドを実⾏してgitをインストールする。

brew install git brew install git

(24)

mrubyビルド環境の構築

mrubyのビルド

1. mrubyソースコードの入手とビルド 1. mrubyソースコードの入手とビルド 以下のコマンドを実⾏し、mrubyソースコードを入手し、ビル ドする。 ドする。 cd <任意のディレクトリ>

git clone https://github.com/mruby/mruby git clone https://github.com/mruby/mruby cd mruby

make

(25)

mrubyのクロスビルド

mrubyクロスビルドで必要な作業

• ターゲットボード用ツールチェインの入手 • ターゲットボード用ツールチェインの入手 • ビルドスクリプトの記述ビルドスクリプトの記述

(26)

mrubyのクロスビルド

ターゲットボード用ツールチェインの入手

ターゲットボード向けのソフトウェア開発に必要なツールチェイン ターゲットボード向けのソフトウェア開発に必要なツールチェイン (コンパイラ・リンカなどのセット)をセットアップする。 例えば、ARMプロセッサ⽤であれば以下のツールチェインが利⽤可 例えば、ARMプロセッサ⽤であれば以下のツールチェインが利⽤可 能。

GNU ARM Embedded Toolchain

(27)

mrubyのクロスビルド

ビルドスクリプトの記述

mrubyのビルド構成はビルドスクリプト(build_config.rb)に記述さ mrubyのビルド構成はビルドスクリプト(build_config.rb)に記述さ れている。ターゲットボード向けにクロスビルドするには、 build_config.rbにクロスビルド用の記述を追加する必要がある。 build_config.rbにクロスビルド用の記述を追加する必要がある。 build_config.rbの概要 ホスト(開発環境)用のビルド構成 MRuby::Build.new do |conf| end MRuby::Build.new('host-debug') do |conf| ホスト(開発環境)用のビルド構成 build/host デバッガ、unitテスト、ベンチマーク用の end MRuby::Build.new(’test') do |conf| end デバッガ、unitテスト、ベンチマーク用の ビルド構成 build/host-debug build/test MRuby::Build.new(’bench') do |conf| end MRuby::CrossBuild.new('hoge') do |conf| build/test build/bench 追加するターゲット用のクロスビルド構成 MRuby::CrossBuild.new('hoge') do |conf| end 追加するターゲット用のクロスビルド構成 build/ターゲット名

(28)

mrubyのクロスビルド

ビルドスクリプトの記述

build_config.rbに追加するクロスビルド⽤の記述例を以下に⽰す。 build_config.rbに追加するクロスビルド⽤の記述例を以下に⽰す。 MRuby::CrossBuild.new('hoge') do |conf| toolchain :gcc conf.linker.flags << “-m32“ リンカオプション conf.linker.flags << “-m32“ conf.cc do |cc| cc.command = 'arm-none-eabi-gcc' cc.flags = [] cc.flags << '-mcpu=cortex-m4‘ コンパイラオプション cc.flags << '-mcpu=cortex-m4‘ cc.flags << '-std=gnu99‘

cc.flgas << ‘-mfpu=fpv4-sp-d16 –mfloat-abi=soft‘ # 省略

end

conf.bins = []

コンパイラオプション

conf.bins = []

(29)

mrubyのクロスビルド

クロスビルド実⾏

build_config.rbへのクロスビルド定義の追加が終わったら、mruby build_config.rbへのクロスビルド定義の追加が終わったら、mruby をリビルドすることでmrubyのクロスビルドが実施される。 cd mruby cd mruby

make clean all

ターゲット名を ‘hoge’ とした場合は、クロスビルドによって、以下 のmrubyスタティックライブラリが生成される。

(30)

mrubyのクロスビルド

ターゲットアプリへのmruby組込み

クロスビルドで作成した libmruby.a をターゲットアプリケーショ クロスビルドで作成した libmruby.a をターゲットアプリケーショ ンにスタティックリンクすることで、ターゲットアプリケーション にmrubyを組み込むことができる。 にmrubyを組み込むことができる。 ターゲットアプリケーションからmrubyを呼び出すためには mrubyのC APIを使用する。 mrubyのC APIを使用する。 ターゲットアプリケーションからのmrubyの呼び出し例を以下に⽰ す。 す。

(31)

mrubyのクロスビルド

ターゲットアプリへのmruby組込み

ターゲットアプリ(main.c)とC言語側から呼び出すmrubyアプリ ターゲットアプリ(main.c)とC言語側から呼び出すmrubyアプリ (app.rb)の例を以下に⽰す。 main.c main.c #include ”mruby.h” #include “mruby/irep.h” #include <stdio.h> #include <stdio.h> void main(void) {

extern uint8_t appbin[]; mrb_state *mrb = mrb_open(); mrb_value v; mruby VMの初期化 mrubyアプリケーションの実行 mrb_value v; v = mrb_load_irep(mrb, appbin); puts(mrb_string_value_cstr(mrb, v)); mrb_close(mrb); } mruby VMの終了 mrubyアプリケーションの実行 app.rb } mruby VMの終了 “Hello, mruby!“

(32)

mrubyのクロスビルド

ターゲットアプリへのmruby組込み

以下のコマンドでmrubyアプリケーションをコンパイルする。 以下のコマンドでmrubyアプリケーションをコンパイルする。 mrbc –Bappbin –o app.c app.rb

mrbc –Bappbin –o app.c app.rb

main.c、上記コンパイル結果(app.c)をコンパイルし、前述の libmruby.a と共にリンクすることで、mrubyを追加したターゲッ libmruby.a と共にリンクすることで、mrubyを追加したターゲッ トアプリケーションが完成する。 ターゲットボード上で実⾏し、ターミナルソフトなどで ターゲットボード上で実⾏し、ターミナルソフトなどで

(33)

mrubyポーティング環境への

mrubyポーティング環境への

Plato適用

Plato適用

マイコンボード向けPlatoカスタマイズ

マイコンボード向けPlatoカスタマイズ

(34)

mrubyポーティング環境へのPlato適用

Platoのボード対応に必要なこと

mruby IoT framework – Plato を新たなターゲットボードに対応 mruby IoT framework – Plato を新たなターゲットボードに対応 させるためには以下が必要となる。

• Plato IDEへのターゲットボード登録 • Plato IDEへのターゲットボード登録 • デバイスI/F層ライブラリの実装

(35)

mrubyポーティング環境へのPlato適用

Plato IDEへのターゲットボード登録

Plato IDEにターゲットボードを追加するには、以下の情報が必要と Plato IDEにターゲットボードを追加するには、以下の情報が必要と なる。 • ターゲットボード名 • ターゲットボードID ターゲットボード名 • ターゲットボードID ターゲットボードIDはライブラリの識別⼦としても使⽤されるため、 ターゲットボードIDはライブラリの識別⼦としても使⽤されるため、 一意な名称を指定する必要がある。

(36)

mrubyポーティング環境へのPlato適用

デバイスI/F層ライブラリの実装

Platoが提供するライブラリ群はmrubyライブラリ(mrbgems)形式 Platoが提供するライブラリ群はmrubyライブラリ(mrbgems)形式 で実装されている。 Plato提供ライブラリ群のうち、デバイスI/F層のライブラリは動作 環境毎に提供される。 Plato提供ライブラリ群のうち、デバイスI/F層のライブラリは動作 環境毎に提供される。 ターゲットボードを追加する場合には、ターゲットボードのデバイ スI/F層ライブラリを実装・提供する必要がある。 スI/F層ライブラリを実装・提供する必要がある。 提供するライブラリは以下の命名規則に従う必要がある。 mruby-plato-XXXXX-<デバイスID>

(37)

mrubyポーティング環境へのPlato適用

デバイスI/F層ライブラリの実装

参考までにenziボード用に提供されているデバイスI/F層ライブラリ 参考までにenziボード用に提供されているデバイスI/F層ライブラリ の一覧を示す。 ライブラリ ライブラリライブラリ ライブラリライブラリ 内容内容内容内容 ライブラリライブラリ ライブラリ 内容内容内容内容 mruby-plato-analogio-enzi アナログI/Oライブラリ mruby-plato-digitalio-enzi デジタルI/Oライブラリ mruby-plato-digitalio-enzi デジタルI/Oライブラリ mruby-plato-gpio-enzi GPIOライブラリ mruby-plato-i2c-enzi I2Cライブラリ mruby-plato-machine-enzi マシンライブラリ (delay等) ※必須 mruby-plato-serial-enzi シリアル(UART) I/Fライブラリ

mruby-plato-spi-enzi SPIライブラリ

これらのうちマシンライブラリは必須であるが、それ以外は必要に 応じて実装すれば良い。

mruby-plato-spi-enzi SPIライブラリ

(38)

mrubyポーティング環境へのPlato適用

デバイスI/F層ライブラリのPlatoへの登録

作成したデバイスI/F層ライブラリをPlatoに登録するには、ライブ 作成したデバイスI/F層ライブラリをPlatoに登録するには、ライブ ラリリストファイルを作成する必要がある。 ライブラリリストファイルは以下に示すようなJSON形式で記述し、 ライブラリリストファイルは以下に示すようなJSON形式で記述し、 ファイル名を mgem-<デバイスID>.lst とする必要がある。 ライブラリリストファイルの例 (mgem-hoge.lst) ライブラリリストファイルの例 (mgem-hoge.lst) { mrbgems: [ { “name”: “mruby-plato-machine-hoge”, “descriptrion”: “PlatoHoge::Machine class”, “descriptrion”: “PlatoHoge::Machine class”, “author”: “mruby developers”,

(39)

mruby & Plato

mruby & Plato

まとめ

まとめ

(40)

Platoに出来ること

mrubyアプリケーションが簡単に作れる

アプリケーションの形式、使用するライブラリ

アプリケーションの形式、使用するライブラリ

等を詳細に設定可能

ビルド・プログラム転送可能なIDE

ビルド・プログラム転送可能なIDE

IoTサービスとの連携

シミュレーション実⾏

シミュレーション実⾏

(41)

まとめ

組込みで使える新言語「mruby」

Rubyらしさはそのままに軽量化

Rubyらしさはそのままに軽量化

色々なところに組み込める

C/C++と戦わなくても組込みアプリが作れる

C/C++と戦わなくても組込みアプリが作れる

mruby IoTフレームワーク Plato

簡単に素早くアプリ作成

簡単に素早くアプリ作成

アイデアさえあればアプリ開発可能

IoT/M2Mのプロトタイピングが可能

(42)

http://plato.click

http://plato.click

参照

関連したドキュメント

管理画面へのログイン ID について 管理画面のログイン ID について、 希望の ID がある場合は備考欄にご記載下さい。アルファベット小文字、 数字お よび記号 「_ (アンダーライン)

本研修会では、上記クリーニング&加工作業の 詳細は扱いません。午後のPower BIレポート

②立正大学所蔵本のうち、現状で未比定のパーリ語(?)文献については先述の『請来資料目録』に 掲載されているが

前項においては、最高裁平成17年6月9日決定の概要と意義を述べてき

全体構想において、施設整備については、良好

高さについてお伺いしたいのですけれども、4 ページ、5 ページ、6 ページのあたりの記 述ですが、まず 4 ページ、5

このような環境要素は一っの土地の構成要素になるが︑同時に他の上地をも流動し︑又は他の上地にあるそれらと

能率競争の確保 競争者の競争単位としての存立の確保について︑述べる︒