オープンソースカンファレンス2014 Tokyo/Fall 
オープンソースになったマイコン開発環境 
.NET Micro Frameworkの紹介。 
- IoT 時代の組み込みOSの主役- 
ドットNETまいくろバンザイ倶楽部 
日高亜友 
info@devdrv.co.jp 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部1
セッション内容 
 .NET Micro Frameworkとは? 
 新プラットフォームへの移植 
 組み込みアプリケーション開発とIoT 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
2
.NET Micro Frameworkとは? 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部3
.NET Micro Framework とは? 
 Microsoft Research 開発の組み込みOS 
 Visual C# / Visual Basicで開発したIL 
.NET アセンブリを中間コードインタプリタで実行 
 豊富なドライバとライブラリを標準装備 
 オープンソース・ライセンスで公開(Apache V2) 
 30種以上のプラットフォームに移植されて動作 
 .NET Micro Framework (NETMF) 移植済みSOC 
 業務アプリケーション・システム応用事例 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
4
ドットNET 
まいくろ 
バンザイ.NET Micro Framework の歴史 
 2001年V 1.0 
SPOT Watch / MSN Direct Service 
(Microsoft リサーチ) 
 2006年V2.0 
Windows 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/2014 
オープンソースカンファレンス2014 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部5
NETMFの本質 
 本来は、Windows CE 未満のプラットフォーム用 
組込みシステム向け製品となるはずだったOS 
 (かつては)移植キット販売済 
 (かつては)製品ライセンス販売予定 
 2010年にオープンソース化 
 Apache V2 ライセンス→無償で商用利用可能 
 競合OSの台頭 
⇒ 製品相当の機能・性能・品質を無料で公開 
 2014年末に何かが起こるかも? 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
6
ドットNET 
まいくろ 
バンザイアーキテクチャ 
 全体構成 
オープンソースカンファレンス2014 Tokyo/Fall 
アプリケーション開発 
ライブラリ開発 
プラットフォーム移植 
2 種類の実装方法 
- Native Platform 
- “OS on OS” solution 
CLR: Common Language Runtime 
HAL: Hardware Abstraction Layer 
PAL: Platform Abstraction Layer 
2014/10/18 ドットNETまいくろバンザイ倶楽部7
ドットNET 
まいくろ 
バンザイOSとしての提供機能 
 IL(.NETのアセンブリ)の実行環境= TinyCLR 
 タイマ, 割り込みハンドラ, マルチスレッド, 
スケジューラ 
 ブートローダ, 各種デバイスドライバ, リソースマネージャ 
 組み込み環境対応 
 MMU 不要 
 最小64KB RAM / 256KB ROM (特別な環境) 
 標準サポートARM7/9/Cortex-M3, Blackfin, SH-2/2A 
 サポート機能 
 ブートローダ, アプリケーションローダ, デバッガIF 
オープンソースカンファレンス2014 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部8
ドライバとサービス 
デバイスコントローラデバイスドライバ 
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 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
9
ドットNET 
まいくろ 
バンザイプラットフォームとアプリケーション 
 自作ボードや未サポートボードに移植 
 CQ出版等の移植事例(参考資料) 
 周辺ハードウェアを自作して動作 
 容易に接続可能→.NET Gadgeteer 
 ライブラリやシステムを開発・改造 
 Emulatorの開発、独自モジュールの開発 
 連係システムやアプリケーションを開発 
 他のシステムとの接続 
 PC, Smart Phone, Cloud連係 
オープンソースカンファレンス2014 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部10
SDK vs. PK (Porting Kit) 
 SDK: 組み込みアプリケーション開発 
 アプリケーション開発に必須 
 Visual Studio / VC# Express に組み込んで使用 
 Simulator, Debugger, Deployment Tools を含む 
 PK: 動作プラットフォームの構築(移植) 
 .NET Micro Framework の移植に必須 
 ほかにクロスコンパイラ(+デバッガ)が必須 
 ツール類を含めた全ソースコードが提供 
 ほとんどをC++ で記述(一部アセンブラ, C, C#) 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
11 
バージョンを 
合わせる必要がある
新プラットフォームへの移植 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部12
ドットNET 
まいくろ 
バンザイ移植方法の選択 
 Native実装 
TinyBooter = NETMF専用ブートローダ 
 TinyCLR直接実装VS. TinyBooter実装 
 TinyCLR / TinyBooter のメンテナンス手順が必須 
 他のブートローダ利用 
 U-Boot, T-Monitor (T-Engine)等 
 Network ブート 
 OS on OS 
 他のOSのアプリケーションとしてNETMFを実装 
 ソースコードが公開されているので 
実際にはどの様にでも作ることが可能 
オープンソースカンファレンス2014 Tokyo/Fall 
Monoへの 
エクスポート 
2014/10/18 ドットNETまいくろバンザイ倶楽部13
サポート・プラットフォーム 
 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 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
14
移植前のチェック 
 ターゲット・プラットフォーム 
 RAM/RAM容量(ROM不足はRAMで代用可能) 
 CPU アーキテクチャ 
 gcc利用時の最低メモリ目安 
 RAM 256KB / ROM 512KB (Thumb / Thumb2 命令) 
 コンパイラとデバッガ 
 Windows上で動作するクロスコンパイラ 
 Windows上で動作するJTAG-ICE デバッガ 
 Native 実装vs. “OS on OS” 実装 
 ターゲット・プラットフォームの適正 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
15
移植に必要な知識 
 組み込みシステム全般 
 割り込み処理, 割り込みVector, Cache, MMU, PLL 
 ブートローダ 
 移植対象のCPU, ターゲット・ボード 
 データシート, 回路図, メモリマップ, クロック 
 ツール 
 Toolchain(コンパイラ, アセンブラ, リンカ, ライブラリアン) 
C, C++, CPUのアセンブラ命令, コマンドプロンプト, VB Script 
 デバッガ, JTAG ICE, Eclipse, OpenOCD+GDB 
 OSアーキテクチャとリソース管理 
 メモリ, タイマ, 割り込み, イベント 
 .NET Framework とCLR 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
16
ソフトウェア環境とツール 
 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, … 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
17
ハードウェア環境とツール 
 JTAG ICE, またはOpenOCD ICE 
 対応CPUやボード構成をよく確認する 
 Flash ROM書き込みツール(必要に応じて) 
 ブートローダ開発環境(必要に応じて) 
 評価ボード(ターゲットが利用できない場合) 
 測定器、信号観測ツール 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
18
移植の主要作業 
 開発環境構築と基本設計 
 環境変数設定&クロス開発用ビルドスクリプト作成 
 メモリ割当て設計&Scatter ファイル設定 
 Solution の作成 
 ビルド&デバッグ 
 NativeSample を動作させる 
 ブートローダ, 初期化処理(Clock, Cache, MMU, PLL) 
 ドライバ, PAL IF (Flash ROMドライバ開発必須, UART) 
 TinyCLR の動作 
 TinyBooter, アプリケーション・ロードとデバッグIF 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
19
InterOpの実装 
 NETMF標準APIに無いOS機能を 
アプリケーションから呼び出す 
 使用方法 
 標準APIに無いドライバの実装 
 例:USB Host ドライバ, Flash ROM管理, 
 クリティカルな処理をCまたはアセンブラで記述して 
アプリケーションから呼び出す 
 実装方法 
 C#でAPIを記述、コードをC/C++/アセンブラで記述 
 パラメータ、リターン値、非同期処理、イベントが利用可能 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
20
ビルド&デバッグ 
 NativeSample 
 Native Code での”Hello world” 表示出力 
 ビルド環境の検証(自由にカスタマイズ可能) 
 ドライバ類の初期化&動作の検証 
 TinyCLR 
 .NET Micro Frameworkの移植対象・本体 
 実行にはIL (コンパイル済アセンブリ)が必須 
• メモリ管理 
• 割り込み 
• タイマー 
• 232C/USB 
ドライバ 
 ProductSampleディレクトリ(HelloWorld, Network など) 
 TinyBooter 
 NETMF 純正ブートローダ(MFDepoy IF) 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部21
TinyCLRとアセンブリの実行動作 
起動 
初期化 
Debugger 接続 
アセンブリ検索 
アセンブリのロード 
アセンブリの実行 
無し 
‘F5’ キーで 
ビルド、デプロイ、 
実行、デバッグ 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
Flash ROM 
読み出し・書き込み 
デプロイ後 
2014/10/18 ドットNETまいくろバンザイ倶楽部22
考察:Native 環境への移植 
 利点 
 全ソースコードが用意されている 
 ブートローダ, CPU初期化, リソース管理 
 動作している実機サンプルが入手し易い 
 割り込み/ イベント処理が実装し易い 
 欠点 
 未対応アーキテクチャには移植し難い 
 クロスコンパイル, デバッグ環境を手当てする必要 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
23
考察: OS on OS 環境への移植 
 利点 
 OSが用意している開発環境を流用可能 
 JTAG-ICEの代わりにデバッガで代用可能 
 1回移植すれば、同一OSへの移植が容易 
 欠点 
参考: .NET Micro Framework for Linux 
 参考にするソースコードが用意されていない 
 動作している実機サンプルが入手し難い 
 OS依存APIを変換する作業(PAL層開発)が必須 
(Timer, Event, Select, Socket, …) 
 ドライバの移植数、作業工数はNativeよりも多い 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
24
組み込みアプリケーション開発 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部25
アプリケーション開発手順 
 事前調査・基本設計 
 Interface 仕様の確認(H/W, S/W, Network, …) 
 コーディング 
 Full .NET 環境用コードの流用 
 ソースコード・デバッグ 
.NET Gadgeteeer 
 エミュレータ, オンライン・デバッガ 
で簡単に! 
 Full .NET 環境でのデバッグ(ソース流用化) 
 デプロイ 
 Flash ROM焼き, 配布用署名付きコード生成 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
26
デバッガインターフェース 
 デバッガとの接続手段:3種類から選択 
ドライバ 
ドライバ 
ドライバ 
 独自ハードウエア開発の注意点 
 OS更新用のデバッガ(ブート)・スイッチの必須 
 通常はGPIOタクトSW(ボタン), DIP-SW等を使用 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
27 
Serial (RS232C) 
USB 
LAN (TCP/IP) Host PC Target
ドットNET 
まいくろ 
バンザイ.NET Gadgeteer とは? 
 Microsoftリサーチが開発している 
.NET Micro Framework ベース組み込みシステム統合 
開発環境とそれを構成するモジュール製品群 
 MMU無しマイコン上でVisual Studioで開発した 
.NETアセンブリ(中間コード)をインタプリタ実行 
 GUI操作で自動的に 
初期化コードとクラスラ 
イブラリを追加 
Gadgeteer 
.NET MF 
App. / Lib. 
Interpreter 
OS / Driver 
オープンソースカンファレンス2014 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部28
ドットNET 
まいくろ 
バンザイ.NET Gadgeteer とは? 
 具体的には次のもの 
 ハードウェア 
 専用メインボード、専用モジュール群、 
開発環境としてのWindows PC 
 ソフトウェア 
 ROM化されたOS、組み込み用各種ドライバとライブラリ、 
Visual Studio用Plug In(ライブラリとGUIツール、シミュレータ) 
 新規モジュール開発やカスタマイズ可能 
 オープンソース 
オープンソースカンファレンス2014 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部29
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 
.NET Gadgeteer とは? 
 C#/VB言語レベルでライブラリと豊富なミドルウェアを提供 
 プロトコル、グラフィック 
 ファイルシステム 
 サービス、マルチスレッド 
 10種以上のCPUボードと 
100種以上の 
アクチュエータ, 
センサー, 
ネットワークアダプタ, 
コネクティビティ, 
ディスプレイ等の 
モジュールを提供 
ドットNETまいくろバンザイ倶楽部30
ドットNET 
まいくろ 
バンザイIoT (Internet of Things) 
 IoT と.NET Micro Framework 
 2010年12月 
 NETMF搭載 
FEZ Panda Internet of Things Kit 販売開始 
Network + LED + Switch + Sensor 
オープンソースカンファレンス2014 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部31
ドット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 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部32
ドットNET 
まいくろ 
バンザイIoT入門キット 
 IoT 入門キット 
 ガジェッターIoT 入門キット 
 EnOcean IoT 入門キット 
オープンソースカンファレンス2014 Tokyo/Fall 
2014/10/18 ドットNETまいくろバンザイ倶楽部33
参考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/ 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
34
まとめとFacebook Group 
 .NET Micro Frameworkとは? 
 .NET Micro Framework (英語) 
 新プラットフォームへの移植 
 .NET Micro Framework Porting勉強会(日本語) 
 組み込みアプリケーション開発とIoT 
 .NET Micro Framework/Gadgeteer 作品自慢(日本語) 
興味がある方、是非facebook groupにご参加ください! 
オープンソースカンファレンス2014 Tokyo/Fall 
ドットNET 
まいくろ 
バンザイ 
2014/10/18 ドットNETまいくろバンザイ倶楽部 
35

2014 1018 OSC-Fall Tokyo NETMF

  • 1.
    オープンソースカンファレンス2014 Tokyo/Fall オープンソースになったマイコン開発環境 .NET Micro Frameworkの紹介。 - IoT 時代の組み込みOSの主役- ドットNETまいくろバンザイ倶楽部 日高亜友 info@devdrv.co.jp ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部1
  • 2.
    セッション内容  .NETMicro Frameworkとは?  新プラットフォームへの移植  組み込みアプリケーション開発とIoT オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 2
  • 3.
    .NET Micro Frameworkとは? オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部3
  • 4.
    .NET Micro Frameworkとは?  Microsoft Research 開発の組み込みOS  Visual C# / Visual Basicで開発したIL .NET アセンブリを中間コードインタプリタで実行  豊富なドライバとライブラリを標準装備  オープンソース・ライセンスで公開(Apache V2)  30種以上のプラットフォームに移植されて動作  .NET Micro Framework (NETMF) 移植済みSOC  業務アプリケーション・システム応用事例 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 4
  • 5.
    ドットNET まいくろ バンザイ.NETMicro Framework の歴史  2001年V 1.0 SPOT Watch / MSN Direct Service (Microsoft リサーチ)  2006年V2.0 Windows 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/2014 オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部5
  • 6.
    NETMFの本質  本来は、WindowsCE 未満のプラットフォーム用 組込みシステム向け製品となるはずだったOS  (かつては)移植キット販売済  (かつては)製品ライセンス販売予定  2010年にオープンソース化  Apache V2 ライセンス→無償で商用利用可能  競合OSの台頭 ⇒ 製品相当の機能・性能・品質を無料で公開  2014年末に何かが起こるかも? オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 6
  • 7.
    ドットNET まいくろ バンザイアーキテクチャ  全体構成 オープンソースカンファレンス2014 Tokyo/Fall アプリケーション開発 ライブラリ開発 プラットフォーム移植 2 種類の実装方法 - Native Platform - “OS on OS” solution CLR: Common Language Runtime HAL: Hardware Abstraction Layer PAL: Platform Abstraction Layer 2014/10/18 ドットNETまいくろバンザイ倶楽部7
  • 8.
    ドットNET まいくろ バンザイOSとしての提供機能  IL(.NETのアセンブリ)の実行環境= TinyCLR  タイマ, 割り込みハンドラ, マルチスレッド, スケジューラ  ブートローダ, 各種デバイスドライバ, リソースマネージャ  組み込み環境対応  MMU 不要  最小64KB RAM / 256KB ROM (特別な環境)  標準サポートARM7/9/Cortex-M3, Blackfin, SH-2/2A  サポート機能  ブートローダ, アプリケーションローダ, デバッガIF オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部8
  • 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 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 9
  • 10.
    ドットNET まいくろ バンザイプラットフォームとアプリケーション  自作ボードや未サポートボードに移植  CQ出版等の移植事例(参考資料)  周辺ハードウェアを自作して動作  容易に接続可能→.NET Gadgeteer  ライブラリやシステムを開発・改造  Emulatorの開発、独自モジュールの開発  連係システムやアプリケーションを開発  他のシステムとの接続  PC, Smart Phone, Cloud連係 オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部10
  • 11.
    SDK vs. PK(Porting Kit)  SDK: 組み込みアプリケーション開発  アプリケーション開発に必須  Visual Studio / VC# Express に組み込んで使用  Simulator, Debugger, Deployment Tools を含む  PK: 動作プラットフォームの構築(移植)  .NET Micro Framework の移植に必須  ほかにクロスコンパイラ(+デバッガ)が必須  ツール類を含めた全ソースコードが提供  ほとんどをC++ で記述(一部アセンブラ, C, C#) オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 11 バージョンを 合わせる必要がある
  • 12.
    新プラットフォームへの移植 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部12
  • 13.
    ドットNET まいくろ バンザイ移植方法の選択  Native実装 TinyBooter = NETMF専用ブートローダ  TinyCLR直接実装VS. TinyBooter実装  TinyCLR / TinyBooter のメンテナンス手順が必須  他のブートローダ利用  U-Boot, T-Monitor (T-Engine)等  Network ブート  OS on OS  他のOSのアプリケーションとしてNETMFを実装  ソースコードが公開されているので 実際にはどの様にでも作ることが可能 オープンソースカンファレンス2014 Tokyo/Fall Monoへの エクスポート 2014/10/18 ドットNETまいくろバンザイ倶楽部13
  • 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 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 14
  • 15.
    移植前のチェック  ターゲット・プラットフォーム  RAM/RAM容量(ROM不足はRAMで代用可能)  CPU アーキテクチャ  gcc利用時の最低メモリ目安  RAM 256KB / ROM 512KB (Thumb / Thumb2 命令)  コンパイラとデバッガ  Windows上で動作するクロスコンパイラ  Windows上で動作するJTAG-ICE デバッガ  Native 実装vs. “OS on OS” 実装  ターゲット・プラットフォームの適正 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 15
  • 16.
    移植に必要な知識  組み込みシステム全般  割り込み処理, 割り込みVector, Cache, MMU, PLL  ブートローダ  移植対象のCPU, ターゲット・ボード  データシート, 回路図, メモリマップ, クロック  ツール  Toolchain(コンパイラ, アセンブラ, リンカ, ライブラリアン) C, C++, CPUのアセンブラ命令, コマンドプロンプト, VB Script  デバッガ, JTAG ICE, Eclipse, OpenOCD+GDB  OSアーキテクチャとリソース管理  メモリ, タイマ, 割り込み, イベント  .NET Framework とCLR オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 16
  • 17.
    ソフトウェア環境とツール  VisualStudio 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, … オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 17
  • 18.
    ハードウェア環境とツール  JTAGICE, またはOpenOCD ICE  対応CPUやボード構成をよく確認する  Flash ROM書き込みツール(必要に応じて)  ブートローダ開発環境(必要に応じて)  評価ボード(ターゲットが利用できない場合)  測定器、信号観測ツール オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 18
  • 19.
    移植の主要作業  開発環境構築と基本設計  環境変数設定&クロス開発用ビルドスクリプト作成  メモリ割当て設計&Scatter ファイル設定  Solution の作成  ビルド&デバッグ  NativeSample を動作させる  ブートローダ, 初期化処理(Clock, Cache, MMU, PLL)  ドライバ, PAL IF (Flash ROMドライバ開発必須, UART)  TinyCLR の動作  TinyBooter, アプリケーション・ロードとデバッグIF オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 19
  • 20.
    InterOpの実装  NETMF標準APIに無いOS機能を アプリケーションから呼び出す  使用方法  標準APIに無いドライバの実装  例:USB Host ドライバ, Flash ROM管理,  クリティカルな処理をCまたはアセンブラで記述して アプリケーションから呼び出す  実装方法  C#でAPIを記述、コードをC/C++/アセンブラで記述  パラメータ、リターン値、非同期処理、イベントが利用可能 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 20
  • 21.
    ビルド&デバッグ  NativeSample  Native Code での”Hello world” 表示出力  ビルド環境の検証(自由にカスタマイズ可能)  ドライバ類の初期化&動作の検証  TinyCLR  .NET Micro Frameworkの移植対象・本体  実行にはIL (コンパイル済アセンブリ)が必須 • メモリ管理 • 割り込み • タイマー • 232C/USB ドライバ  ProductSampleディレクトリ(HelloWorld, Network など)  TinyBooter  NETMF 純正ブートローダ(MFDepoy IF) オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部21
  • 22.
    TinyCLRとアセンブリの実行動作 起動 初期化 Debugger 接続 アセンブリ検索 アセンブリのロード アセンブリの実行 無し ‘F5’ キーで ビルド、デプロイ、 実行、デバッグ オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ Flash ROM 読み出し・書き込み デプロイ後 2014/10/18 ドットNETまいくろバンザイ倶楽部22
  • 23.
    考察:Native 環境への移植 利点  全ソースコードが用意されている  ブートローダ, CPU初期化, リソース管理  動作している実機サンプルが入手し易い  割り込み/ イベント処理が実装し易い  欠点  未対応アーキテクチャには移植し難い  クロスコンパイル, デバッグ環境を手当てする必要 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 23
  • 24.
    考察: OS onOS 環境への移植  利点  OSが用意している開発環境を流用可能  JTAG-ICEの代わりにデバッガで代用可能  1回移植すれば、同一OSへの移植が容易  欠点 参考: .NET Micro Framework for Linux  参考にするソースコードが用意されていない  動作している実機サンプルが入手し難い  OS依存APIを変換する作業(PAL層開発)が必須 (Timer, Event, Select, Socket, …)  ドライバの移植数、作業工数はNativeよりも多い オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 24
  • 25.
    組み込みアプリケーション開発 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部25
  • 26.
    アプリケーション開発手順  事前調査・基本設計  Interface 仕様の確認(H/W, S/W, Network, …)  コーディング  Full .NET 環境用コードの流用  ソースコード・デバッグ .NET Gadgeteeer  エミュレータ, オンライン・デバッガ で簡単に!  Full .NET 環境でのデバッグ(ソース流用化)  デプロイ  Flash ROM焼き, 配布用署名付きコード生成 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 26
  • 27.
    デバッガインターフェース  デバッガとの接続手段:3種類から選択 ドライバ ドライバ ドライバ  独自ハードウエア開発の注意点  OS更新用のデバッガ(ブート)・スイッチの必須  通常はGPIOタクトSW(ボタン), DIP-SW等を使用 オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 27 Serial (RS232C) USB LAN (TCP/IP) Host PC Target
  • 28.
    ドットNET まいくろ バンザイ.NETGadgeteer とは?  Microsoftリサーチが開発している .NET Micro Framework ベース組み込みシステム統合 開発環境とそれを構成するモジュール製品群  MMU無しマイコン上でVisual Studioで開発した .NETアセンブリ(中間コード)をインタプリタ実行  GUI操作で自動的に 初期化コードとクラスラ イブラリを追加 Gadgeteer .NET MF App. / Lib. Interpreter OS / Driver オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部28
  • 29.
    ドットNET まいくろ バンザイ.NETGadgeteer とは?  具体的には次のもの  ハードウェア  専用メインボード、専用モジュール群、 開発環境としてのWindows PC  ソフトウェア  ROM化されたOS、組み込み用各種ドライバとライブラリ、 Visual Studio用Plug In(ライブラリとGUIツール、シミュレータ)  新規モジュール開発やカスタマイズ可能  オープンソース オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部29
  • 30.
    オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 .NET Gadgeteer とは?  C#/VB言語レベルでライブラリと豊富なミドルウェアを提供  プロトコル、グラフィック  ファイルシステム  サービス、マルチスレッド  10種以上のCPUボードと 100種以上の アクチュエータ, センサー, ネットワークアダプタ, コネクティビティ, ディスプレイ等の モジュールを提供 ドットNETまいくろバンザイ倶楽部30
  • 31.
    ドットNET まいくろ バンザイIoT(Internet of Things)  IoT と.NET Micro Framework  2010年12月  NETMF搭載 FEZ Panda Internet of Things Kit 販売開始 Network + LED + Switch + Sensor オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部31
  • 32.
    ドットNET まいくろ バンザイIoTInternet of Things  デバイスとITの架け橋  http://blogs.msdn.com/b/hirosho/  Internet Of Things ハンズオン  http://aka.ms/IoTHandsOn  Microsoft Azure モバイルサービスと センサー類を接続  IoT 入門キット  ガジェッターIoT 入門キット  EnOcean IoT 入門キット オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部32
  • 33.
    ドットNET まいくろ バンザイIoT入門キット  IoT 入門キット  ガジェッターIoT 入門キット  EnOcean IoT 入門キット オープンソースカンファレンス2014 Tokyo/Fall 2014/10/18 ドットNETまいくろバンザイ倶楽部33
  • 34.
    参考URL  .NETMicro 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/ オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 34
  • 35.
    まとめとFacebook Group .NET Micro Frameworkとは?  .NET Micro Framework (英語)  新プラットフォームへの移植  .NET Micro Framework Porting勉強会(日本語)  組み込みアプリケーション開発とIoT  .NET Micro Framework/Gadgeteer 作品自慢(日本語) 興味がある方、是非facebook groupにご参加ください! オープンソースカンファレンス2014 Tokyo/Fall ドットNET まいくろ バンザイ 2014/10/18 ドットNETまいくろバンザイ倶楽部 35