Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc

Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc

ID:51075356

大小:128.50 KB

页数:13页

时间:2020-03-18

Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc_第1页
Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc_第2页
Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc_第3页
Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc_第4页
Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc_第5页
资源描述:

《Linux 下wifi 驱动开发—— USB接口WiFi驱动浅析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux下wifi驱动开发(四)USB接口WiFi驱动浅析前面学习了SDI0接口的WiFi驱动,现在我们來学习一下USB接口的WiFi驱动,二者的区别在于接口不同。而USB接口的设备驱动,我们前面也有学习,比如USB摄像头驱动、USB鼠标驱动,同样都符合LinuxUSB驱动结构:USB设备驱动(字符设备、块设备、网络设备)IUSB核心IUSB主机控制器驱动不同之处只是在于USB摄像头驱动是字符设备,而我们今天要学习的WiFi驱动是网络设备;当然由我们编写的部分还是USB设备驱动部分,下面进入USB接

2、口WiFi驱动的分析,如何分析呢?我们下面从这几个方面入手:从硬件层面上看,WIFI设备与CPU通信是通过USB接口的,与其他WIFI设备之间的通信是通过无线射频(RF)。从软件层面上看,Linux操作系统要管理WIFI设备,那么就要将WIFI设备挂载到USB总线上,通过USB子系统实现管理。而同时为了对接网络,又将WIFI设备封装成一个网络设备。我们以USB接口的WIFI模块进行分析:a-从USB总线的角度去看,它是USB设备;b-从Linux设备的分类上看,它又是网络设备:c-从WIFI木身的角度

3、去看,它又有自己独特的功能及属性,因此它又是一个私有的设备;通过上述的分析,我们只耍抓住这三条线索深入去分析它的驱动源码,整个WIFI驱动框架就会浮现在你眼前。一、框架整理1、USB设备驱动现在我们先从USB设备开始,要写一个USB设备驱动,那么大致步骤如下:a-需要针对该设备定义一个USB驱动,对应到代码中即定义一个usb_driver结构体变量代码如下:[cpp]viewplaincopy1.structusb_driverxxx_usb_wifi_driver;b-填充该设备的usb_di*iv

4、er*结构体成员变量代码如下:[cpp]viewplaincopy1.staticstructusb_driverxxx_usb_wifi_driver={2..name=”XXX_USB_WIFTJ3..probe=xxx_probe,4..disconnect=xxx_disconnect,5..suspend=xxx_suspend,6.・resume=xxx_resume,7.・idatable=xxx_table,8.};c-将该驱动注册到USB子系统代码如下:[cpp]viewplainc

5、opy1.usb_register(&xxx_usb_wifi_driver);以上步骤只是一个大致的USB驱动框架流程,而最大和最复杂的工作是填充usb_driver结构体成员变量。以上步骤的主耍丁作是将USB接口的WIFI设备挂载到USB总线上,以便Linux系统在USB总线上就能够找到该设备。2、网络设备驱动接下來是网络设备的线索,网络设备驱动大致步骤如下:a-定义一个net_device结构体变量ndev代码如下:[cpp]viewplaincopy1.structnet_device*nde

6、v;b-初始化ndev变量并分配内存代码如下:[cpp]viewplaincopy1・ndev二alloc_etherdev();c-填充ndev->netdev_ops结构体成员变量代码如下:[cpp]viewplaincopy1.staticconststructnet_device_opsxxx_netdev_ops={2.・ndo_init=xxx_ndev_init,3・・ndo_uninit=xxx_ndev__unini4・・ndo_open=netdev_open,1.・ndo_sto

7、p=netdev_close,6・・ndo_start_xmit=xxx_xmit_entry,7.・ndo_set_mac_address=xxx_net_set_mac_address,8・・ndo_get_stats=xxx_net_get_stats,9・・ndo_do_ioctl=xxx_ioctl,d-填充ndev->wireless_handlers结构体成员变量,该变量是无线扩展功能代码如下:[cpp]viewplaincopy1.ndev->wireless_handlers=(st

8、ructiw_handler_def*)&xxx_handlers_def;e••将ndev设备注册到网络子系统代码如下:[cpp]viewplaincopy1.register_netdev(ndev);3、WIFI设备本身私有的功能及属性如自身的配置及初始化、建立与用户空间的交互接口、自身功能的实现等。a-自身的配置及初始化代码如下:[cpp]viewplaincopy1.xxx_read__chip_info();2・3.xxx_chip_conf

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。