linux系統內核數據?
正如圖中看到的壹樣,存在著兩種WiFi設備,具體是哪壹類要看IEEE802.11標準的MLME如何實現。
如果直接通過硬件實現,那麽設備就是硬MAC(fullMAC)設備;如果通過軟件的方式實現,那麽設備就是軟MAC(softMAC)設備。現階段大部分無線設備都是軟件實現的軟MAC設備。
通常我們把Linux內核無線子系統看成兩大塊:cfg80211和mac80211,它們連通內核其他模塊和用戶空間的應用程序。
特別指出,cfg80211在內核空間提供配置管理服務,內核與應用層通過nl80211實現配置管理接口。需要記住的是,
硬MAC設備和軟MAC設備都需要cfg80211才能工作。而mac80211只是壹個驅動API,它只支持軟件實現的軟MAC設備。
接下來,我們主要關註軟MAC設備。
Linux內核無線子系統統壹各種WiFi設備,並處理OSI模型中最底層的MAC、PHY兩層。
若進壹步劃分,MAC層可以分為MAC高層和MAC底層。前者負責管理MAC層無線網絡的探測發現、身份認證、關聯等;
後者實現MAC層如ACK等緊急操作。大部分情況下,硬件(如無線適配器)處理大部分的PHY層以及MAC底層操作。Linux子系統實現大部分的MAC高層回調函數。
2模塊間接口
從圖壹中我們可以看出,各個模塊之間分界線很清晰,並且模塊間相互透明不可見。模塊之間壹般不會相互影響。
舉個例子,我們在WiFi設備驅動做修改(如,打補丁、添加新的WiFi驅動等),這些變更並不會影響到mac80211模塊,
所以我們根本不用改動mac80211的代碼。再如,回龍觀北大青鳥建議添加壹個新的網絡協議理論上是不用修改套接字層以及設備無關層代碼。壹般情況下,內核通過壹系列的函數指針實現各層之間相互透明。