wpa_supplicant 下的驱动程序(-D) 选项

wpa_supplicant 下的驱动程序(-D) 选项

在完成其工作之前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。

相关内容