如何nl80211库& cfg80211工作?

时间:2014-01-30 12:13:16

标签: c linux-kernel wifi linux-device-driver 802.11

我想详细了解nl80211cfg80211的工作原理。功能流,nl80211wpa_supplicantiw等网络工具的互动方式。

Plz建议我提供一些有用的链接或书籍。

4 个答案:

答案 0 :(得分:57)

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

  • 首先使用了与供应商相关的API的ioctl
  • 1996年,Jean Tourrilhes创建wireless extensions(WE或WEXT)。
  

无线扩展(WE)是允许驱动程序使用的通用API   公开特定于用户空间的配置和统计信息   常见的无线局域网。

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

    +-------------+
    |             |
    |  Userspace  |
    |             |
    +-------------+
          ^
    - - - | - - - - 
          | nl80211
          v
    +-------------+
    |             |
    |  cfg80211   |
    |             |
    +-------------+
    +-------------+
    |             |
    |  mac80211   |
    |   driver    |
    |             |
    +-------------+
    

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

因此,iwhostapdwpa_supplicant等工具会使用一些netlink库(如libnllibnl-tiny)和netlink接口公共标头当然是nl80211.h

没有那么多文档,但我建议你阅读libnl documentation然后阅读iw source code(因为我使用了libnl)。

答案 1 :(得分:32)

详细了解nl80211cfg80211如何与系统的其他部分(user spacekernelhardware合作)。

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

enter image description here

答案 2 :(得分:4)

请参阅我的回复 How to learn the structure of Linux wireless drivers (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消息,并包含扫描所需的所有参数。

答案 3 :(得分:3)

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

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

这里是link