gpt4 book ai didi

linux - 如何学习Linux无线驱动(mac80211)的结构?

转载 作者:IT王子 更新时间:2023-10-29 00:24:23 27 4
gpt4 key购买 nike

Linux无线驱动mac80211的结构就这么多。诸如 struct net_device 之类的东西, struct ieee80211_hw , struct ieee80211_vifstruct ieee80211_local等等。如此多的结构,我不明白它们包含哪些信息以及它们何时被初始化。

我如何了解它们以及无线驱动程序的整个架构?

最佳答案

您可能想查看 Johannes Berg(mac80211 维护者)的幻灯片 here .

它们可能有些过时,但应该为您提供一个起点。

Linux WiFi 内核堆栈的高级描述:

  • 当我们谈论 WiFi 时,了解用户空间与内核通信有两条路径很重要:
  • 数据路径 :正在接收的数据从无线驱动程序传递到 netdev 核心(通常使用 netif_rx() )。从那里,网络核心将通过 TCP/IP 堆栈代码传递它,并将其在用户空间进程将从中读取的相关套接字上排队。在 Tx 路径上,数据包将使用 ndo_start_xmit() 从 netdev 核心发送到无线驱动程序。打回来。驱动程序通过使用 struct net_device_ops 注册(像其他网络设备,如以太网驱动程序)一组操作回调。 .
  • 控制路径 : 这个路径是用户空间如何控制 WiFi 接口(interface)/设备并执行类似 的操作扫描 /认证/协会 .用户空间界面基于netlink,名为nl80211 (见 include/uapi/linux/nl80211.h)。您可以发送命令并获取事件作为响应。
  • 当您发送 nl80211它最初由 cfg80211 处理的命令内核模块(它的代码在 net/wireless 下,处理程序在 net/wireless/nl80211.c 下)。cfg80211通常会调用较低级别的驱动程序。如果是 全MAC硬件特定的硬件驱动程序就在 cfg80211 的正下方。下面的司机cfg80211cfg80211 注册一组操作通过使用 cfg80211_ops struct .例如,请参阅 brcmfmac 驱动程序 ( drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c )
  • 对于 MAC软硬件mac80211这是一个实现 802.11 MAC 层的内核模块。在这种情况下 cfg80211将与 mac80211 交谈这将依次使用硬件特定的低级驱动程序。这方面的一个例子是 iwlwifi(对于英特尔芯片)。
  • mac80211cfg80211 注册自己通过使用 cfg80211_ops (见 net/mac80211/cfg.c)。特定的硬件驱动程序向 mac80211 注册自己通过使用 ieee80211_ops struct (例如 drivers/net/wireless/iwlwifi/mvm/mac80211.c )。
  • 您已连接的新 NIC 的初始化从堆栈的底部向上进行。硬件特定的驱动程序将调用 mac80211 的 ieee80211_allow_hw()通常在探测硬件之后。 ieee80211_alloc_hw()获取硬件驱动程序使用的私有(private)数据结构的大小。它依次调用 cfg80211 wiphy_new()它为 wiphy 结构分配了足够的空间,ieee80211_local struct (由 mac80211 使用)和硬件驱动程序私有(private)数据(分层见 ieee80211_alloc_hw 代码)。ieee80211_hwieee80211_local 中的嵌入式结构这对硬件驱动程序是“可见的”。所有这些( wiphyieee80211_localieee80211_hw )代表一个连接的物理设备。
  • 在单个物理设备(也称为 phy)之上,您可以设置多个虚拟接口(interface)。这些基本上就是您所知道的 wlan0 或 wlan1,您可以使用 ifconfig 来控制它们。 .每个这样的虚拟接口(interface)由 ieee80211_vif 表示。 .该结构最后还包含由硬件驱动程序访问的私有(private)结构。多个接口(interface)可用于在 wlan0 上运行一个站点,在 wlan1 上运行一个 AP(这取决于硬件能力)。
  • 关于linux - 如何学习Linux无线驱动(mac80211)的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7157181/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com