ミニWDDDS #1 講演資料 第1部 Win-Macドライバ開発

1.8K Views

April 12, 22

スライド概要

次のイベントの講演資料です。
https://sciencepark.connpass.com/event/241381/

profile-image

サイエンスパークの勉強会の資料を公開します。勉強会は2022/3現在、connpassで公開しています。 https://sciencepark.connpass.com

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ミニWDDDS Windows/Mac対応 デバイス向けドライバ開発(初級編) その1 ~ Arduinoで学ぶドライバ開発~ 2022/4/7 デバイスドライバ課 畑正憲 © SCIENCEPARK CORPORATION. 1 SP2204ーE06-2

2.

ミニWDDDS 目次 1. はじめに 1.1 目的 1.2 対象デバイス 2. 開発概要 2.1 開発対象ソフトウェア 2.2 開発環境 2.3 Windowsドライバ開発概要 2.4 Macドライバ開発概要 2.5 ハードウェア仕様 -Arduino UNO R3概要2.6 ハードウェア仕様 - USBディスクリプタ2.7 ハードウェア仕様 – USB通信データ仕様- 3. Windowsドライバ開発(次回) 4. Macドライバ開発(次回) 5. Windows/Macドライバ開発まとめ(次回) 2

3.

ミニWDDDS 1. はじめに

4.

ミニWDDDS 1.1 目的 この講演ではArduinoを使ってWindowsおよびMacのドライバ開 発の初級編として全2回の講演を予定しております。 • • • • • • デバイスドライバ開発者の育成を目的 Arduinoを利用することで安価に自宅でもドライバを学習で きる環境 マルチプラットフォーム対応のデバイス開発 初回は開発環境や対象デバイスの仕様について説明 2回目は7月。Windows/Macのドライバ開発方法の説明を予 定 初級編の後はArduinoをカスタマイズして高機能化を予定 4

5.

ミニWDDDS 1.2 対象デバイス 本講演ではデバイスドライバの開発対象のデバイスとして「Arduino Uno Rev3」を使用します。 Arduino Uno Rev3はCDCクラスの標準ドライバに対応しますが、ドライバ開 発を目的とするため、vendor-specificとみなして開発を行います。

6.

ミニWDDDS 2. 開発概要

7.

ミニWDDDS 2.1 開発対象ソフトウェア 開発対象のソフトウェアは以下の通りです。 • Arduino用のドライバ • デバイス制御アプリ ※ Arduinoの組み込みソフトウェアは講演内容には含みません 実装する機能は以下の通りです。 • 制御アプリからの送信される値によりArduino上のLEDの光の強さを変 化させる アプリ ドライバ 7

8.

ミニWDDDS 2.2 開発環境 項目 Windows OS • Windows 10 21H2 • macOS Monterey(12) 開発環境(IDE) • • • Visual Studio 2019 Windows 11 SDK Windows 11 WDK • Xcode 13 フレームワーク • UMDF V2 • DriverKitフレームワーク 署名用アカウント ※ • Microsoft Developer アカウン ト登録 • Apple Developer Program登録 (有料) • 署名には別途EV証明書が必 要(有料) その他 Mac ※ テスト環境ではテスト署名によてアカウント未登録でも動作可能 8

9.

ミニWDDDS 2.3 Windowsドライバ開発概要(1) 【開発モデル】  WDM • カーネル空間で動作 • 旧式の開発モデルでフル機能を実装する必要がある  WDF • WDMの上で動作するフレームワーク • 定型的な処理はフレームワークが受け持ってくれるため、コード量が少な くて済む • カーネル空間で動作するKMDFとユーザー空間で動作するUMDFがある 9

10.

ミニWDDDS 2.3 Windowsドライバ開発概要(2) 開発モデル 実行形式 説明 WDM カーネルドライバ 旧式の開発モデル。フル機能を実装する必要があるため、開発コス トが上がる。 UMDF(WDF) ユーザードライバ WDFのユーザーモード版。PnPや電源管理などカスタマイズできない 処理がある。 ユーザーモードであるため、開発・デバッグが容易。 KMDF(WDF) カーネルドライバ WDFのカーネルモード版。PnPや電源管理などUMDFではできない処 理に対応可能。 カーネルモードであるため、BSODなどが発生しデバッグに時間がか かりがち。 WinUSB 汎用ドライバ+アプ リケーション Microsoft社製の汎用のUSBドライバをそのデバイス向けにインス トールし、WinUSB APIを使用してアプリケーション層からデバイス にアクセスする。 単純なデバイスとの通信であればドライバ不要で気軽に開発・デ バッグが可能。 LibUSB 汎用ドライバ+アプ リケーション WinUSBのLinuxなどでも使われるOSS版。 マルチプラットフォームのアプリケーション開発で使用可能。 10

11.

ミニWDDDS 2.4 Macドライバ開発概要(1)  カーネル拡張 (kext) • カーネル空間で動作 →問題が発生するとカーネルパニックが発生 • macOS 10.15以降は非推奨 • macOS 11から使用するIOKit毎にロード可否が異なる(USBなどはロード不可)  SystemExtension / DriverKitフレームワーク (dext) • ユーザー空間で動作 → システムの安定性とセキュリティの向上、ユーザー空間からデバッグが可能 • Mac OS 10.15で導入 • 全てのIOKit(kext)に対応するわけではなく、macOSのバージョンアップに 合わせて機能が追加されている 11

12.

ミニWDDDS 2.4 Macドライバ開発概要(2) フレームワーク カーネル拡張 (kext) System Extension / DriverKit OSバージョン 説明 macOS 10.x 10.14まではこの方式のみ 10.15以降は公証(Notarization)が必要 10.15.4以降は非推奨として警告が出る macOS 11 DriverKitに含まれる機能はロード不可 OSのセキュリティレベルを下げることで一部ロード可能 macOS 10.15 以降 HIDDriverKit、NetworkingDriverKit、SerialDriverKit、 USBDriverKit、USBSerialDriverKit macOS 11 AudioDriverKit、BlockStorageDeviceDriverKit、 PCIDriverKit、SCSIControllerDriverKit 新しいフレームワークのDriverKitを使用した開発が必須に! 12

13.

ミニWDDDS 2.5 ハードウェア仕様 -Arduino Uno R3概要⚫ ATmega328PチップおよびATmega16u2チップ搭載。 ⚫ ATmega16u2 は標準ではUSB-シリアルとして認識し、ファー ムのカスタムが可能。 ⚫ ATmega16u2のファームをカスタムすることで他のUSBクラ スでの使用が可能 → 本講演では標準のUSB-シリアルとして使用する。 ⚫ アナログ入力ピン:6個 ⚫ デジタル入出力ピン(3.3V):14個 →デジタル入出力ピンを使用してLEDの明るさを変える(点滅させる) ⚫ I2C、SPI、UARTに対応 13

14.

ミニWDDDS 2.6 ハードウェア仕様 - USBディスクリプタ -(1) Arduino Uno R3のハードウェア仕様をUSBViewを使って解析し ます。 【USBView】 ■デバイスディスクリプタ 14

15.

ミニWDDDS 2.6 ハードウェア仕様 - USBディスクリプタ - (2) 【USBView】 ■コンフィギュレーションディスクリプタ 15

16.

ミニWDDDS 2.6 ハードウェア仕様 - USBディスクリプタ - (3) 【USBView】 ■インターフェースディスクリプタ(1) ※ インタラプト転送は本講座では使用しない 16

17.

ミニWDDDS 2.6 ハードウェア仕様 - USBディスクリプタ - (4) 【USBView】 ■インターフェースディスクリプタ(2) ■エンドポイントディスクリプタ ※ バルクインは本講座では使用しない 17

18.

ミニWDDDS 2.7 ハードウェア仕様 - USB通信仕様 本講座のドライバでは、LEDの明るさ(点滅間隔)を設定する機能を実装します。 そのため、初期化に使用するコントロール転送およびデータ送信をするために必 要となるバルク転送のBulk Outのみ使用します。 【コントロール転送】 No. リクエスト bmRequestType bRequest wValue wIndex wLength 1 SetLineCoding 0x21 0x20 0 0 7 2 SetControlLineState 0x21 0x22 0 0 0 データ {0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x80} - 【バルク転送】 • EndpointAddress 0x04のBulk Outをデバイスへのデータ送信に使用 • 送信データは先頭4バイトがコマンドヘッダ、後続にコマンドデータ バルク転送データ フォーマット コマンドヘッダ (4バイト) コマンドデータ (コマンドに準じたサイズ) 18

19.

ミニWDDDS 3. Windowsドライバ開発(次回) 3.1 3.2 3.3 3.4 3.4 3.5 ドライバ機能 開発環境とフレームワーク 開発テンプレート インストール 制御アプリ デモ

20.

ミニWDDDS 4. Macドライバ開発(次回) 4.1 4.2 4.3 4.4 4.4 4.5 ドライバ機能 開発環境とフレームワーク 開発テンプレート インストール 制御アプリ デモ

21.

ミニWDDDS 5. Windows/Macドライバ開発まとめ(次 回) 5.1 WindowsドライバとMacドライバの違い

22.

ミニWDDDS ご静聴ありがとうございました 22

23.

ミニWDDDS 付録 ■サイエンスパーク デバイスドライバ開発 https://sciencepark.co.jp/device_driver/ ■デバイスドライバ開発問合せ先 https://sciencepark.co.jp/contact/service/ ■デバイスドライバ講座 https://sciencepark.co.jp/device_driver/dvdr/ ■サイエンスパーク株式会社@ Qiita https://qiita.com/spc_qiita 23