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

Mar*_*tin 12 wpa-supplicant

在开始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 ~ # 
Run Code Online (Sandbox Code Playgroud)

但是,如果我开始时wpa_supplicant没有指定像 那样的驱动程序wpa_supplicant -i eth1 -c /root/wpafile,那么它可以完美运行。为什么会这样?另外,在什么情况下需要指定驱动程序wpa_supplicant

Mar*_*iae 17

您混淆了内核驱动程序和用户空间驱动程序。在您的情况下,您当然可以使用 WEXT,但也可以使用 nl80211(我认为)。

WEXT(或 WE= Wireless Extensions)是 Jean Tourrhiles 于 1997 年引入的对 Linux 内核的修改。根据图尔希尔斯本人撰写的这个网页

无线扩展 (WE) 是一个通用 API,允许驱动程序向用户空间公开特定于常见无线 LAN 的配置和统计信息。它的美妙之处在于,一套工具可以支持所有类型的无线局域网,而不管它们的类型(只要驱动程序支持无线扩展)。另一个优点是可以在不重新启动驱动程序(或 Linux)的情况下动态更改这些参数。

换句话说,WEXT 位于您的驱动程序之上,并允许 wpa_supplicant 与其交互。请注意, wpa_supplicant 和驱动程序属于不同的内核领域(第一个到用户空间,第二个到内核空间),因此需要一个能够充当中间人的 API。这就是鲍勃提到的所谓司机所扮演的角色。

然而,这个 Linux-Wireless Web 页面明确指出

WE是否得到进一步发展?

不它不是。WE 只接受错误修复。

什么是 Wireless-Extensions 的替代品?

新的开发应该集中在 cfg80211 和 nl80211 上。

事实上,如果直接查询我的 wpa_supplicant(即,不是手册页,而是命令

 wpa_supplicant -h
Run Code Online (Sandbox Code Playgroud)

我得到(部分)这个回复:

drivers:
  wext = Linux wireless extensions (generic)
  nl80211 = Linux nl80211/cfg80211
  wired = Wired Ethernet driver
  none = no driver (RADIUS server/WPS ER)
options:....
Run Code Online (Sandbox Code Playgroud)

换句话说,忠实于 Linux Wireless 的话,对除 Wext 和 nl80211 之外的所有其他驱动程序的支持已被删除,而对 Wext 的支持一直保持不变,因为......

我们还在使用 WE 吗?

是的 cfg80211 和 nl80211 仍在开发中,因此仍在使用 WE。所有 mac80211 驱动程序都支持 WEs,因为 mac80211 使用它。这个想法是慢慢开始将东西移到 cfg80211 和 nl80211 上,这些东西还没有,并为它们添加任何新功能。

这适用于 Linux 内核 3.11.1-031101-generic。

在某种程度上,使用过 hostapd 的人已经了解了这一切,因为 hostapd 的标准驱动程序正是 nl80211。