Linux 無線網路技術: WLAN

來源:互聯網
上載者:User
作者:Sreekrishnan Venkateswaran

當今,不考慮 Linux 和無線網路技術的話,就無法談到電腦和網路。在這篇文章中,Sreekrishnan Venkateswaran 用 Linux 觀點闡釋了通過 WLAN、Bluetooth、GPRS、GSM 以及 IrDA 實現無線連網。他使用各種不同的無線裝置和相應的核心層,以及使用者空間工具來示範它們在 Linux 下如何工作。

無線技術,例如 WLAN (Wireless Local Area Network)、Bluetooth、GPRS (General Packet Radio Service)、GSM (Global System for Mobile communications) 以及 IrDa (Infrared Data),在不同的環境下提供服務。雖然 WLAN 支援比 Bluetooth 更高的速度和更長的傳播距離,但是它也需要更多的費用並且耗電量更大。GPRS 雖然比 Bluetooth 和 WLAN 慢,但是可用於移動技術。儘管它們存在差異,或者是其他原因,但是具有多種無線功能的裝置可以綜合利用它們。例如,根據 GPS 模組的定位輸入,裝置可以透明地將網路連接從路上的 GPRS 切換到網吧中更便宜的 WLAN。行動電話可以通過 Bluetooth 與心律監視器通訊,當病人心律超出某個極限時,就可以通過 GSM 向醫生髮送警報。

目前,無線技術已經以 PCMCIA、Compact Flash (CF) 卡的形式廣泛應用,或者用於 USB 裝置。大多數電腦系統,包括嵌入式裝置,都有 PCMCIA、CF 或者 USB 介面,即使不含對無線技術的內建支援,也能夠立刻使用這些技術。這篇文章分析了無線裝置的一些樣本,並且研究了裝置驅動程式的 Linux 實現、匯流排技術以及各種協議。

首先,通過跟蹤 WLAN 樣卡的代碼流,您將瞭解到 WLAN 裝置是如何在 Linux 下工作的,然後還可以看到幾個 Bluetooth 裝置如何與 Linux Bluetooth 棧和其他核心層串連。接下來,您將瞭解到如何使 GPRS 和 GSM 裝置在 Linux 下工作。文章最後分析了 Linux 上的 IrDa 支援並簡要介紹了有關無線網路裝置的效能問題。

注意:本文涉及到的核心資料結構和檔案名稱是當前 Linux 版本中所使用的。檔案名稱相對於 Linux 核心來源程式樹的根。

Linux 802.11 WLAN

WLAN 通訊系統作為有線 LAN 以外的另一種選擇一般用在同一座建築內。WLAN 使用 ISM (Industrial、Scientific、Medical) 無線電廣播頻段通訊。WLAN 的 802.11a 標準使用 5 GHz 頻段,支援的最大速度為 54 Mbps,而 802.11b 和 802.11g 標準使用 2.4 GHz 頻段,分別支援最大 11 Mbps 和 54 Mbps 的速度。

WLAN 類似於有線乙太網路,它們都是從同一位址集區分配 MAC (Media Access Control) 地址,並且都是作為乙太網路裝置出現在作業系統的網路裝置層。例如,ARP(Address Resolution Protocol) 表是用 WLAN MAC 位址和乙太網路 MAC 位址填充的。

然而 WLAN 與有線乙太網路在鏈路層有很大的區別。例如,802.11 標準使用衝突避免(CSMA/CA)代替有線乙太網路的衝突檢測(CSMA/CD)。而且,與乙太網路幀不同的是,WLAN 幀是被確認的。

由於 WLAN 工作站之間的模糊邊界,WLAN 鏈路層擁有在傳送前清除一個地區的協議。出於安全性考慮,WLAN 的 Wired Equivalent Privacy (WEP) 加密機制提供與有線網路相同的安全層級。WEP 將 40 位元或 104 位元密鑰與隨機的 24 位元初始向量組合用以加解密資料。WLAN 支援兩種通訊模式:Ad Hoc 模式 用於小群組工作站之間不必使用訪問點的短時間內通訊,而 Infrastructure 模式 的所有通訊必須通過訪問點。訪問點周期性地廣播一個服務組識別元(SSID),SSID 用於將一個 Wi-Fi 網路功能與其他網路區別開來。

大多數可用的 WLAN 卡是基於 Intersil Prism 或 Lucent Hermes 晶片集的。Compaq、Nokia、Linksys 和 D-Link 卡使用 Prism 晶片集,而 Lucent Orinoco 卡和 Apple Airport 使用 Hermes 晶片集。

Linux WLAN 支援

Linux WLAN 支援由 WLAN API 實現和 WLAN 裝置驅動程式組成。我將依次研究它們。

有兩個 Linux 項目定義一般的 WLAN API,並且提供工具讓使用者空間應用程式配置參數和存取來自 WLAN 裝置驅動程式的資訊。Wireless Extensions 項目為不同的無線網卡提供公用的 Linux 使用者空間介面。這個項目的工具包括 iwconfig 用以配置參數(比如 WLAN 驅動程式中的 WEP 關鍵字及 SSID)。linux-wlan 項目作為 Wireless Extensions 項目一部分,也支援一系列用於從使用者空間與 WLAN 裝置驅動程式互動的工具。與基於 Wireless Extensions 的工具不同,這些工具使用類似於 SNMP (Simple Network Management Protocol) MIB (Management Information Base) 的文法,該文法反映 IEEE 802.11 規範。

繼續討論裝置驅動程式,支援流行的 WLAN 卡的 Linux 裝置驅動程式包括:

Orinoco WLAN 驅動程式:是 Linux 核心原始碼的一部分,支援基於 Hermes 的卡和基於 Intersil Prism 的卡。orinoco_cs 模組提供了 PCMCIA 和 CF 卡所必需的 PCMCIA 卡服務支援。
linux-wlan 項目的 linux-wlan-ng 驅動程式:支援多種基於 Prism 晶片集的卡。這個驅動程式支援 linux-wlan API 並部分支援 Wireless Extensions。
Host AP 裝置驅動程式:支援 Prism 晶片集的 AP 模式,可以使 WLAN 主機起訪問點的作用。
Linux Symbol Spectrum 裝置驅動程式:支援 Symbol PCMCIA 卡。不同於 PCMCIA 卡,Symbol CF 卡缺乏板載韌體,它依靠裝置驅動程式來下載韌體。該驅動程式的一個單獨版本適用於 CF 卡。Intel 將 Symbol PCMCIA 卡重新打包為 Intel PRO/Wireless 卡,而 Socket 通訊重新打包了 Symbol CF 卡。
Atmel USB WLAN 驅動程式:利用 Atmel 晶片集支援許多 USB WLAN 裝置。

Intersil Prism2 WLAN CF 卡

我將討論 Intersil Prism2 802.11b WLAN CF 卡來展示它如何與 Linux PCMCIA、網路裝置及協議層一起工作。

Linux PCMCIA/CF 層由 PCMCIA 主機控制器的裝置驅動程式、不同卡的客戶機驅動程式、使用者模式程式、有助於熱拔的後台進程和與以上各部分互動並為它們提供服務的核心卡服務中樞組成。PCMCIA 控制器將卡串連到系統匯流排,將卡記憶體映射到主機 I/O 和記憶體視窗,並將卡產生的中斷路由到自由處理器中斷線。CF 卡較小,但與 PCMCIA 相容,並且經常應用於手持功能。PCMCIA/CF 卡擁有兩個儲存空間:屬性記憶體(attribute memory)和 公用記憶體(common memory)。屬性記憶體類似於 Card Information Structure (CIS),用來儲存配置註冊和描述符資訊。Linux 卡服務核心與主機控制器裝置驅動程式、卡裝置驅動程式及使用者模式 cardmgr 後台進程互動。它在一些事件(比如卡插入、卡移出以及低電量)發生時調用卡驅動程式的事件處理常式常式。儘管卡服務從卡的 CIS 向上傳送資訊到 cardmgr,但是 cardmgr 將為分配記憶體視窗和中斷層級而在使用者空間(/etc/pcmcia/config.opts)中定義的資源分派策略向下傳送到卡服務。查看 drivers/pcmcia/ds.c 可以瞭解與 cardmgr 互動的核心代碼,查閱 /etc/pcmcia/config.opts 可以瞭解使用者空間資源分派策略。

插入 Intersil WLAN CF 卡時,卡服務調用 orinoco_cs 模組的 PCMCIA 事件處理常式。卡服務解析卡屬性記憶體中的 CIS 元組(tuples)並向上傳送資訊到 cardmgr,這將從 /etc/pcmcia/config 檔案(參閱清單 1)載入適當的裝置驅動程式。由於卡的 CIS 中的 manfid 元組匹配 /etc/pcmcia/config 中的條目,所以 cardmgr 綁定帶有 orinoco_cs 驅動程式的卡。清單 1 中的裝置條目規定 orinoco_cs 驅動程式由三個核心模組組成:orinoco、orinoco_cs 和 hermes。此外,由於裝置屬於無線(wireless)一類,所以當啟動和停止裝置時,cardmgr 執行指令碼 /etc/wireless/wireless。這個指令碼使用 WLAN 工具和公用程式來配置裝置驅動程式參數,例如 WEP 關鍵字和 SSID。它還可以啟動 WLAN 上的網路通訊協定,例如 DHCP(Dynamic Host Configuration Protocol,動態主機配置通訊協議)。清單 1 中的樣本使用 Wireless Extensions 工具來執行裝置配置。

注意: PCMCIA 設定檔的確切位置取決於所用的 Linux 分布。

清單 1. Intersil WLAN CF 卡的 PCMCIA 裝置條目

card "Intersil PRISM2 11 Mbps Wireless Adapter" 
manfid 0x0156, 0x0002
bind "orinoco_cs"

device "orinoco_cs"
class "wireless" module "orinoco","orinoco_cs","hermes"

用 /etc/pcmcia/wireless 和 /etc/pcmcia/wireless.opts 指令碼來配置 WEP 關鍵字和 SSID 這樣的參數。

清單 2. 配置 WLAN 特定參數

iwconfig ethX essid <wlan_name>  
key AAAA-AAAA-AA [1] key BBBB-BBBB-BB [2] key CCCC-CCCC-CC [3] key DDDD-DDDD-DD [4]
: Set 64-bit WEP Keys and ESSID in the driver
iwconfig ethX : Display WLAN parameters
iwpriv : Get nongeneric, driver-specific parameters
iwlist : List Information and statistics from an interface
iwspy : Read quality of link for a set of addresses
/proc/net/wireless : Wireless Statistics from the device driver

在插入卡時,orinoco_cs 像傳統的網路裝置驅動程式一樣,調用 register_netdev 來獲得分配給 WLAN 介面的 ethX 網路介面名。它還會註冊一個插斷服務常式的地址以服務收發無線資料時產生的中斷。中斷處理常式是 orinoco 模組的一部分,並與 Linux 網路棧互動。Linux 網路棧使用主要的資料結構是 sk_buff 結構(定義在 include/linux/skbuff.h 中,該檔案包括關於附加在它上的一個記憶體塊的控制資訊)。sk_buffs 為所有網路層提供有效緩衝器處理和流量控制機制。網路裝置驅動程式執行一個 dev_alloc_skb 和一個 skb_put,以用 IP 資料填充一個 sk_buff,然後通過調用 netif_rx 將這個sk_buff 傳送到 TCP/IP 棧。orinoco 插斷服務常式用從 WLAN 接收的資料填充 sk_buffs,並經由 netif_rx 將它傳送到 IP 棧。

Linux TCP/IP 應用程式可以在前面談到的核心模組為 Intersil WLAN CF 卡提供的網路介面上不加更改地運行。

關於作者

Sreekrishnan Venkateswaran 擁有印度坎普爾市印度科技學院的電腦科學碩士學位。他從 1996 年 2 月開始為 IBM India 工作。 他的興趣包括設計裝置驅動程式和網路通訊協定。可以通過 s_krishna@in.ibm.com 與 Sreekrishnan 聯絡。

全文出自 : IBM developerWorks 中國網站

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.