Raf*_*fal 43 c linux-device-driver linux-kernel wifi 802.11
我想详细了解如何工作nl80211
和cfg80211
工作.功能流程,如何nl80211
使用网络工具,如互动wpa_supplicant
,iw
.
Plz建议我参考一些有用的链接或书籍.
jml*_*jml 58
为了能够从用户空间控制无线驱动程序,使用内核和用户空间之间的一些IPC通信进程.
ioctl
使用依赖于供应商的API.无线扩展(WE)是一种通用API,允许驱动程序向用户空间公开特定于常见无线LAN的配置和统计信息.
2006年,John Linville创建了mac80211,Johannes Berg创建了cfg80211和nl80211.它旨在取代无线扩展.
+-------------+
| |
| Userspace |
| |
+-------------+
^
- - - | - - - -
| nl80211
v
+-------------+
| |
| cfg80211 |
| |
+-------------+
+-------------+
| |
| mac80211 |
| driver |
| |
+-------------+
Run Code Online (Sandbox Code Playgroud)重要的一点是nl80211/cfg80211/mac80211不再使用ioctl,它们使用netlink.
因此,像iw,hostapd或wpa_supplicant这样的工具使用一些netlink库(如libnl或libnl-tiny)和netlink接口公共头,当然是nl80211.h.
没有那么多的文档,但我建议你阅读libnl文档,然后阅读新的源代码(因为我使用了libnl).
art*_*rtm 33
一个稍微详细的图片是如何nl80211
和cfg80211
工作与系统的其他部分(user space
,kernel
,和hardware
).
nl80211
是用户空间软件(之间的界面iw
,wpa_supplicant
等等)和内核(cfg80211
和mac80211
内核模块,和特定的驱动程序).cfg80211_ops
是一组操作,Full-MAC驱动程序和mac80211
模块注册到cfg80211
模块.ieee80211_ops
是一组软MAC驱动程序注册到mac80211
模块的操作.请参阅我对如何学习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
以及扫描所需的所有参数来构建消息。