隨着開放源代碼的出現,開發的時間已經快速下降,同時質量也迅速提高。 對於所有參與WLAN /WiFi開發的人來說,讓我們來研究一下基於開源mac80211框架的Linux的WLAN架構吧。
下面的框圖說明了Linux的WLAN架構。 請看下面的詳細資料。
用戶空間:
配置:wpa_supplicant和hostapd:
所有直接與用戶交互的應用程序都在這裏。 例如可以基於GUI / CLI。 在Ubuntu / Fedora發行版本的網絡管理器是基於GUI的,但最核心的部分是基於命令行的。例如,使用wpa_supplicant用於控制STA的部分和使用hostapd用於控制AP的部分。兩者都是可通過其CLI版本(wpa_cli,hostapd_cli)配置的。
它們支持不同的功能,如SME,MLME,安全,無線直連(P2P),AP和STA的配置。
工具:
我們也有工具來直接發送命令到驅動來設置一些參數,如通道,帶寬,一些自定義的命令等。
用戶空間和內核空間之間的橋
如何在用戶空間中的各種應用程序和內核中的核心實體之間進行溝通呢? 我們有不同的方法,但都是基於不同的套接字接口。WExt ==> 通用無線擴展:IOCTL接口
NL80211==> Netlink套接字
HostAP ==> 原始數據包套接字
特定於芯片組:
Atheros==> IOCTL 接口
Prism,IPW etc.
內核空間
配置和UMAC
對於開源世界來說,內核的WLAN架構是mac80211,它分成2個內核模塊。cfg80211.ko:它處理所有的配置,和用戶空間的交互。
mac80211.ko:協議:上層的MAC,和驅動程序的交互。
大部分功能和管理是由具有mac80211模塊在底層的MAC協助下處理的。
低層的Mac驅動程序
低層的MAC驅動擔任UMAC和芯片組(固件和硬件)之間的橋樑。 他們通過Linux內核提供的服務來執行所有的設備初始化,註冊到操作系統上,錯誤註冊,中斷註冊等。一個精心編寫的驅動程序遵循這些約定:
- 保持一個操作系統無關層:方便移植到不同的操作系統。
- 保持一個UMAC無關層:方便移植到不同的UMAC上:專有,開源,第三方等。
- 總線抽象層:保持不同的物理總線之間,如PCI,PCIe,AHB,SDIO等的相容性
芯片組:固件和硬件
完整的802.11協議的功能在這裏實現。固件可能是運行在一個單獨的處理器/微控制器上,它配置和控制硬件,同時還通過一個芯片組(控制路徑)特定的通訊接口與主機(驅動程序)進行交互。
數據路徑通常包括一個硬件上的DMA控制器,它負責產生中斷給主處理器和從/至主機傳輸數據包到硬件隊列。
參考文獻:
wpa_supplicant_hostapd_devel_doc
http://www.omappedia.org/wiki/MAC802.11_based_Wilink
wpa_supplicant