オープンソースカンファレンス 2014 Tokyo/Fall
2014/10/18 ドットNETまいくろバンザイ倶楽部 1
ドットNETまいくろバンザイ倶楽部
日高亜友
- IoT 時代の組み込みOSの主役 -
オープンソースになったマイコン開発環境.NET Micro Frameworkの紹介。
ドットNETまいくろバンザイ
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 2
セッション内容
.NET Micro Frameworkとは?
新プラットフォームへの移植
組み込みアプリケーション開発とIoT
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 3ドットNETまいくろバンザイ倶楽部
.NET Micro Frameworkとは?
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 4
.NET Micro Framework とは?
Microsoft Research開発の組み込みOS
Visual C# / Visual Basicで開発した IL
.NET アセンブリを中間コードインタプリタで実行
豊富なドライバとライブラリを標準装備
オープンソース・ライセンスで公開(Apache V2)
30種以上のプラットフォームに移植されて動作
.NET Micro Framework (NETMF) 移植済みSOC
業務アプリケーション・システム応用事例
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ .NET Micro Framework の歴史
2001年 V 1.0
SPOT Watch / MSN Direct Service
(Microsoft リサーチ)
2006年 V2.0Windows SideShow Device
2008 年 V3.0 , 3.5 for Network
2010年 V4.0 for Open Source
2011年 V4.2 for Visual Basic
2012年 V4.3 for Visual Studio 2012
2014年 V4.3-R2β for Visual Studio 2013/20142014/10/18 5ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 6
NETMFの本質
本来は、Windows CE 未満のプラットフォーム用
組込みシステム向け製品となるはずだったOS
(かつては)移植キット販売済
(かつては)製品ライセンス販売予定
2010年にオープンソース化
Apache V2 ライセンス→無償で商用利用可能
競合OSの台頭
⇒製品相当の機能・性能・品質 を無料で公開
2014年末に何かが起こるかも?
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ アーキテクチャ
全体構成
2 種類の実装方法- Native Platform
- “OS on OS” solution
2014/10/18 7ドットNETまいくろバンザイ倶楽部
アプリケーション開発ライブラリ開発
プラットフォーム移植
CLR: Common Language Runtime
HAL: Hardware Abstraction Layer
PAL: Platform Abstraction Layer
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ OSとしての提供機能
IL(.NETのアセンブリ)の実行環境 = TinyCLR
タイマ, 割り込みハンドラ, マルチスレッド,
スケジューラ
ブートローダ, 各種デバイスドライバ, リソースマネージャ
組み込み環境対応
MMU 不要
最小 64KB RAM / 256KB ROM (特別な環境)
標準サポート ARM7/9/Cortex-M3, Blackfin, SH-2/2A
サポート機能
ブートローダ, アプリケーションローダ, デバッガIF 2014/10/18 8ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 9
ドライバとサービス
Cache
Ethernet, WiFi
GPIO
I2C
INTC
LCD / Display
Piezo / Speeker
PMC
SDRAM
SDCARD / MMC
SPI
Thermistor
TIME (RTC)
TIMER
USART
USB Client
Backlight (GPIO,SPI)
BatteryCharger / Measurement
BlockStorage (Flash, SD)
Buttons
COM
DPWS
Gesture
Font, Graphics
HTTP
Ink
Interop
FileSystem (FAT)
Security, Crypto
TCP/IP, Socket, RPC, SSL
Touch Panel (Multi Touch)
XML
デバイスドライバデバイスコントローラ
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ プラットフォームとアプリケーション
自作ボードや未サポートボードに移植
CQ出版等の移植事例(参考資料)
周辺ハードウェアを自作して動作
容易に接続可能→.NET Gadgeteer
ライブラリやシステムを開発・改造
Emulatorの開発、独自モジュールの開発
連係システムやアプリケーションを開発
他のシステムとの接続
PC, Smart Phone, Cloud連係
2014/10/18 10ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 11
SDK vs. PK (Porting Kit)
SDK: 組み込みアプリケーション開発 アプリケーション開発に必須
Visual Studio / VC# Express に組み込んで使用
Simulator, Debugger, Deployment Tools を含む
PK: 動作プラットフォームの構築(移植) .NET Micro Framework の移植に必須
ほかにクロスコンパイラ(+デバッガ)が必須
ツール類を含めた全ソースコードが提供
ほとんどを C++ で記述 (一部アセンブラ, C, C#)ドットNETまいくろバンザイ倶楽部
バージョンを合わせる必要がある
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 12ドットNETまいくろバンザイ倶楽部
新プラットフォームへの移植
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ 移植方法の選択
Native実装 TinyCLR直接実装 VS. TinyBooter実装
TinyCLR / TinyBooterのメンテナンス手順が必須
他のブートローダ利用 U-Boot, T-Monitor (T-Engine)等
Network ブート
OS on OS
他のOSのアプリケーションとしてNETMFを実装
ソースコードが公開されているので実際にはどの様にでも作ることが可能
2014/10/18 13ドットNETまいくろバンザイ倶楽部
TinyBooter = NETMF専用ブートローダ
Monoへのエクスポート
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 14
サポート・プラットフォーム PK が用意しているサポート・テンプレート(標準サポート環境)
BF537 -- ADI Blackfin
EA_LPC2478 -- NXP LPC2478 (Embedded Artists LPC2478 4MB / 512KB)
iMXS -- MC9328MXS (32MB RAM / 8MB Flash ROM)
MCBSTM32E – STM32F103 Cortex-M3 (KEIL MCBSTM32E 8MB / 1MB)
MOTE2 -- Marvell PXA271 (Crossbow imote2)
PCM023 -- NXP LPC22xx ARM7
SAM7S_EK -- Atmel AT91SAM7S256 (64KB RAM / 256KB Flash ROM)
SAM7X_EK -- Atmel AT91SAM7X512 (128KB RAM / 512KB Flash ROM)
SAM9RL64 -- Atmel AT91SAM9RL64EK (64MB RAM / 256MB Flash ROM)
SAM9261_EK -- Atmel AT91SAM9261EK (64MB RAM / 256MB Flash ROM)
SH7216_RSK -- SH-2A 16MB SRAM / 1MB Flash ROM
SH7264_M3A_HS64 -- SH-2A 64MB RAM / 516MB Flash ROM
SH7264_RSK -- SH-2A 64MB RAM / 64MB Flash ROM
SH7619_EVB -- SH2 8MB RAM / 4MB Flash ROM
STM32Stamp -- STM32F103 Cortex-M3 (ET-STM32 Stamp 512KB RAM / 64KB)
Windows2 -- Windows Emulator
そのほか公開されている事例 STM32F4 -- STM32F4-Discovery, Netduino Plus, FEZ Cerberus Oberon microsystems
FM3/FM4 -- SK-FM4-U120-9B560, MB9BF506, CQ_FRK_FM3 ksekimoto
RX62
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 15
移植前のチェック
ターゲット・プラットフォーム
RAM/RAM容量(ROM不足は RAMで代用可能)
CPU アーキテクチャ
gcc利用時の最低メモリ目安
RAM 256KB / ROM 512KB (Thumb / Thumb2 命令)
コンパイラとデバッガ
Windows上で動作するクロスコンパイラ
Windows上で動作する JTAG-ICE デバッガ
Native 実装 vs. “OS on OS” 実装
ターゲット・プラットフォームの適正ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 16
移植に必要な知識
組み込みシステム全般 割り込み処理, 割り込みVector, Cache, MMU, PLL
ブートローダ
移植対象のCPU, ターゲット・ボード データシート, 回路図, メモリマップ, クロック
ツール Toolchain(コンパイラ, アセンブラ, リンカ, ライブラリアン)
C, C++, CPUのアセンブラ命令, コマンドプロンプト, VB Script
デバッガ, JTAG ICE, Eclipse, OpenOCD+GDB
OSアーキテクチャとリソース管理 メモリ, タイマ, 割り込み, イベント
.NET Framework と CLR
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 17
ソフトウェア環境とツール
Visual Studio 2012 (VC++ 2012 exp, VC# 2012 exp も可)
Windows SDK 8.0 (MSBuild)
.NET Micro Framework 4.3 SDK (QFE1)
.NET Micro Framework 4.3 Porting Kit (QFE1)
クロスコンパイラ, デバッガ
推奨は ARM RVDS, KEIL MDK
gccは CodeSourcery arm-2014.05-28 (GCC 4.8.3まで)
一部ソースコードが非対応なので自力で問題解決
クロス開発統合環境
Eclipse (自分で作る場合も…)
ソースコード管理
7zip, WinMerge, VSS, svn, …ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 18
ハードウェア環境とツール
JTAG ICE, またはOpenOCD ICE
対応CPUやボード構成をよく確認する
Flash ROM書き込みツール(必要に応じて)
ブートローダ開発環境(必要に応じて)
評価ボード(ターゲットが利用できない場合)
測定器、信号観測ツール
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 19
移植の主要作業
開発環境構築と基本設計
環境変数設定&クロス開発用ビルドスクリプト作成
メモリ割当て設計&Scatter ファイル設定
Solution の作成
ビルド&デバッグ
NativeSampleを動作させる
ブートローダ, 初期化処理 (Clock, Cache, MMU, PLL)
ドライバ, PAL IF (Flash ROMドライバ開発必須, UART)
TinyCLRの動作
TinyBooter, アプリケーション・ロードとデバッグIF
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 20
InterOpの実装
NETMF標準APIに無いOS機能をアプリケーションから呼び出す
使用方法
標準APIに無いドライバの実装
例:USB Host ドライバ, Flash ROM管理,
クリティカルな処理をCまたはアセンブラで記述してアプリケーションから呼び出す
実装方法 C#でAPIを記述、コードをC/C++/アセンブラで記述
パラメータ、リターン値、非同期処理、イベントが利用可能
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 ドットNETまいくろバンザイ倶楽部 21
ビルド&デバッグ
NativeSample
Native Code での”Hello world” 表示出力
ビルド環境の検証(自由にカスタマイズ可能)
ドライバ類の初期化&動作の検証
TinyCLR
.NET Micro Frameworkの移植対象・本体
実行にはIL (コンパイル済アセンブリ)が必須
Product\Sampleディレクトリ(HelloWorld, Network など)
TinyBooter
NETMF 純正ブートローダ(MFDepoy IF)
• メモリ管理• 割り込み• タイマー• 232C/USB
ドライバ
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 ドットNETまいくろバンザイ倶楽部 22
TinyCLRとアセンブリの実行動作
アセンブリ検索
初期化
Debugger 接続
アセンブリのロード
アセンブリの実行
起動
デプロイ後
無し
Flash ROM
読み出し・書き込み
‘F5’ キーでビルド、デプロイ、実行、デバッグ
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 23
考察:Native 環境への移植
利点
全ソースコードが用意されている
ブートローダ, CPU初期化, リソース管理
動作している実機サンプルが入手し易い
割り込み / イベント処理が実装し易い
欠点
未対応アーキテクチャには移植し難い
クロスコンパイル, デバッグ環境を手当てする必要
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 24
考察: OS on OS 環境への移植
利点
OSが用意している開発環境を流用可能
JTAG-ICEの代わりにデバッガで代用可能
1回移植すれば、同一OSへの移植が容易
欠点
参考にするソースコードが用意されていない
動作している実機サンプルが入手し難い
OS依存APIを変換する作業(PAL層開発)が必須(Timer, Event, Select, Socket, …)
ドライバの移植数、作業工数はNativeよりも多いドットNETまいくろバンザイ倶楽部
参考: .NET Micro Framework for Linux
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 25ドットNETまいくろバンザイ倶楽部
組み込みアプリケーション開発
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 26
アプリケーション開発手順
事前調査・基本設計
Interface 仕様の確認 (H/W, S/W, Network, …)
コーディング
Full .NET 環境用コードの流用
ソースコード・デバッグ
エミュレータ, オンライン・デバッガ
Full .NET 環境でのデバッグ (ソース流用化)
デプロイ
Flash ROM焼き, 配布用署名付きコード生成
ドットNETまいくろバンザイ倶楽部
.NET Gadgeteeerで簡単に!
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 27
デバッガ インターフェース
デバッガとの接続手段:3種類から選択
独自ハードウエア開発の注意点
OS更新用のデバッガ(ブート)・スイッチの必須
通常はGPIOタクトSW(ボタン), DIP-SW等を使用
ドットNETまいくろバンザイ倶楽部
ドライバ
ドライバ
ドライバ
Serial (RS232C)
USB
LAN (TCP/IP)Host PC Target
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ .NET Gadgeteer とは?
2014/10/18 ドットNETまいくろバンザイ倶楽部 28
Microsoftリサーチが開発している.NET Micro Framework ベース組み込みシステム統合開発環境とそれを構成するモジュール製品群
MMU無しマイコン上でVisual Studioで開発した.NETアセンブリ(中間コード)をインタプリタ実行
GUI操作で自動的に
初期化コードとクラスライブラリを追加
.NET MF
OS / Driver
Interpreter
App. / Lib.
Gadgeteer
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ .NET Gadgeteer とは?
2014/10/18 ドットNETまいくろバンザイ倶楽部 29
具体的には次のもの ハードウェア
専用メインボード、専用モジュール群、開発環境としてのWindows PC
ソフトウェア ROM化されたOS、組み込み用各種ドライバとライブラリ、
Visual Studio用Plug In(ライブラリとGUIツール、シミュレータ)
新規モジュール開発やカスタマイズ可能 オープンソース
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18
.NET Gadgeteer とは?
C#/VB言語レベルでライブラリと豊富なミドルウェアを提供 プロトコル、グラフィック
ファイルシステム
サービス、マルチスレッド
10種以上のCPUボードと100種以上のアクチュエータ,センサー, ネットワークアダプタ,コネクティビティ,ディスプレイ等のモジュールを提供
ドットNETまいくろバンザイ倶楽部 30
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ IoT (Internet of Things)
IoT と .NET Micro Framework
2010年12月
NETMF搭載FEZ Panda Internet of Things Kit販売開始Network + LED + Switch + Sensor
2014/10/18 31ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ IoT Internet of Things
デバイスとITの架け橋
http://blogs.msdn.com/b/hirosho/
Internet Of Things ハンズオン
http://aka.ms/IoTHandsOn
Microsoft Azure モバイルサービスとセンサー類を接続
IoT 入門キット
ガジェッター IoT 入門キット
EnOcean IoT 入門キット2014/10/18 32ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ IoT入門キット
IoT 入門キット
ガジェッター IoT 入門キット
EnOcean IoT 入門キット
2014/10/18 33ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 34
参考URL
.NET Micro Framework (NETMF)
http://www.netmf.com/
http://netmf.codeplex.com/
http://en.wikipedia.org/wiki/.NET_Micro_Framework
.NET Gadgeteer
http://www.netmf.com/gadgeteer/
https://gadgeteer.codeplex.com/
http://ja.wikipedia.org/wiki/.NET_Gadgeteer
https://www.ghielectronics.com/
http://tinyclr.jp/
ドットNETまいくろバンザイ倶楽部
オープンソースカンファレンス 2014 Tokyo/Fall
ドットNETまいくろバンザイ
2014/10/18 35
まとめとFacebook Group
.NET Micro Frameworkとは?
.NET Micro Framework (英語)
新プラットフォームへの移植 .NET Micro Framework Porting勉強会 (日本語)
組み込みアプリケーション開発とIoT .NET Micro Framework/Gadgeteer 作品自慢(日本語)
ドットNETまいくろバンザイ倶楽部
興味がある方、是非facebook groupにご参加ください!