nl80211库和cfg80211如何工作?

Raf*_*fal 43 c linux-device-driver linux-kernel wifi 802.11

我想详细了解如何工作nl80211cfg80211工作.功能流程,如何nl80211使用网络工具,如互动wpa_supplicant,iw.

Plz建议我参考一些有用的链接或书籍.

jml*_*jml 58

为了能够从用户空间控制无线驱动程序,使用内核和用户空间之间的一些IPC通信进程.

  • 首先ioctl使用依赖于供应商的API.
  • 1996年,Jean Tourrilhes创建了无线扩展(WE或WEXT).

无线扩展(WE)是一种通用API,允许驱动程序向用户空间公开特定于常见无线LAN的配置和统计信息.

  • 2006年,John Linville创建了mac80211,Johannes Berg创建了cfg80211nl80211.它旨在取代无线扩展.

    +-------------+
    |             |
    |  Userspace  |
    |             |
    +-------------+
          ^
    - - - | - - - - 
          | nl80211
          v
    +-------------+
    |             |
    |  cfg80211   |
    |             |
    +-------------+
    +-------------+
    |             |
    |  mac80211   |
    |   driver    |
    |             |
    +-------------+
    
    Run Code Online (Sandbox Code Playgroud)

重要的一点是nl80211/cfg80211/mac80211不再使用ioctl,它们使用netlink.

因此,像iw,hostapdwpa_supplicant这样的工具使用一些netlink库(如libnllibnl-tiny)和netlink接口公共头,当然是nl80211.h.

没有那么多的文档,但我建议你阅读libnl文档,然后阅读新的源代码(因为我使用了libnl).


art*_*rtm 33

一个稍微详细的图片是如何nl80211cfg80211工作与系统的其他部分(user space,kernel,和hardware).

  • nl80211是用户空间软件(之间的界面iw,wpa_supplicant等等)和内核(cfg80211mac80211内核模块,和特定的驱动程序).
  • WiFi驱动程序和硬件可以是Full-MAC或Soft-MAC(参见Wireless_network_interface_controller).
  • cfg80211_ops是一组操作,Full-MAC驱动程序和mac80211模块注册到cfg80211模块.
  • ieee80211_ops是一组软MAC驱动程序注册到mac80211模块的操作.

在此输入图像描述


Aks*_*ngh 6

我已经为 linux 中的无线堆栈创建了一个基本的代码流程图,
从 wpa_supplicant > cfg80211 > mac80211 > ath9k_htc。

该代码已针对 linux 内核 5.4.31 进行跟踪。

这是链接

  • @ItachiTensie我没有使用任何软件,我只是用Google Drawings制作的...... (2认同)

eya*_*lsh 5

请参阅我对如何学习Linux无线驱动程序(mac80211)的结构的答复

在中wpa_supplicant,您可以按照中的代码进行操作src/drivers/driver_nl80211.c。这是一个wpa_supplicant驱动程序(不是内核驱动程序,而是wpa_supplicant代码中使用的抽象),用于libnl与内核cfg80211模块进行通信。wpa_supplicant例如,当发出扫描时,将wpa_driver_nl80211_scan被调用。它netlink使用称为命令的命令NL80211_CMD_TRIGGER_SCAN以及扫描所需的所有参数来构建消息。