2011-08-23 120 views
11

Linux無線驅動程序mac80211中有這麼多結構。例如struct net_device,struct ieee80211_hw,struct ieee80211_vifstruct ieee80211_local等等。如此多的結構,我不明白它們包含的信息以及初始化的時間。如何學習Linux無線驅動程序(mac80211)的結構?

我該如何瞭解它們以及無線驅動程序的整個架構?

+2

嗨,歡迎來到stackoverflow。好的問題通常比你在這裏提出的問題更狹窄和更具體,這個問題非常廣泛和開放。 – Flexo

+1

從這個問題我可以真正建議最好的是閱讀源代碼(http://lxr.linux.no/#linux+v3.0.3/非常方便),潛伏在一些郵件列表(http:// linuxwireless .org/en/developers/MailingLists)並嘗試對自己進行一些更改。如果你能夠做到這一點,然後提出更具體的問題,我認爲你會得到更好的答案。 – Flexo

回答

36

你可能想看看約翰內斯貝格(mac80211維護者)滑到這裏: http://wireless.kernel.org/en/developers/Documentation/mac80211?action=AttachFile&do=get&target=mac80211.pdf

他們可能有些過時,但應該給你一個起點。

Linux的無線內核棧的高層描述:

    1. 理解有2路在用戶空間與當我們談論的WiFi內核通信是非常重要的數據路徑:正在接收的數據從無線驅動程序傳遞到netdev內核(通常使用netif_rx())。從那裏,網絡核心將通過TCP/IP協議棧代碼傳遞它,並將它放入用戶空間進程將讀取的相關套接字中。在Tx路徑上,數據包將使用ndo_start_xmit()回調從netdev內核發送到無線驅動程序。驅動程序通過使用struct net_device_ops註冊(像其他網絡設備,如以太網驅動程序)一組操作回調。
    2. 控制路徑:此路徑是用戶空間如何控制WiFi接口/設備和類似掃描/認證/關聯執行操作。用戶空間界面基於netlink並且被稱爲nl80211(參見include/uapi/linux/nl80211.h)。你可以發送命令得到響應的事件
  • 當您發送nl80211命令它被最初由cfg80211內核模塊處理(它的代碼是net/wireless下和處理程序是在net/wireless/nl80211.c)。 cfg80211通常會調用較低級別的驅動程序。如果是完整的MAC硬件特定的硬件驅動程序恰好在cfg80211下面。 cfg80211以下的驅動程序使用cfg80211_ops struct註冊了一組操作cfg80211。例如,請參閱brcmfmac驅動程序(drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
  • 對於軟MAC硬件mac80211這是實現802.11 MAC層的內核模塊。在這種情況下,cfg80211將與mac80211對話,後者將依次使用硬件特定的低級驅動程序。這方面的一個例子是iwlwifi(用於英特爾芯片)。
  • mac80211使用cfg80211_ops(參見net/mac80211/cfg.c)通過cfg80211註冊自己。特定的硬件驅動程序通過使用ieee80211_ops struct(例如drivers/net/wireless/iwlwifi/mvm/mac80211.c)向mac80211註冊。
  • 初始化您連接的新NIC從底部向上堆疊。硬件特定的驅動程序通常會在探測硬件後調用mac80211的ieee80211_allow_hw()ieee80211_alloc_hw()獲取HW驅動程序使用的私有數據結構的大小。它依次調用cfg80211 wiphy_new(),它爲wiphy結構,ieee80211_local struct(由mac80211使用)和HW驅動程序私有數據(分層在ieee80211_alloc_hw代碼中可見)實際分配足夠的空間。 ieee80211_hwieee80211_local內的一個嵌入式結構,它對HW驅動程序是「可見的」。所有這些(wiphy,ieee80211_local,ieee80211_hw)代表連接的單個物理設備。
  • 在單個物理設備(也稱爲phy)之上,您可以設置多個虛擬接口。這些基本上就是你所知道的wlan0或wlan1,你用ifconfig來控制。每個這樣的虛擬接口由ieee80211_vif表示。該結構在最後還包含由硬件驅動程序訪問的私有結構。可以使用多個接口來運行wlan0上的工作站和wlan1上的AP(這可能取決於硬件功能)。