wpa_supplicant 下的 driver(-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
?
您混淆了核心驅動程序和使用者空間驅動程序。在您的情況下,您當然可以使用 WEXT,但也可以使用 nl80211(我認為)。
WEXT(或 WE= Wireless Extensions)是 Jean Tourrhiles 在 1997 年引入 Linux 核心的修改。根據Tourrhiles 自己寫的這個網頁,
無線擴展 (WE) 是一個通用 API,允許驅動程序向使用者空間、配置和特定於常見無線 LAN 的統計資訊公開。它的美妙之處在於,一套工具可以支持無線 LAN 的所有變體,無論其類型如何(只要驅動程序支持無線擴展)。另一個優點是這些參數可以在不重新啟動驅動程序(或 Linux)的情況下即時更改。
換句話說,WEXT 位於驅動程序之上,並允許 wpa_supplicant 與之互動。請注意,wpa_supplicant 和驅動程序屬於不同的核心領域,(第一個屬於使用者空間,第二個屬於核心空間),因此需要能夠充當中間人的 API。這就是 Bob 提到的所謂司機所扮演的角色。
然而,這個 Linux-Wireless 網頁明確指出
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。