eject-io @ kernel/vm

41
次世代 I/Oインターフェイスの提案 2014/05/25 カーネル/VM探検隊 Takeshi HASEGAWA (Twitter: @hasegaw) 本資料中の解説内容は、所属組織における 統一的な見解を示すものではありません。

Upload: takeshi-hasegawa

Post on 29-Jun-2015

582 views

Category:

Devices & Hardware


0 download

TRANSCRIPT

Page 1: Eject-io @ Kernel/VM

次世代 I/Oインターフェイスの提案

2014/05/25 カーネル/VM探検隊 Takeshi HASEGAWA (Twitter: @hasegaw) v  本資料中の解説内容は、所属組織における 統一的な見解を示すものではありません。

Page 2: Eject-io @ Kernel/VM

プロフィール 長谷川 猛 (HASEGAWA Takeshi) twitter: @hasegaw 主にLinuxや仮想化技術を得意とする雑食系SE Xen/KVMを調査、FreeBSD virtioを実装等  興味範囲:仮想化、ストレージ もんはんしようず ゚+.(・ω・)゚+.゚

2

Page 3: Eject-io @ Kernel/VM

おもな著書・寄稿

3

Page 4: Eject-io @ Kernel/VM

Webサイトの記事など

エンジニアなら知っておきたい仮想マシンのしくみ http://gihyo.jp/dev/serial/01/vm_work/

4

Page 5: Eject-io @ Kernel/VM

2000年頃に私が体験した出来事

5

 今度、部活紹介でバトン部がパフォーマンスをします。 放送委員会で照明のお手伝いをしたいと思います

(。・ω・。)担当教諭

 パソコンでスポットライトをチカチカ点けようか(笑) (`・ω・´  )副委員長

 いいね(笑)(人´ω`)委員長

Page 6: Eject-io @ Kernel/VM

2000年頃に私が体験した出来事

6

 副委員長、スポットライト制御用の基盤ができたよ♡(人´ω`)委員長

 え??  …あれ、マジなの?(;゚д゚;)副委員長

Page 7: Eject-io @ Kernel/VM

倉庫で見つけたパソコン  (PC-9801VM2)

体育館内設備

スポットライト制御(I/O基盤の構成イメージ)

7

セントロニクス仕様(IEEE1284)

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

Page 8: Eject-io @ Kernel/VM

コントロール

8

out  0x40,  0xB2(1011  0010)

電球

電球

電球

電球

電球

電球

電球

電球

out  0x40,  0xA5(1010  0101)

電球

電球

電球

電球

電球

電球

電球

電球

out  0x40,  0xFF(1111  11111)

電球

電球

電球

電球

電球

電球

電球

電球

out  0x40,  0x00(0000  0000)

電球

電球

電球

電球

電球

電球

電球

電球

Page 9: Eject-io @ Kernel/VM

ハードウェア

コンピュータ

スポットライト制御システムのデザイン

9

マルチメディアタイマ

セントロニクス仕様インターフェイス

キーボード

スポットライト制御ドライバ(アセンブラでDOS用TSRとして開発)

スポットライト制御システム本体(イントロ、Aメロ、Bメロ等ごとの点灯パターンデータを持つ)

タイマ割込

ライト制御信号

ユーザ操作

相対時間

ライトパターン

Page 10: Eject-io @ Kernel/VM

手作りI/Oについて今と昔の比較

10

昔 今

Page 11: Eject-io @ Kernel/VM

これまでのI/O

•  I/Oポート (8ビット)、割り込み、MMIO o  コンピュータの複雑化にともない簡単なポートI/Oがしづらくなった

•  Serial, GPIO

•  Eject o  簡単

11

Page 12: Eject-io @ Kernel/VM

12

Page 13: Eject-io @ Kernel/VM

13

Page 14: Eject-io @ Kernel/VM

14 http://www.raspberrypi.org/archives/4824

Page 15: Eject-io @ Kernel/VM

どうしてEjectなのか •  電子機器部品の知識なくモノを動かせる

•  ハンダ付け不要

•  お子様ですら “DIY” 可能

•  いまどき CD-ROM ドライブのドライバがないOSは少ない

•  Ejectコマンドは比較的ポータブル

15

Page 16: Eject-io @ Kernel/VM

Ejectの課題 •  ジャンクCD-ROMは安く手に入る(100円~)が、

しかしシステムへの接続にはインターフェイスが必要

E.g.) USB-SATA アダプタ

•  電力供給。5インチのCD-ROMドライブは12V必要

12Vのバッテリをヘルメット上に載せるのは首に負担がかかる

•  そもそもCD-ROMドライブはヘルメットの上に載せるには重すぎる

16

Page 17: Eject-io @ Kernel/VM

そして新しい eject の検討へ •  CD-ROMをIOインターフェイスとして使うなんて!

•  まるでHDDのディスク部分をそのままフラッシュに置き換えた

「SSD」的な発想じゃないか!

•  これでLEDつけたりリモコンのボタン押すならそもそも

ON/OFFできるI/Oインターフェイスがあればいいよね

•  よし作ろう

17

Page 18: Eject-io @ Kernel/VM

組み立てた

18

Page 19: Eject-io @ Kernel/VM

19

Eject-io

Page 20: Eject-io @ Kernel/VM

従来の Eject と Eject-io の比較 従来の Eject Eject-io

実装 CD-ROMドライブ PIC ホストからの見え方 USB Mass Storage USB Mass Storage 制御方法 ioctl, ejectコマンド等 ioctl, ejectコマンド等 EJPM (Eject PER Minute) 20EJPM前後 60EJPM〜 アクチュエータ標準搭載 あり なし

その他のインターフェイス あり 1bit デジタル出力 重さ 500g以上 100g以下 消費電力 5V (USB-Serial) +

12V (CD-ROM駆動用) 5V

20

Page 21: Eject-io @ Kernel/VM

なぜ Eject-io なのか •  PICで実装されたシンプルなEjectデバイス

•  USBマスストレージクラス準拠 o  特殊なドライバなく制御可能

•  ON/OFFの出力が可能 o  Ejectコマンドで出力

•  エンドユーザの手にわたってもフィールドリプログラム可能なファームウエア o  後からの機能拡張やハックが可能、子供のマイコントレーニングにも

•  世界で最も低消費電力な eject 対応デバイス

21

Page 22: Eject-io @ Kernel/VM

アプリケーションと接続された Eject-io

22

Page 23: Eject-io @ Kernel/VM

Eject-io on Linux

23

Page 24: Eject-io @ Kernel/VM

Eject-ioにより軽量化された変態ヘルメット

24

Page 25: Eject-io @ Kernel/VM

25

Eject-io の作り方

Page 26: Eject-io @ Kernel/VM

買い物 •  PIC18F25J50

o  選定理由 o  USB対応、メインメモリ3KB以上 (マスストレージのサンプルが約2KB) o  ブレットボードで使えるICタイプ o  5.0Vだとよかったけど3.3Vタイプで妥協

•  東芝製三端子レギュレータ o  USBバスパワー 5.0V を 3.3V にできればなんでもない

•  USB端子、コンデンサ、LED、抵抗などは手持ちのもので適当に •  ROMライター(PICKit2 とか PICKit3 とか色々ある) •  ブレットボードなど

o  ブレットボード、ジャンパなど

26

Page 27: Eject-io @ Kernel/VM

27

Page 28: Eject-io @ Kernel/VM

28

Page 29: Eject-io @ Kernel/VM

29

Page 30: Eject-io @ Kernel/VM

USBサンプルをロードする

30 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784

Page 31: Eject-io @ Kernel/VM

サンプルをビルド •  USB\Device – Mass Storage – Internal Flash\ サンプルを

MPLAB Xでビルドする

•  ビルドする時に最低限やらないといけないこと o  ターゲットになるデバイスの設定

31

Page 32: Eject-io @ Kernel/VM

ファームウェアのカスタマイズ

32

Page 33: Eject-io @ Kernel/VM

33

Page 34: Eject-io @ Kernel/VM

USBの仕様が知りたい

34 http://usb.org/

Page 35: Eject-io @ Kernel/VM

USBの仕様が知りたい

35

Page 36: Eject-io @ Kernel/VM

プロトコルの解析 •  USBPCap + Wireshark

o  Windows 上でUSBパケットキャプチャできる

•  VMware o  デバッグオプションを .vmx に直書きすると USB のログがとれる

o  VMware ログの仕様上1KB/s以上出力されると出力が止まるので注意

36

Page 37: Eject-io @ Kernel/VM

USBPcap

37

Page 38: Eject-io @ Kernel/VM

USBPcapでキャプチャしたログをWiresharkで見る

38 http://desowin.org/usbpcap/tour.html より引用

Page 39: Eject-io @ Kernel/VM

VmwareのUSB Log

39

Page 40: Eject-io @ Kernel/VM

まとめ •  Eject は、今日よく広く認知されたI/O手段の一つである

o  でも5インチCD-ROMはヘルメット重くなる

o  アクチュエータが不要であればCD-ROMドライブである必要はない

•  Eject-io o  アクチュエータを使う理由がなければPICで置き換え可能

o  PICならUSBマスストレージも簡単に実装可能

o  最も消費電力が低いEject可能デバイスを実現

o  Raspberry Piと組み合わせての5Vバッテリ動作が可能

•  PIC USBプログラミング o  意外と手軽に始められる

o  USBスニファの手段 … VMware ログ、USBPcap + Wireshark

40

Page 41: Eject-io @ Kernel/VM

Thank you

゚+.(・ω・)゚+.゚

41