use*_*124 14 linux wireless device-driver linux-device-driver 802.11
Linux无线驱动程序mac80211中有如此多的结构.之类的东西struct net_device,struct ieee80211_hw,struct ieee80211_vif和struct ieee80211_local等.这么多结构我不明白它们包含什么信息以及何时初始化它们.
我如何了解它们以及无线驱动程序的整体架构?
eya*_*lsh 44
您可以在这里查看Johannes Berg的(mac80211维护者)幻灯片:http://wireless.kernel.org/en/developers/Documentation/mac80211?action = AttachFile&do = get&target = mac80211.pdf
它们可能有些过时,但应该给你一个开始的地方.
Linux WiFi内核堆栈的高级描述:
netif_rx()).从那里,网络核心将通过TCP/IP堆栈代码传递它,并将其排队在用户空间进程将从中读取它的相关套接字上.在Tx路径上,数据包将使用ndo_start_xmit()回调从netdev核心发送到无线驱动程序.驱动程序通过使用来注册(像其他网络设备,如以太网驱动程序)一组操作回调struct net_device_ops.nl80211(请参阅参考资料include/uapi/linux/nl80211.h).您可以发送命令并获取响应事件.nl80211命令时,它最初由cfg80211内核模块处理(它的代码在下net/wireless,处理程序在其中net/wireless/nl80211.c).
cfg80211通常会打电话给较低级别的司机.在Full MAC硬件的情况下,特定的HW驱动程序位于cfg80211下方.下面的驱动程序通过使用cfg80211注册一组操作.例如,参见brcmfmac driver()cfg80211cfg80211_ops structdrivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.cmac80211实现802.11 MAC层的内核模块.在这种情况下,cfg80211将讨论mac80211哪个将依次使用硬件特定的低级驱动程序.这方面的一个例子是iwlwifi(适用于英特尔芯片).mac80211cfg80211通过使用cfg80211_ops(参见net/mac80211/cfg.c)注册自己.特定的HW驱动程序mac80211使用ieee80211_ops struct(例如drivers/net/wireless/iwlwifi/mvm/mac80211.c)注册自己.ieee80211_allow_hw()通常在探测硬件后调用mac80211 .ieee80211_alloc_hw()获取HW驱动程序使用的私有数据结构的大小.它轮流调用cfg80211 wiphy_new()实际分配的空间足够用于wiphy结构,ieee80211_local struct(由其使用mac80211)和HW驱动程序私有数据(分层在ieee80211_alloc_hw代码中可见).
ieee80211_hw是一个嵌入式结构,ieee80211_local其中HW驱动程序是"可见的".所有这些(wiphy,ieee80211_local,ieee80211_hw)表示连接的单个物理设备.ifconfig.每个这样的虚拟接口由一个表示ieee80211_vif.此结构还包含最终由HW驱动程序访问的私有结构.多个接口可用于运行wlan0上的站点和wlan1上的AP(这可能取决于HW功能).| 归档时间: |
|
| 查看次数: |
19163 次 |
| 最近记录: |