wifi架构.docxVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
wifi架构

1. USB设备枚举过程???? 设备在插入USB 接口到设备成功找到它自己的驱动这一过程为:当把USB 设备插到USB 接口上后,USB 中央控制器会检测到有设备插入USB 接口了,Linux 内核会给设备分配一个数据结构来代表这个设备,Linux 会分配一个struct usb_device 数据结构来代表该设备,该数据结构记录设备的一些属性及数据。并把该数据结构挂载到一个全局的USB 设备链上。在这一期间主机通过0 号端点得知了设备的一些信息,并知道了设备的厂家号和产品号。然后到一个全局的USB 驱动链上查找(通过调用驱动的probe函数来询问),看看哪个驱动程序支持的设备列表中有该设备的厂家号和产品号。当找到后设备就和驱动匹配上了。?2. 关键数据结构1)?struct cfg80211_ops?:backend description for wireless configuration2) struct wiphy:wireless hardware description3)?struct ieee80211_ops:callbacks from mac80211 to the driver4) struct ieee80211_hw:hardware information and state5) struct ieee80211_channel:channel definition6)?struct usb_driver:identifies USB interface driver to usbcore??3. USB-Wifi驱动架构??? USB-Wifi驱动架构如下图所示:??1)?ieee802.11 协议层???? Linux Kernel中有ieee802.11 协议子层,各个不同型号的硬件设备驱动程序都是实现ieee80211_ops 数据结构中的函数,例如打开是start()函数,发送是tx()函数,关闭是stop()函数,睡眠是suspend函数,唤醒是resume函数等。???? 其代码位于: kernel/net/mac802112) USB无线网卡驱动层???? 由上图可见,USB无线网卡驱动层位于USB与802.11协议层之间,为了使其可正常工作,它必须搞好上下级关系:???? a)?向USB Core注册USB驱动,通过USB通道收发数据?????b) 向ieee802.11注册ieee80211_ops,以供ieee80211随时召唤,然后通过USB通道进行数据传输???????3.1 向USB Core注册USB驱动???????????? 向USB Core注册USB驱动,通过USB通道收发数据,如我的代码为:???????????????????kernel/drivers/net/wireless/ath/ath9k/hif_usb.c[cpp]?view plaincopystatic?struct?usb_driver?ath9k_hif_usb_driver?=?{?//USB?驱动??????.name?=?KBUILD_MODNAME,??????.probe?=?ath9k_hif_usb_probe,??????.disconnect?=?ath9k_hif_usb_disconnect,??#ifdef?CONFIG_PM??????.suspend?=?ath9k_hif_usb_suspend,??????.resume?=?ath9k_hif_usb_resume,??????.reset_resume?=?ath9k_hif_usb_resume,??#endif??????.id_table?=?ath9k_hif_usb_ids,??????.soft_unbind?=?1,??};????int?ath9k_hif_usb_init(void)??{??????return?usb_register(ath9k_hif_usb_driver);?//?把driver注册到USB驱动链中??}????void?ath9k_hif_usb_exit(void)??{??????usb_deregister(ath9k_hif_usb_driver);??//?把driver从USB驱动链中删除??}??????3.2 向ieee802.11注册ieee80211_ops????? 向ieee802.11注册ieee80211_ops,以供ieee80211随时召唤,然后通过USB通道进行数据传输,如我的代码为:在kernel/drivers/net/wireless/ath/ath9k/htc_drv_main.c中定义了ath9k_htc_o

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档