我想了解使用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的高脉冲和低脉冲,以及操作之间的特定(虽然非描述性)时间延迟,这似乎意味着不存在这样的抽象。我真的不知道该从哪里开始了解所有元素如何一起工作。