GSM 上的 Linux GPRS 和數(shù)據(jù)
GPRS 是一個(gè)用于通過 GSM 傳輸數(shù)據(jù)的數(shù)據(jù)分組服務(wù),是一種卓越的數(shù)字蜂窩標(biāo)準(zhǔn)。盡管 GSM 上的數(shù)據(jù)是線路交換的并且不管怎樣都占用一個(gè)通道,但是 GPRS 上的數(shù)據(jù)是一直連接的(always-on)、分組交換(packet-switched)的數(shù)據(jù)流,用戶根據(jù)使用付費(fèi)。GSM 的傳輸速度一般是 9.6 kbps,而 GPRS 能夠運(yùn)行的速度為 56 kbps 到 170 kbps。
GPRS 和 GSM 芯片通常有一個(gè)到系統(tǒng)的 UART 接口。對于內(nèi)置 GSM/GPRS 支持的母板(例如,一個(gè)帶有連接到 UART 通道的 Siemen MC-45 模塊的母板),傳統(tǒng)的串行驅(qū)動程序就能驅(qū)動這個(gè)鏈接?紤] PCMCIA/CF 的形成因素(例如一張可選 GPRS 卡),serial_cs(是用于訪問 PCMCIA 串行設(shè)備的普通卡服務(wù)驅(qū)動程序)能夠允許其他操作系統(tǒng)把此卡當(dāng)作一個(gè)串行設(shè)備。第一個(gè)未使用的串行設(shè)備(/dev/ttySx)被分配給此卡,然后此卡就可以被當(dāng)成串行設(shè)備訪問。serial_cs 也可以通過全球定位系統(tǒng) (GPS) PCMCIA 和 CF 卡模擬串行端口。針對 USB GPRS 調(diào)制解調(diào)器而言,USB-to-serial 轉(zhuǎn)換器一般 USB 端口轉(zhuǎn)換為虛擬串行端口,因此系統(tǒng)其他部分就會將它看作串行設(shè)備。
GPRS 網(wǎng)絡(luò)使用 GGSN(GPRS 網(wǎng)關(guān)支持節(jié)點(diǎn)) 連接到一個(gè)外部網(wǎng)絡(luò)(例如 Internet)。GPRS 設(shè)備類似于擁有擴(kuò)展 AT 命令集的調(diào)制解調(diào)器,在進(jìn)入數(shù)據(jù)模式之前必須使用 AT 命令定義一個(gè)上下文。上下文字符串看起來類似于清單 3 中給出的示例。
清單 3. 上下文字符串
'AT+CGDCONT=1,"IP","internet.voicestream.com","0.0.0.0",0,0'
在這個(gè)示例中,1 代表上下文編號,IP 是數(shù)據(jù)分組類型,internet.voicestream.com 是接入點(diǎn)名稱(APN) 字符串,0.0.0.0 意味著服務(wù)提供者選擇 IP 地址,其他參數(shù)與數(shù)據(jù)和報(bào)頭壓縮有關(guān)。APN 字符串取決于服務(wù)提供者。一般不需要用戶名和口令。
PPP 允許網(wǎng)絡(luò)協(xié)議(比如 TCP/IP)在串行鏈路上運(yùn)行。在無線網(wǎng)絡(luò)的上下文中,PPP 可以使 TCP/IP 運(yùn)行于 GPRS 上,數(shù)據(jù)通過 GSM、Bluetooth RFCOMM 以及 IrDa COMM 進(jìn)行傳輸。清單 4 給出了一種調(diào)用 PPP 后臺進(jìn)程 pppd 的公共語法。
清單 4. 調(diào)用 PPP 后臺進(jìn)程 pppd 的公共語法
pppd ttySx call connection-script
在這個(gè)示例中,ttySx 是物理或虛擬的串行設(shè)備(PPP 運(yùn)行其上),connection-script 是 /etc/ppp/peers/ 目錄中的一個(gè)文件,這個(gè)目錄包含在 pppd 和服務(wù)提供者之間交換的用于建立鏈接的 AT 命令序列。建立鏈接并完成身份驗(yàn)證以后,PPP 將啟動網(wǎng)絡(luò)控制協(xié)議(Network Control Protocol,NCP)。IPCP (Internet Protocol Control Protocol,Internet 協(xié)議控制協(xié)議) 是用于運(yùn)行 IP 的 NCP。一旦 IPCP 成功通過 IP 地址,PPP 就開始與 TCP/IP 棧交互。
清單 5 給出了用于連接到 GPRS 服務(wù)提供者的 PPP 鏈接腳本示例,而清單 6 給出的是用于到 GSM 服務(wù)提供者的數(shù)據(jù)連接的連接腳本示例。
清單 5. 針對 GPRS 的 pppd 鏈接腳本示例(/etc/ppp/peer/gprs-script)
115200
connect "/usr/sbin/chat -s -v "" AT+CGDCONT=1,"IP",
"internet2.voicestream.com","0.0.0.0",0,0 OK AT+CGDATA="PPP",1"
crtscts
noipdefault
modem
usepeerdns
defaultroute
connect-delay 5000
從操作系統(tǒng)的角度出發(fā),GSM 上的數(shù)據(jù)類似于通過撥號調(diào)試解調(diào)器連接收發(fā)的數(shù)據(jù);ヂ(lián)網(wǎng)服務(wù)提供商(ISP)的電話號碼是使用 GSM 撥入的,并且會建立一個(gè)撥號連接。利用用戶名和口令進(jìn)行身份驗(yàn)證。
一旦 PPP 建立了與服務(wù)提供者的 IP 連接,TCP 應(yīng)用程序例如 Web 瀏覽器就可以不加更改地在 GSM/GPRS 設(shè)備上運(yùn)行。
gsmlib 項(xiàng)目為通過 GSM 發(fā)送語音和 SMS(Short Messaging Service,短信服務(wù))提供了實(shí)用程序(請參閱 參考資料 了解更多關(guān)于 gsmlib 的信息)。它包括用于存取 Subscriber Identity Module (SIM)卡中的電話簿、收發(fā) SMS 消息等功能的實(shí)用程序。
清單 6. 用于通過 GSM 傳輸數(shù)據(jù)的 pppd 連接腳本示例(/etc/ppp/peer/gsm-script)
115200
connect '/usr/sbin/chat -s -v ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "BUSY" "" AT OK
ATDT
crtscts
noipdefault
modem
user "linux"
usepeerdns
defaultroute
connect-delay 5000
Linux Infrared Data
Infrared Data (IrDa) 是一種用紅外線無線傳輸數(shù)據(jù)的規(guī)范。主要用于連接膝上電腦或者將錄像機(jī)或照相機(jī)這樣的設(shè)備連接到計(jì)算機(jī)系統(tǒng)。
IrDa 的速度從 Serial Infrared (SIR) 的 115 kbps 到 Very Fast Infrared (VFIR) 的 16 Mbps。大多數(shù)處于 SIR 模式的 IrDa 芯片是 UART 16650 兼容的(16650 是一種公共 PC UART),因此傳統(tǒng) Linux 串口驅(qū)動程序可以充當(dāng)鏈路級別的驅(qū)動程序。IrDa 行的規(guī)范實(shí)現(xiàn) —— IrTTY (drivers/net/irda/irtty.c),使串行驅(qū)動程序驅(qū)動 SIR。IrPORT 驅(qū)動程序(drivers/net/irda/irport.c)代替了 IrTTY 和串行驅(qū)動程序,并提供更好的設(shè)備控制。與串行驅(qū)動器不兼容的 IrDa 芯片有自己的設(shè)備驅(qū)動程序。例如,NSC PC87108 芯片組就使用自己的驅(qū)動程序(nsc-ircc.c)。與上面討論到的用于 USB Bluetooth 設(shè)備的 hci-usb 驅(qū)動程序類似,irda-usb.c 設(shè)備驅(qū)動程序支持 USB IrDa FIR 軟件狗。
IrLAP 是負(fù)責(zé) IrDa 設(shè)備發(fā)現(xiàn)、重傳以及流控制的鏈路存取協(xié)議層。IrLMP 鏈路管理層和 Tiny 傳輸協(xié)議層(TinyTP)駐留于 IrLAP 之上。而它們之上是 IrCOMM 和 IrLAN 層。IrCOMM(在 net/irda/ircomm/ 中實(shí)現(xiàn))提供串行模擬,使運(yùn)行于串行端口(比如終端仿真器)上的應(yīng)用程序不加更改地在 IrDa 棧上運(yùn)行。IrLAN(在 net/irda/irlan/ 中實(shí)現(xiàn))提供使 TCP/IP 直接運(yùn)行于 IrDa 棧之上的虛擬網(wǎng)絡(luò)接口。IrLAN 代碼使用 register_netdev 將太網(wǎng)設(shè)備注冊到 Linux 網(wǎng)絡(luò)層,使用 netif_rx 向 Linux IP 棧發(fā)送數(shù)據(jù)(與對 WLAN 驅(qū)動程序和 Bluetooth BNEP的解釋類似)。IrCOMM 與 Bluetooth RFCOMM 相似,而 IrLAN 則類似于 Bluetooth BNEP。
IrOBEX 是建立在 TinyTP 之上的一個(gè)簡單協(xié)議,它允許傳輸二進(jìn)制數(shù)據(jù)。IrOBEX 的擴(kuò)展定義了不同數(shù)據(jù)對象的傳輸。
為了在 Linux 上應(yīng)用 IrDa 協(xié)議,必須安裝 IrDa 實(shí)用程序(如 irattach),它是作為 Linux IrDa 項(xiàng)目的一部分開發(fā)的。
性能問題
網(wǎng)絡(luò)性能取決于特定載體網(wǎng)絡(luò)的特征。例如,GPRS 的帶寬取決于使用的代碼模式,而 Bluetooth 的性能受 L2CAP 層的網(wǎng)段的影響。對于 WLAN 工作站與接入點(diǎn)之間的通信,幀確認(rèn)會降低帶寬, 使用同一接入點(diǎn)的其他工作站的數(shù)量也會帶來同樣影響。
無線網(wǎng)絡(luò)的特征(比如低且波動的帶寬和高延遲)會歪曲 TCP 度量和傳輸策略。盡管無線網(wǎng)絡(luò)中的大多數(shù)損耗來自信號衰退、干擾以及連接中斷等因素,但是 TCP 假定這些損耗與擁塞有關(guān), 因此它摒棄了降低網(wǎng)絡(luò)流量的算法。有多種項(xiàng)目用來調(diào)整 TCP 和 Web 瀏覽器的行為以適應(yīng)無線網(wǎng)絡(luò)。
結(jié)束語
在本文中,您瀏覽了是針對包括 WLAN、Bluetooth、GPRS、GSM 和 IrDA 在內(nèi)的流行的無線技術(shù)的 Linux 設(shè)備驅(qū)動程序和網(wǎng)絡(luò)協(xié)議層。還通過跟蹤相應(yīng)的代碼路徑和討論相關(guān)的用戶空間工具,了解到不同的無線設(shè)備如何在 Linux 中工作。
現(xiàn)在,有了對 Linux 上提供的對各種無線技術(shù)、網(wǎng)絡(luò)技術(shù)以及總線技術(shù)的核心支持的理解,您可以修補(bǔ)多種具有不同形成因素的無線設(shè)備,開發(fā)啟用不被支持的設(shè)備所需的 Linux 內(nèi)核代碼。
關(guān)于作者
Sreekrishnan Venkateswaran 擁有印度坎普爾市印度科技學(xué)院的計(jì)算機(jī)科學(xué)碩士學(xué)位。他從 1996 年 2 月開始為 IBM India 工作。 他的興趣包括設(shè)計(jì)設(shè)備驅(qū)動程序和網(wǎng)絡(luò)協(xié)議?梢酝ㄟ^ s_krishna@in.ibm.com 與 Sreekrishnan 聯(lián)系。
摘自 賽迪網(wǎng)