2

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 に高パルスと低パルスが送信されているように見えますが、操作間に特定の (説明的ではありませんが) タイミング遅延があり、そのような抽象化が存在しないことを意味しているようです。すべての要素がどのように連携しているかを理解するには、どこに行けばよいのか本当にわかりません。

4

1 に答える 1

4

それは本当にチップに依存します。

時々(この場合ではありませんが)、ドライバーはチップに「オフセットOから始まるEEPROMからNバイトを教えてください」と尋ねるだけで、実際にEEPROMと通信し、データを取得して与えるのはチップ次第です。ドライバーに。この場合、ドライバーはそれがどんな種類のEEPROMであるか、またはそれとどのように話すかを知る必要はありません。

ただし、この場合のように、チップはUSBインターフェイスを介してメモリマップのすべて(またはほとんど)を公開し、ドライバーは必要なメモリ位置との間で読み取り/書き込みを行うことで残りのすべてを実行します。eepromに接続されているチップ上のピンは、そのメモリマップを介してアクセスでき、この場合のeepromへのアクセスは、シリアルプロトコルをビットバンギングすることによって行われます。

したがって、ドライバがMACアドレスの値を読み取るために、メモリマップ内の適切なレジスタを読み書きすることにより、これらのピンに対して一度に1つずつ読み取り/書き込みを行います。そして、ピンが切り替えられたり、読み取られたりするたびに、いくつかの制御メッセージが交換されます。そのため、それらの多くが表示されます。

このようにする理由の1つは、コストを削減するために、チップ自体ではなく、ドライバーで可能な限り多くのロジックを実行することです。現在、特にUSBを介してこれを行うことは、(他のアプローチと比較して)非常に非効率的ですが、この場合のEEPROMアクセスの場合、実行頻度がかなり低いため、実際には問題になりません。

于 2012-08-09T10:31:21.857 に答える