在完成其工作之前wpa_supplicant
,网络接口必须可用并且必须加载设备的驱动程序。wpa_supplicant
允许使用“-D”标志指定驱动程序。我在几个系统上尝试过此操作,但wpa_supplicant
似乎从未接受我指定的驱动程序。例如:
T42 ~ # lspci -v -s 02:02.0
02:02.0 Network controller: Intel Corporation PRO/Wireless 2915ABG [Calexico2] Network Connection (rev 05)
Subsystem: Intel Corporation Device 1011
Flags: bus master, medium devsel, latency 64, IRQ 11
Memory at c0214000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [dc] Power Management version 2
Kernel driver in use: ipw2200
Kernel modules: ipw2200
T42 ~ # wpa_supplicant -D ipw2200 -i eth1 -c /root/wpafile
Unsupported driver 'ipw2200'.
T42 ~ #
但是,如果我wpa_supplicant
在不指定驱动程序的情况下启动wpa_supplicant -i eth1 -c /root/wpafile
,那么它可以完美地工作。为什么会这样呢?另外,什么情况下需要指定驱动程序呢wpa_supplicant
?
答案1
您混淆了内核驱动程序和用户空间驱动程序。就你而言,你当然可以使用 WEXT,但也可以使用 nl80211 (我认为)。
WEXT(或 WE= 无线扩展)是 Jean Tourrhiles 于 1997 年对 Linux 内核进行的修改。根据这个网页图里尔斯本人所写,
无线扩展 (WE) 是一个通用 API,允许驱动程序向用户空间公开特定于常见无线 LAN 的配置和统计信息。它的优点在于,一套工具可以支持无线 LAN 的所有变体,无论其类型如何(只要驱动程序支持无线扩展)。另一个优点是这些参数可以即时更改,而无需重新启动驱动程序(或 Linux)。
换句话说,WEXT 位于驱动程序之上,并允许 wpa_supplicant 与其交互。请注意,wpa_supplicant 和驱动程序属于不同的内核领域(第一个属于用户空间,第二个属于内核空间),因此需要一个能够充当中间人的 API。这就是鲍勃提到的所谓驱动程序所扮演的角色。
然而,这个 Linux 无线网页明确指出
WE正在进一步发展吗?
不它不是。 WE 只接受错误修复。
和
Wireless-Extensions 的替代品是什么?
新的开发应该集中在cfg80211和nl80211上。
事实上,如果直接查询我的 wpa_supplicant (即不是手册页,而是命令
wpa_supplicant -h
我得到(部分)这个答复:
drivers:
wext = Linux wireless extensions (generic)
nl80211 = Linux nl80211/cfg80211
wired = Wired Ethernet driver
none = no driver (RADIUS server/WPS ER)
options:....
换句话说,忠实于 Linux Wireless 的话,对除 Wext 和 nl80211 之外的所有其他驱动程序的支持已被删除,并且对 Wext 的支持一直保持,因为......
我们还用WE吗?
是的,cfg80211 和 nl80211 仍在开发中,因此 WE 仍在使用中。所有 mac80211 驱动程序都支持 WE,因为 mac80211 使用它。我们的想法是慢慢开始将一些东西转移到尚不存在的 cfg80211 和 nl80211 上,并为其添加任何新功能。
这适用于 Linux 内核 3.11.1-031101-generic。
使用过hostapd的人在某种程度上已经了解了这一切,因为hostapd的标准驱动程序正是nl80211。