6
10

More than 3 years have passed since last update.

MacOSでドライバ開発:DriverKit入門① ~DriverKit用プロジェクトの作成~

Last updated at Posted at 2021-06-16

このシリーズについて

これまでのMacOSでデバイスドライバを作成する場合、カーネル拡張(Kernel Extension)を作成する必要がある。
カーネル拡張はその名の通りカーネル空間で実行されるため、カーネルパニックなどの致命的なエラーを起こしやすく、開発時のデバッグにも時間がかかる。
これは、デバイスドライバ開発が難しいといわれる一つの要因だと言えるだろう。

そんなデバイスドライバ開発に対して、大きな転機が訪れる。
Apple社はWWDC2019において、macOSのセキュリティと安定性を高めるためにデバイスドライバをカーネル空間からユーザー空間に移動することを発表した。
これは、新しいフレームワークである「System Extension」と「DriverKit」を使用することで、ユーザー空間のデバイスドライバの作成ができるようになるというものだ。

さらに、WWDC2020で発表された新しいOS「macOS Big Sur」からはカーネル拡張ベースのドライバが一部を除いて実行できなくなってしまった

デバイスドライバの開発者としては、いち早くこの新しいドライバ技術を身につける必要があるだろう。

新しいフレームワークということもあり、ネット上の情報が圧倒的に少ないので手探りでの勉強になった。
このシリーズを通して、これまでの勉強で身につけたデバイスドライバの開発に必要な知識を共有していきたいと思う。

ドライバプロジェクトの作成

カーネル拡張で実装したドライバはSystem/Library/Extensionまたは/Library/Extension配下に配置するだけでOS側からドライバとして認識されていた。
DriverKitドライバの場合、SystemExtensionフレームワークのAPIを呼んでシステム拡張(system extension)としてインストールする必要がある。
システム拡張インストールAPIを呼ぶアプリケーションを作成して、アプリバンドル内のContents/Library/SystemExtensionsフォルダにドライバを配置しないとドライバをインストールできない。

このような構成のアプリ+ドライバ用のプロジェクトの作成手順を見ていこう

プロジェクト作成

今回はXcode12を使用している。新しいフレームワークを使用するということもあり最新のXcodeの方がテンプレートとかも改良されていて開発が快適だ。

まずアプリケーションテンプレートを使ったプロジェクトを作成する。
https://raw.githubusercontent.com/gmorimoto-spc/qiita-src/master/driverKit/01_createProject.png

https://raw.githubusercontent.com/gmorimoto-spc/qiita-src/master/driverKit/02_createApp.png

ドライバの追加

プロジェクトが作成できたら、プロジェクトに新しいターゲットを追加してDriverKitドライバをプロジェクトに追加する。

https://raw.githubusercontent.com/gmorimoto-spc/qiita-src/master/driverKit/03_addTarget.png

ターゲットのテンプレートの選択画面で一番下にシステム拡張があるので、そこからDriverKitのテンプレートを選択する。テンプレートを使用することによって、アプリやドライバの基本設定、アプリバンドルのファイル構成設定を自動的にXcodeが設定してくれる。

https://raw.githubusercontent.com/gmorimoto-spc/qiita-src/master/driverKit/04_addDriver.png

設定の確認

新しいターゲットがプロジェクトに追加された。ドライバの設定を確認するとすでにDriverKit.frameworkがフレームワークとして追加されている。

https://raw.githubusercontent.com/gmorimoto-spc/qiita-src/master/driverKit/05_driverSetting.png

アプリの設定を確認すると、プロジェクトにドライバを追加したことによりアプリのContentとしてドライバが追加されている。

https://raw.githubusercontent.com/gmorimoto-spc/qiita-src/master/driverKit/06_appSetting.png

アプリのBuild Phaseの方でもドライバが追加されている。

https://raw.githubusercontent.com/gmorimoto-spc/qiita-src/master/driverKit/07_appBuildPhase.png

この手順でプロジェクトを作成することによってここら辺を設定する手間が省ける。

おわりに

シリーズの第1弾はプロジェクトの作成で終了。次回はシステム拡張インストール用のAPIをアプリ側に実装していく。

参考資料

https://developer.apple.com/system-extensions/
https://developer.apple.com/videos/play/wwdc2019/702/
https://developer.apple.com/documentation/driverkit
https://developer.apple.com/documentation/kernel/implementing_drivers_system_extensions_and_kexts
https://developer.apple.com/support/kernel-extensions/

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10