wlan驱动的代码总结:
一:wlan_probe函数中要完成的工作(主要是wlan_add_card函数)
此函数在sdio的驱动中已经讲诉过是wlan设备的一些准备工作及注册过程,它主要完成以下几件事情:
1)、建立net_device结构,关于此结构的扩展可以参看《linux设备驱动》网络驱动章节。相应的调用是alloc_etherdev函数,此函数为alloc_netdev的上层调用(细节请参看《linux设备驱动》)。
2)、接下来是对net_device结构中一些成员的初始化,完成这此注册的函数是内核函数register_netdev。
关于其中详细的初始化过程,其大致的流程如下:
a、对net_device结构的进一步初始化,包括指定打开、传送、关闭等函数。
b、wlan_init_sw用来初始化软件适配器部分,也就是会初始化一个wlan_adapter结构体,同时初始化wlan中的命令响应定时器。
c、wlan_create_thread创建主线程,线程函数是wlan_service_main_thread,此函数为wlan驱动中的主要处理函数,负责对接收数据和发送数据完成中断的相应——对应的函数为sbi_get_int_status,此函数将会完成中断处理;对深度睡眠的设备的唤醒——对应的函数为sbi_exit_deep_sleep;对响应设备命令的回复——对应的函数为wlan_process_cmdresp;对设备事件的处理——对应的函数为wlan_process_event。
随后的os_sched_timeout用于超时唤醒(睡眠指定的时间后,由时间超时来唤醒),主要是确认线程安全的建立。
d、sbi_register_dev初始化SDIO设备,关于这个函数查看《sdio驱动笔记文档》。
e、SET_NETDEV_DEV实现sysfs中物理设备创建一个与网络类逻辑设备的链接,也就是说将物理设备与网络设备联系起来。
f、wlan_init_fw下载固件至网卡,主要用于命令、时间等的响应。
注意:这里我们区分一下两个函数wlan_tx_packet与wlan_process_tx。在wlan_service_main_thread中我们调用的是wmm_process_tx函数用来推送数据,而wmm_process_tx主要使用wlan_process_tx来推送数据,也就是说我们实际使用的是wmm_process_tx函数来推送数据(有关wmm的一些知识,请参阅另一篇<文档IEEE 802.11e分析文档>)。
那么另一个函数wlan_tx_packet呢?我们注意到这个初始化语句dev->hard_start_xmit = wlan_hard_start_xmit,这是对设备用来实际操作数据推送的函数的初始化,将缓冲区中的数据推送至网卡的这个过程将由此函数完成。这个函数实际调用的函数即是wlan_tx_packet函数,我们在看一下wlan_tx_packet,它会调用wmm_map_and_add_skb将数据放入wmm的缓冲区,然后唤醒主线程wlan_service_main_thread去处理,主线程会调用wmm_process_tx函数,剩下步骤请参看上面。
对于接收数据的函数来说,则是wlan_process_rx_packet,它是在检测到设备发出数据到达的中断时被调用的,也就是说在sbi_get_int_status函数中。
注册过程
sbi_register();--->
sdio_register_driver(&wlan_sdio)-->
int sdio_register_driver(struct sdio_driver *drv)
{
drv->drv.name = drv->name;
drv->drv.bus = &sdio_bus_type;
return driver_register(&drv->drv);
}
--->bus_add_driver(drv);--->
driver_attach(drv);-->
bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);-->
driver_probe_device(drv, dev);-->
drv->bus->match(dev, drv)--》驱动定义的ID和通过sdio读出模块的ID对比看是否一致)
really_probe(dev, drv);---->
wlan_probe--->真正调用驱动的probe
driver_bound(dev);--->
分享到:
相关推荐
好用的软件啊
中国移动WLAN接收器的驱动程序。除磊科设备外均能用,并能自动连接。
wlan万能驱动,主要是用来破解WIFI密码所用
Yoga RTL8723A USB2.0 Wlan 无线网卡驱动
移动cmcc赠送设备 星辉WLAN 驱动文件
Intel WLAN网卡驱动包 包括 32 64 。
win7 驱动,联想的,网卡驱动,无线网卡驱动
博通bcm943602cdp 黑苹果 win10 1803 1709亲测可用的蓝牙和wlan驱动,签名日期是2016年12月
wlan信号加强器驱动 805N rt8187—usb
802.11 bg wlan无线网卡驱动是Ralink公司官方开发的一款无线网卡驱动程序,802.11 bg wlan驱动的特点就是兼容型好、稳定性高,现在的大部分厂商生产的笔记本都可以使用该驱动,欢迎下载使用。,欢迎下载体验
浅析wlan驱动和sd卡硬件绑定的简单流程.rar
usb wlan无线网卡驱动以及上位机,适合没有无线网卡硬件的朋友,可以用单片机与之通讯,然后用上位机进行2次开发.
Wlan-ANE771驱动win7-32位
博通bcm943602cdp 黑苹果 win10 1803 1709可用的蓝牙wlan驱动,亲测win10 64位 1803下可以满速1.3Gbps,理论上94360应该也能用
基于T-Kernel的WLAN网卡驱动设计,邹昱,,无线网络与嵌入式系统的互联有着广阔的应用前景。本文从T-Kernel操作系统的特点及其设备驱动的结构入手,提出了WLAN网卡硬件设计方案
bcm94360CD Wlan和Bluetooth,适合在Windows下面驱动网卡和蓝牙
linux设备驱动归纳总结(三):4.ioctl的实现 文章相关代码
联想 S10-3C 笔记本WLAN驱动,有没有用,大家试试看
RTL8191S驱动
大家都在找的无线网卡驱动磊科的 realtek_wlan_10863811252010无线网卡驱动