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