Linux无线驱动mac80211中有太多的结构,像struct net_device,struct ieee80211_hw,struct ieee80211_vif和struct ieee80211_local等等,太多的结构,我不知道它们包含什么信息,以及它们是什么时候初始化的。我如何了解它们以及无线驱动程序的整个架构?
struct net_device
struct ieee80211_hw
struct ieee80211_vif
struct ieee80211_local
sdnqo3pr1#
你可能想看看约翰内斯贝格(mac 80211维护者)的幻灯片here。他们可能有点过时,但应该给你一个给予的地方开始。Linux WiFi内核堆栈的高级描述:
netif_rx()
ndo_start_xmit()
struct net_device_ops
nl80211
include/uapi/linux/nl80211.h
cfg80211
net/wireless
net/wireless/nl80211.c
cfg80211_ops struct
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
mac80211
cfg80211_ops
net/mac80211/cfg.c
ieee80211_ops struct
drivers/net/wireless/iwlwifi/mvm/mac80211.c
ieee80211_allow_hw()
ieee80211_alloc_hw()
cfg80211 wiphy_new()
ieee80211_local struct
ieee80211_hw
ieee80211_local
wiphy
ifconfig
ieee80211_vif
1条答案
按热度按时间sdnqo3pr1#
你可能想看看约翰内斯贝格(mac 80211维护者)的幻灯片here。
他们可能有点过时,但应该给你一个给予的地方开始。
Linux WiFi内核堆栈的高级描述:
*数据路径:正在接收的数据从无线驱动程序传递到netdev核心(通常使用
netif_rx()
)。从那里,网络核心将通过TCP/IP堆栈代码传递它,并将其排队在用户空间进程将从中读取它的相关套接字上。在Tx路径上,数据包将使用ndo_start_xmit()
回调从netdev核心发送到无线驱动程序。驱动程序注册(像其他netdevices,如以太网驱动程序)通过使用struct net_device_ops
来回调一组操作。*控制路径:此路径是用户空间控制WiFi接口/设备,执行扫描/认证/关联等操作的路径。用户空间接口基于netlink,名为
nl80211
(参见include/uapi/linux/nl80211.h
)。您可以 * 发送命令 * 和 * 获取响应事件 *。nl80211
命令时,它最初由cfg80211
内核模块处理(它的代码在net/wireless
下,处理程序在net/wireless/nl80211.c
下)。cfg80211
通常会调用较低级别的驱动程序。如果全MAC硬件具体的硬件驱动程序在cfg 80211下面。cfg80211
下面的驱动程序通过使用cfg80211_ops struct
向cfg80211
注册一组op。例如,请参见brcmfmac驱动程序(drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
)mac80211
,这是一个实现802.11 MAC层的内核模块。在这种情况下,cfg80211
将与mac80211
对话,mac80211
将反过来使用硬件特定的低级驱动程序。这方面的一个例子是iwlwifi(用于英特尔芯片)。mac80211
通过使用cfg80211_ops
(参见net/mac80211/cfg.c
)将其自身注册到cfg80211
。特定的HW驱动程序通过使用ieee80211_ops struct
(例如drivers/net/wireless/iwlwifi/mvm/mac80211.c
)将其自身注册到mac80211
。ieee80211_allow_hw()
。ieee80211_alloc_hw()
获取硬件驱动程序使用的私有数据结构的大小。它反过来调用cfg80211 wiphy_new()
,cfg80211 wiphy_new()
为wiphy结构分配足够的空间,ieee80211_local struct
(由mac80211
使用)和硬件驱动程序专用数据ieee80211_hw
是ieee80211_local
中的一个嵌入式结构,它对硬件驱动程序是“可见的”。(wiphy
、ieee80211_local
、ieee80211_hw
)表示连接的单个物理设备。ifconfig
进行控制。每个这样的虚拟接口都由ieee80211_vif
表示。此结构体还包含由HW驱动程序访问的最后私有结构体。多个接口可以用于运行类似工作站的东西在wlan 0上的AP和在wlan 1上的AP(这取决于HW能力是可能的)。