写在前面
关于nl80211和cfg80211
这个之前一直困扰,今天问了下坐我旁边的大神,终于稍微懂了点
nl80211 是内核的一套无线驱动接口,标志性的特征就是 TAG-DATA一一对应,例如
bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); 就是从netlink msg中取出mac存到bssid中去
wpa_supplicant 发起的MLME命令都是按固定格式发送netlink msg(socket通信)给nl80211(supplicant是用户态,而nl80211是内核态)
nl80211用于配置一个cfg80211设备,且用于kernel与userspace间的通信
cfg80211则类似一个插座,从架构图上看,更下面的driver是插头,上面的nl80211是插孔
driver在初始化的时候(gl_init)会向cfg80211注册一个wireless device(wdev),将所有80211相关的api注入此wdev
这些api再被nl80211调用,比如
nl80211_associate -> cfg80211_mlme_assoc
回到正题
书接上文,继续从 assoc 动作窥伺supplicant与driver的交互
//nl80211.c
nl80211_associate
err = cfg80211_mlme_assoc(rdev, dev,

本文介绍了nl80211和cfg80211在无线驱动中的作用和交互过程。nl80211作为内核接口,用于配置cfg80211设备并处理用户态(wpa_supplicant)的MLME命令。cfg80211则作为驱动和nl80211之间的桥梁,驱动在初始化时向cfg80211注册无线设备并注入API。wpa_supplicant通过netlink消息与nl80211通信,nl80211进一步调用驱动的API执行操作,如关联动作。学习路径建议包括理解驱动如何向supplicant报告状态,熟悉wpa_supplicant的功能以及掌握常见WiFi特性的实现。
最低0.47元/天 解锁文章
1383

被折叠的 条评论
为什么被折叠?



