rtl8812驅動分析(一)

2021-07-03 09:40:29 字數 2460 閱讀 2243

insmod 8188.ko和rmmod 8188.ko時分別呼叫的是:

module_init(rtw_drv_entry);

module_exit(rtw_drv_halt);

所以,找到這兩個函式,就分別找到了初始化和退出函式

初始化:

static

int __init rtw_drv_entry(void)

printk("sw_usb_enable_hcd: usbc_num = %d\n", usb_wifi_host);

sw_usb_enable_hcd(usb_wifi_host);

#endif //config_rtl8723a

#endif //config_platform_arm_sunxi

#ifdef config_platform_arm_sun6i

script_item_value_type_e type;

type = script_get_item("wifi_para", "wifi_usbc_id", &item);

if(scirpt_item_value_type_int != type)

printk("sw_usb_enable_hcd: usbc_num = %d\n", item.val);

wifi_pm_power(1);

mdelay(10);

sw_usb_enable_hcd(item.val);

#endif //config_platform_arm_sun6i

rt_trace(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));

dbg_871x(drv_name " driver version=%s\n", driverversion);

dbg_871x("build time: %s %s\n", __date__, __time__);

#if (linux_version_code >= kernel_version(2,6,24))

//console_suspend_enabled=0;

#endif

rtw_suspend_lock_init();

usb_drv->drv_registered = _true;

return usb_register(&usb_drv->usbdrv);

}

初始化函式主要做的事情:

開啟wifi模組的電源,會根據不同的平台不同的模組進行處理;

初始化掛起鎖,這個後邊再分析,猜是防止多執行緒同時掛起模組時會引起模組問題;

驅動註冊標誌位置1;

註冊usb驅動,因為我們的模組介面是usb介面的,所以對系統來說其實就是個usb裝置,自然要註冊usb驅動。

接著,我們來重點看一下這個註冊的usb驅動:

#ifdef config_rtl8192c

static struct usb_device_id rtl8192c_usb_id_tbl = /* terminating entry */

};struct rtw_usb_drv rtl8192c_usb_drv = ;

static struct rtw_usb_drv *usb_drv = &rtl8192c_usb_drv;

#endif /* config_rtl8192c */

我們的模組是8812cus,但是不知道為何是8192c的配置選項?留著疑問,後邊解決。

註冊的usb驅動中主要提供的介面如下:

probe探測函式

disconnet函式

idtable列表,表示支援的裝置的pidvid資訊

掛起和喚醒函式

在idtables中我們可以看到 rtl8192c_usb_ids的定義,找到它,我們發現,我們的8812cus模組也在其中(通過檢視pid和vid發現我們的模組型號為pid8176,即列表中的第二行):

#define rtl8192c_usb_ids \

/*=== realtek demoboard ===*/ \

,/* default id */ \

/****** 8188cus ********/ \

,/* 8188cu 1*1 dongole */ \

,/* 8188ce-vau usb mincard */ \

,/* 8188ce-vau usb mincard */ \

,/* 8188cu slim solo */ \

這個驅動insmod後,註冊到usb驅動鏈上,當usb裝置接入,由usb子系統列舉後,獲取裝置的描述符,最後通過描述符中的pid和vid資訊為其匹配驅動,通過遍歷usb驅動鏈上的id列表的方式找到支援該裝置的驅動,最後在這個列表中找到匹配,並將裝置和這個驅動繫結。

後續繼續分析wifi驅動的probe的過程,以及一些核心執行緒的建立過程。

NAND驅動分析 (一)

因為nand flash驅動是採用了mtd技術,所以首先對nand硬體驅動層進行分析 以ppc架構為例進行分析,nand flash採用了micron公司的512mb 2k頁大小 的flash晶元 ppc架構的cpu晶元並沒有整合專用的nand flash控制器,而是使用elbc 增強型本地匯流排控...

Linux USB驅動框架分析(一)

linux usb驅動框架分析 一 初次接觸與os相關的裝置驅動編寫,感覺還挺有意思的,為了不至於忘掉看過的東西,筆記跟總結當然不可缺,更何況我決定為嵌入式賣命了。好,言歸正傳,我 說一說這段時間的收穫,跟大家分享一下linux的驅動開發。但這次只先針對linux的usb子系統作分析,因為周五研討老...

Linux USB驅動框架分析(一)

linux usb驅動框架分析 一 初次接觸與os相關的裝置驅動編寫,感覺還挺有意思的,為了不至於忘掉看過的東西,筆記跟總結當然不可缺,更何況我決定為嵌入式賣命了。好,言歸正傳,我說一說這段時間的收穫,跟大家分享一下linux的驅動開發。但這次只先針對linux的usb子系統作分析,因為周五研討老闆...