我想了解使用RTL8187 Wi-Fi芯片與Wi-Fi卡相關的Linux驅動程序源代碼。具體來說,我試圖在USB協議層跟蹤Linux與ALFA AWUS036H USB Wi-Fi卡的交互。我一直在使用兩種方法來做到這一點的源代碼和2)
迄今1)
把printk()
陳述觀看的usbmon
的十六進制輸出。使用這兩種方法我可以追蹤什麼正在發生低的水平,但沒有爲什麼任何理解它是在一個較高水平發生。Linux USB內核驅動程序如何與USB Wi-Fi卡內的EEPROM交互?
在這一點上我特別注意的是,它看起來好像rtl8187驅動程序所做的第一件事情是USB設備中的EEPROM上的一整個讀/寫操作,而我沒有很好的理解EEPROM如何在USB設備內部(或者外部)工作。作爲一個例子,我已經把打印語句周圍的代碼行中/usr/src/linux/drivers/net/wireless/rtl818x/rtl8187/dev.c
,我相信從USB Wi-Fi卡的MAC地址是閱讀:
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和EEPROM的USB設備內部之間?我對從哪裏開始尋找更多信息感到不知所措。我一直認爲像EEPROM這樣的東西可以從USB編程器中抽象出來,並帶有簡單的USB信息,然後該器件將轉換成EEPROM中必須發生的任何事情。進一步深入研究USB驅動程序代碼,雖然它看起來像是發送給EEPROM的高脈衝和低脈衝,以及操作之間的特定(雖然非描述性)時間延遲,這似乎意味着不存在這樣的抽象。我真的不知道該從哪裏開始瞭解所有元素如何一起工作。