雑記帳

ちょっとした文章とかメモ書きとか。

Mac kernel extenstionとはなんぞや

kernel extentionとはなんぞ

Mac OSXのカーネルにはLinuxカーネルやNTカーネルと同じく
カーネルエクステンションの機構があります。

そしてOSXではXcodeの強力な手助けがあります。

既にkernel extensionのひな形がXcodeに登録されているので
これを使わない手段はないですね。

作ってみる

登録されているひな形です:

今回はI/O Driverとして作成を試みてみましょう。

Javaっぽいような命名規則でcompany nameをつけます。
com.driver.helloworld
くらいにしておきます。

info.plistを編集して
InfoDiecttory version6.0(OSX 10.5+)
をしておきます。

Xcode4.0+ではデフォルトのコンパイラがLLVM clangになっていますが、
これだとカーネルエクステンションがどうも作れないようで
LLVM clang -> LLVM gcc 4.2
へ。

動かしているMacのカーネルのアーキテクチャには注意です。

  • powerpc  or i386 (<=10.5)
  • i386 or x86_64 10.6
  • x86_64 10.7

になっています。雪豹なMacを使っている人は注意してください。
カーネルのアーキテクチャが違っていてロードできなくてかなりハマりました…orz

以下プロジェクトの設定のスクリーンショットです。

こんな感じなxcode projectが作れればkextが作成できます。

ロードしてみる

作成したカーネルエクステンションは

$sudo chwon -R root:wheel <作成したエクステンションの名前>.kext

で所有者を変更して

$sudo kextload <作成したエクステンションの名前>.kext

でロードし、

$sudo kextunload <作成したエクステンションの名前>.kext

でアンロードできる。

ほかには?

他にもどうやら

・USBデバイスドライバとか
・ファイルシステムドライバとか
・ネットワークドライバとか

作れるらしい???

参考文献:
https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KernelProgramming/style/style.html
OSX and iOS Kernel Programming,Apress, chapter 3
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。