wlan驱动的代码总结:


http://blog.csdn.net/wanggongzhen1983/article/details/5330202


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结构的进一步初始化,包括指定打开、传送、关闭等函数。

  bwlan_init_sw用来初始化软件适配器部分,也就是会初始化一个wlan_adapter结构体,同时初始化wlan中的命令响应定时器。

  cwlan_create_thread创建主线程,线程函数是wlan_service_main_thread,此函数为wlan驱动中的主要处理函数,负责对接收数据和发送数据完成中断的相应——对应的函数为sbi_get_int_status,此函数将会完成中断处理;对深度睡眠的设备的唤醒——对应的函数为sbi_exit_deep_sleep;对响应设备命令的回复——对应的函数为wlan_process_cmdresp;对设备事件的处理——对应的函数为wlan_process_event

随后的os_sched_timeout用于超时唤醒(睡眠指定的时间后,由时间超时来唤醒),主要是确认线程安全的建立。

  dsbi_register_dev初始化SDIO设备,关于这个函数查看《sdio驱动笔记文档》。

  eSET_NETDEV_DEV实现sysfs中物理设备创建一个与网络类逻辑设备的链接,也就是说将物理设备与网络设备联系起来。

  fwlan_init_fw下载固件至网卡,主要用于命令、时间等的响应。

注意:这里我们区分一下两个函数wlan_tx_packetwlan_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);--->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高通平台WLAN驱动开发文档是用于指导开发人员在高通平台上开发WLAN驱动程序的文档。WLAN驱动程序是一种软件,用于控制和管理无线局域网(WLAN)设备的操作和功能。 该开发文档提供了关于WLAN驱动程序开发的详细信息,包括驱动程序的架构、功能、接口和具体的开发要求。它描述了WLAN设备与操作系统之间的通信方式,例如硬件抽象层(HAL)和操作系统驱动程序接口(OEM-OSI)等。此外,文档还提供了关于WLAN驱动程序编程接口(API)和相关函数的说明,以及如何实现WLAN功能集、网络管理和安全性等方面的指导。 开发人员可以根据这份文档中提供的信息,了解如何在高通平台上开发WLAN驱动程序,并且根据自己的需求进行定制和优化。文档中会包含一些常见问题和解决方案,以帮助开发人员克服开发过程中可能遇到的挑战。 由于WLAN驱动程序的开发涉及到硬件、操作系统和网络协议等多个领域的知识,因此该开发文档对于有经验的开发人员来说尤其有价值。通过合理利用这份文档,开发人员可以更高效地开发和调试WLAN驱动程序,从而提高WLAN设备的性能和稳定性。 总之,高通平台WLAN驱动开发文档是一份指导开发人员在高通平台上开发WLAN驱动程序的详细文档,通过阅读并按照其中的指导进行开发,开发人员可以更好地理解和掌握WLAN驱动程序的开发流程和技术要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值