回来了,掌声在那里...... 估计也没有多少人看了, 呵呵!自娱自乐,把自己收获的写下来,老来能回首看看。
上章节中重点讲到rtw_usb_if1_init()函数, 该函数在这个WIFI驱动中扮演的角色是,初始化WIFI芯片驱动, 注册网络设备(就是告诉TCPIP链路层已经准备OK)。在这个函数里面会经历怎么样的过程呢, 下面展开分解下:
1.
hal_set_hal_ops()宏定义对应不同的WIFI芯片组的功能函数,我们驱动里面指向rtl8188eu_set_hal_ops(),可以看usb_hal.h文件不同芯片对应的函数不一样哦,最终我来看看这个函数其实就是一个生成回调函数的老巢, 我来对各个回调做注释说明,这样大家就能了解大概了。
void rtl8188eu_set_hal_ops(_adapter * padapter)
{
struct hal_ops *pHalFunc = &padapter->HalFunc;
_func_enter_;
padapter->HalData = rtw_zmalloc(sizeof(HAL_DATA_TYPE));
if(padapter->HalData == NULL){
DBG_8192C("cant not alloc memory for HAL DATA \n");
}
//_rtw_memset(padapter->HalData, 0, sizeof(HAL_DATA_TYPE));
padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
pHalFunc->hal_power_on = rtl8188eu_InitPowerOn;//顾名思义电源,有电才能工作,
pHalFunc->hal_init = &rtl8188eu_hal_init;//有电之后就开始做些芯片的初始化工作了, rtl8188eu_InitPowerOn()在里面被调用 //该函数负责烧写芯片的程序,获得MAC地址,判断版本号,和芯片初始化工作,都是很芯片相关的
pHalFunc->hal_deinit = &rtl8188eu_hal_deinit;//和上面回调对照,顾名思义就是退出的工作了
//pHalFunc->free_hal_data = &rtl8192c_free_hal_data;
pHalFunc->inirp_init = &rtl8188eu_inirp_init;//重点关注函数, 这是一个累不死的搬运工, 不停的读无线数据,大家可以展开这个函数看看
pHalFunc->inirp_deinit = &rtl8188eu_inirp_deinit;//和上面的回调对照,顾名思义就是退出哦
pHalFunc->init_xmit_priv = &rtl8188eu_init_xmit_priv;//提交网路数据的一些变量的初始化
pHalFunc->free_xmit_priv = &