工作中接触了USB转网口设备,通过USB口连接到电视盒子上,会被识别成一个网卡,遇到USB转网口无法获取IP的问题,学习和调试了这部分usb host端的usbnet驱动,进行一下总结。
USB host端的驱动,包括usb host controller(如xhci, ehci), usb core(负责usb设备插入识别,枚举,设备与驱动匹配), usb driver (具体某种USB设备的驱动,如鼠标,USB网卡,U盘)
本篇文章主要介绍USB网卡驱动,属于usb driver。
USB网卡驱动的代码目录在:/kernel/drivers/net/usb/
主要文件包括usbnet.c: 通用核心代码,每个usb网卡驱动都会用到
不同的USB网卡设备会有各自的.c驱动文件,如ax88179_178a.c,rtl8150.c等
每一个这种.c文件中,都会有一个usb_driver结构体,初始化了一些回调函数,如:
static struct usb_driver ax88179_178a_driver = {
.name = "ax88179_178a",
.id_table = products,
.probe = usbnet_probe,
……………..
}
当usb设备插入usb口时,通过id_table,使设备与具体的usb driver匹配上。然后会调用到usb_driver结构体中赋值的probe函数,会调用到usbnet.c中的代码。
usbnet_prob

本文简要介绍了Linux中usbnet驱动的工作原理,包括在`usbnet_probe`和`usbnet_open`后,如何利用`netif_start_queue`允许上层调用设备的发送函数,将数据转化为URB通过USB网卡发送。同时提到了中断端点如何在链接状态变化时通过`intr_complete`更新网络状态。要深入了解,还需研究数据发送、接收的具体流程及以太网相关知识。
最低0.47元/天 解锁文章
2261

被折叠的 条评论
为什么被折叠?



