RTL8187 Wi-Fi チップを使用して Wi-Fi カードに関連付けられている Linux ドライバーのソース コードを理解しようとしています。具体的には、Linux と ALFA AWUS036H USB Wi-Fi カードの USB プロトコル層でのやり取りを追跡しようとしています。私はこれまで、2 つの方法を使用してこれを行ってきました。ソース コードにステートメントを1)
配置し、. これらの 2 つの方法を使用すると、低レベルで何が起こっているかを追跡できますが、高レベルで何が起こっているのかを理解することはできません。 printk()
2)
usbmon
この時点で特に気になったのは、rtl8187 ドライバーが最初に行うことの 1 つは、USB デバイス内の EEPROM に対する読み取り/書き込みの全負荷であるように見えることです。 EEPROM が USB デバイスの内部 (または外部) でどのように機能するか。一例として/usr/src/linux/drivers/net/wireless/rtl818x/rtl8187/dev.c
、USB Wi-Fi カードから MAC アドレスを読み取っていると思われるコード行の周りに print ステートメントを配置しました。
printk(KERN_INFO "COMMENCING reading MAC address, I think...");
eeprom_93cx6_multiread(&eeprom, RTL8187_EEPROM_MAC_ADDR,
(__le16 __force *)mac_addr, 3);
printk(KERN_INFO "DONE reading MAC address, I think...");
今、私はこのようなものがほんの数個の USB 制御メッセージを生成するかもしれないと予想していましたがprintk()
、 のサブルーチン内にある他のステートメントはeeprom_83cx6_multiread()
、この単純な操作が 60 以上の USB 制御メッセージの読み取りとおそらく同じ数の USB 制御のオーダーで生成することを示唆しています書いています。
USB デバイス内の USB と EEPROM の間の相互作用を説明する高度なチュートリアルはどこかにありますか? どこから情報を探し始めたらよいのか途方に暮れています。私は常に、EEPROM のようなものが USB プログラマーから離れて抽象化され、デバイスが EEPROM で発生する必要のあるものに変換する単純な USB メッセージを使用すると想定していました。USB ドライバー コードをさらに掘り下げると、EEPROM に高パルスと低パルスが送信されているように見えますが、操作間に特定の (説明的ではありませんが) タイミング遅延があり、そのような抽象化が存在しないことを意味しているようです。すべての要素がどのように連携しているかを理解するには、どこに行けばよいのか本当にわかりません。