我们已经知道在insmod 8812.ko的时候,已经注册了一个usb驱动usb_drv->usbdrv, 其中的成员probe是最关键的,接下来我们来详细看一下probe的过程。
.usbdrv.probe = rtw_drv_init,
第一步:
static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *did)
{
int i;
uint status = _FAIL;
_adapter *if1 = NULL, *if2 = NULL;
struct dvobj_priv *dvobj = NULL;
RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
//step 0.
process_spec_devid(did);
从函数名可以知道这是为了处理一些特别的设备,识别这些特殊设备也是通过PIDVID信息来的。
static void process_spec_devid(const struct usb_device_id *pdid)
{
u16 vid, pid;
u32 flags;
int i;
int num = sizeof(specific_device_id_tbl)/sizeof(struct specific_device_id);
for(i=0; i<num; i++)
{
vid = specific_device_id_tbl[i].idVendor;
pid = specific_device_id_tbl[i].idProduct;
flags = specific_device_id_tbl[i].flags;
#ifdef CONFIG_80211N_HT
if((pdid->idVendor==vid) && (pdid->idProduct==pid) && (f

本文详细阐述了在insmod过程中,如何通过处理特殊设备、初始化设备对象、接口及网络节点,实现USB驱动的注册与功能初始化。
&spm=1001.2101.3001.5002&articleId=46574567&d=1&t=3&u=dcd140f9876b4fb9a3a54dccbb95d202)
1539

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



