私がドライバー開発に不慣れであることを述べて、この質問を限定させてください。RealTek 8187L チップを使用する USB Wi-Fi カードのドライバー ソース コードを理解しようとしています。以前の質問に対する適切な回答に基づいて、調査する必要のある関連ドライバー ソース コードがdrivers/net/wireless/rtl818x/rtl8187/dev.c
(Linux カーネル ソース内に) あることを確認しました。
いくつかの読み取りを行うと、USB ドライバーusb_driver
がカーネルに登録する構造体をインスタンス化するように見えます。これは、(とりわけ) ドライバーがサポートするデバイス ( .id_table
)、サポートされるデバイスが接続されたときに実行する関数 ( .probe
)、およびオプション.fops
で記述します、ユーザー空間との相互作用のための一連のファイル操作 ( )。usb_driver
8187L ドライバーに関連付けられた構造体には、次のものが含まれていません.fops
。
static struct usb_driver rtl8187_driver = {
.name = KBUILD_MODNAME,
.id_table = rtl8187_table,
.probe = rtl8187_probe,
.disconnect = __devexit_p(rtl8187_disconnect),
.disable_hub_initiated_lpm = 1,
};
module_usb_driver(rtl8187_driver);
したがって、ユーザー空間プログラムがこのドライバーとどのようにやり取りしてデータを送受信しているかについて興味があります。
Linux Journalの古い投稿(2001 年) には、次の抜粋があります。
fops およびマイナー変数はオプションです。ほとんどの USB ドライバー
は、SCSI、ネットワーク、または TTY サブシステムなど、別のカーネル サブシステムにフックします。これらのタイプのドライバーは、自分自身を他のカーネル サブシステムに登録し、ユーザー空間の対話はそのインターフェイスを介して提供されます。ただし、MP3 プレーヤーやスキャナーなど、一致するカーネル サブシステムを持たないドライバーの場合は、ユーザー空間と対話する方法が必要です。USB サブシステムは、マイナー デバイス番号と一連の file_operations [fops]関数ポインターを登録する方法を提供し、このユーザー空間の対話を可能にします。
したがって、8187L ドライバーはおそらく「別のカーネル サブシステムにフックする」ドライバーのようです。したがって、私の質問は、関数ポインターを提供しないドライバーの場合、この他のカーネルサブシステムとの相互作用はどのように行われるのでしょうか? 最終的には、プログラムが実際にやり取りしてデータを送受信しているドライバー コードのポイントを見つけて、コードの動作を引き続き分析できるようにしたいと考えています。.fops