我想详细了解nl80211
和cfg80211
的工作原理。功能流,nl80211
与wpa_supplicant
,iw
等网络工具的互动方式。
Plz建议我提供一些有用的链接或书籍。
答案 0 :(得分:57)
为了能够从用户空间控制无线驱动程序,使用了内核和用户空间之间的一些IPC通信进程。
ioctl
。无线扩展(WE)是允许驱动程序使用的通用API 公开特定于用户空间的配置和统计信息 常见的无线局域网。
2006年,John Linville创建了mac80211,Johannes Berg创建了cfg80211和nl80211。它旨在取代无线扩展。
+-------------+
| |
| Userspace |
| |
+-------------+
^
- - - | - - - -
| nl80211
v
+-------------+
| |
| cfg80211 |
| |
+-------------+
+-------------+
| |
| mac80211 |
| driver |
| |
+-------------+
重要的一点是nl80211 / cfg80211 / mac80211不再使用ioctl,他们使用netlink。
因此,iw,hostapd或wpa_supplicant等工具会使用一些netlink库(如libnl或libnl-tiny)和netlink接口公共标头当然是nl80211.h。
没有那么多文档,但我建议你阅读libnl documentation然后阅读iw source code(因为我使用了libnl)。
答案 1 :(得分:32)
详细了解nl80211
和cfg80211
如何与系统的其他部分(user space
,kernel
和hardware
合作)。
nl80211
是用户空间软件(iw
,wpa_supplicant
等)与内核(cfg80211
和mac80211
内核模块之间的接口,特定司机)。 cfg80211_ops
是一组操作,Full-MAC驱动程序和mac80211
模块注册到cfg80211
模块。ieee80211_ops
是Soft-MAC驱动程序注册到mac80211
模块的一组操作。答案 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。