2004-07-01から1ヶ月間の記事一覧

Porting Drivers to Mac OS X http://developer.apple.com/documentation/Porting/Conceptual/PortingDrivers/ シグナルを使ったデバイスドライバとか http://www-online.kek.jp/~yasu/Kenshu/other-device-driver.html

PCI Device Driverの作り方。 http://www.opendarwin.org/documentation/iokit-1.shtml これの4がユーザエリアのプログラムとの通信。IOUserClientを使って、posixのreadとかwriteとかの代わりをしてる。 Darwin FAQ日本語版 http://ppc.linux.or.jp/~konish…

詳解TCP/IP〈Vol.2〉実装と4.4BSDの設計と実装がmbufの勉強にいいかも。高いけど。 とりあえず偽のパケットをinputPacketに渡して、受信したように思わせることに成功。tcpdumpで見られた。

dlilはデータリンクインターフェースレイヤーで、データリンク層とは違うのか。データリンク層と上層の間か? outputPacket()にわたってくる時点で、イーサネットヘッダはプリアンプルとFCS以外、つまり宛先MACアドレスと送信元MACアドレスはセットされてい…

inputPacket()はキューにパケットを登録する。IONetworkInterface::flushInputQueueで、キューに登録されたパケットがデータリンク層へdlil_input()関数を使って送られるらしい。まだデータリンク層まで来てなかったのですね。 replaceOrCopyPacket()は、現…

受信で本当に重要なのはIONetworkInterface::inputPacketの方か。すると受信の流れは workloopに割り込み関数を登録 データ受信で割り込みが発生し、割り込み関数が呼ばれる 割り込み関数から受信関数が呼ばれる 受信関数がイーサカードからデータを読み取り…

受信で重要そうな関数はIONetworkController::replaceOrCopyPacketっぽい。受信の流れは workloopに割り込み関数を登録 データ受信で割り込みが発生し、割り込み関数が呼ばれる 割り込み関数から受信関数が呼ばれる 受信関数がイーサカードからデータを読み…

イーサネットカードのデバイスドライバで実際にパケットの処理を行うのは、IOOutputQueueから呼び出されるoutputPacket()と、workloopクラスに登録された割り込み関数らしい。 カーネルエリアにあるデバイスドライバとユーザが連絡するにはIOUserClientを使…

ドライバを作るにはI/O Kitを使う。これはC++でクラスを使って作られている。 イーサネットカードのドライバはIOEthernetControllerクラスを継承して作る。 ドライバのライフサイクルは、http://developer.apple.com/documentation/DeviceDrivers/Conceptual…

MacOSXのネットワークデバイスドライバを作る ネットワークデバイスドライバの作り方 http://episteme.arstechnica.com/6/ubb.x?a=tpc&s=50009562&f=8300945231&m=7480952764 I/O KITのリファレンス http://developer.apple.com/documentation/Darwin/Refere…