玩轉Linux下的Modem

火星人 @ 2014-03-12 , reply:0


    Modem可謂Linux下最難搞定的設備之一,它是我們使用Linux時許多失望和喜悅的源泉。本文介紹Modem相關的各種問題,比如埠、中斷、PnP以及Modem檢測、網路配置,等等。


作者:俞良軍(仙人掌工作室)


埠與Modem類型

  計算機有許多連接其內部和外部世界的介面,部分介面是專用的,例如鍵盤介面只能連接鍵盤而不能連接任何其他設備,連滑鼠也不能。

  連接外部設備的多用途介面稱為「埠」(Port)。大多數PC機都帶有兩個串列埠和一個并行埠。串列埠用一條線路串列傳送數據,每次傳送一個數據位,接收后再組合成位元組。并行埠使用八條線路每次并行傳送8個數據位。大多數家用印表機都連接到PC的并行埠。

  Modem是一種通過電話線路傳送數字信息的設備。我們知道,電話系統原本只為傳送語音信息而設計,Modem技術突破了這一局限,它能夠調製(modulate)數字信息,把數字信息轉換成可以通過電話線路發送的模擬信號。在接收端,模擬信號重新被轉換成數字信號(即解調,demodulate)。Modem這個詞就是從modulator-demodulator縮寫得到。

  Modem發明於串列口廣泛應用的時代。那時的Modem都是獨立在計算機外的設備,通過電纜連接到串列口。今天我們仍可以見到這種外置的Modem,但更多的是插入主板的Modem卡,即內置Modem。由於大多數計算機都帶有二個串列口,內置Modem通常增加第三個埠。

  外置Modem的設置一般都相當簡單,只需接好串列口和Modem之間的電纜、接上電話線、開啟電源,大多數外置Modem就能直接開始工作。

  內置Modem剛出現時,它的板子上總是帶有所有通信所需的電路元件,並提供設置地址和IRQ的跳線。硬體廠商總是在尋求降低成本的途徑。隨著PC功能越來越好,Modem廠商開始用軟體來替代部分電路元件,這些Modem稱為軟Modem或Winmodem。軟Modem價格低廉,它用設備驅動程序來完成原來必須由Modem卡電路元件完成的部分任務。

  軟Modem的問題在於它的驅動程序是為Windows而不是為Linux編寫的。雖然不存在什麼特別的原因使得這種驅動程序的Linux版本無法編寫,不過這最終還得看Modem廠商。到目前為止還沒有廠商這麼做。這就意味著軟Modem不能在Linux下工作。

  購買Modem時應注意它是否註明了Linux兼容。軟Modem的清單可以在http://www.o2.net/~gromitkc/winmodem.html找到。根據經驗,如果Modem包裝盒註明了「HCF」、「HSP」、「Winmodem」或「soft modem」字樣,那麼它很可能不能用於Linux。

匯流排、中斷、地址和PnP

  PC機的大多數配件都和CPU、內存一起直接插入主板。主板提供許多擴展卡的介面,供顯示卡、Modem之類的設備接入使用。現在也有許多主板直接集成這些功能,因此也就不需要再加這些擴展卡。許多集成到主板的Modem都可以順利地在Linux下工作。

  主板上的介面連接到系統匯流排。匯流排有許多類型,較早的PC使用ISA匯流排,新的PC使用PCI匯流排。還有其他一些匯流排類型,但通常只涉及這兩種匯流排。這些匯流排的物理和電學特性都是不兼容的,ISA卡絕不能插入PCI插槽,因此購買Modem之前一定要搞清楚可以使用的匯流排。除非你的機器非常古老,一般它會支持PCI。

  在計算機和新插入的卡建立聯繫之前,計算機必須知道該卡的I/O地址(輸入/輸出地址)和中斷請求線。

  當計算機想要和插入系統匯流排的卡通信時,它通過發送I/O地址來選中該卡。每塊卡都只應答自己的地址,所有卡都必須有不同的地址,

  中斷(Interrupt)稍微複雜一點。當我們在瀏覽器中輸入一個URL地址,就會建立與目標網站的連接,Modem開始接收數據;與此同時,計算機還可以做其他事情,比如監視滑鼠狀態、列印輸出等等。計算機不應該單獨排外地專註於一件事情,應該有一種方法讓Modem告訴計算機說:「打擾一下,這兒有傳送給你的數據」。這種方法就是中斷。

  每一個中斷都有一個獨一無二的編號,稱為IRQ。IRQ是Interrupt ReQuest的縮寫。中斷的數量很多,必須搞清楚每一個中斷被分配到了什麼設備上。例如,如果中斷來自Modem,就不應該去檢查滑鼠。

  早期的擴展卡提供跳線讓用戶設置其I/O地址和IRQ。這種方法很容易出錯,比如容易把兩塊卡設置成相同的地址或IRQ。為解決這個問題,軟硬體廠商們共同建立了一個標準,這個標準允許計算機主動地查詢各個擴展卡並分配I/O地址和IRQ。它不僅使得地址和IRQ的分配自動化,同時也避免了可能出現的衝突。這個標準就是「即插即用」,即Plug and Play,簡稱PnP。

  計算機啟動時首先運行的軟體是BIOS(Basic Input Output System)。BIOS喚醒計算機的所有設備,簡單地檢查計算機安裝了哪些設備,然後裝入操作系統。PnP設備的許多配置工作均由BIOS完成,但也有部分工作要由操作系統完成。Linux還未能提供完善的PnP支持,雖然許多PnP設備可配置成在Linux下工作,但也有許多不能。

  如果Linux沒有初始化某個PnP設備,不要馬上對此絕望,很有可能存在解決方法。請查看isapnp工具的文檔,Modem-HOWTO同樣可以提供幫助。如果兼容設備清單包含了該類Modem,不管它是不是PnP的,很可能無需任何額外的努力它就可以順利地工作。

  安裝Modem最常見的問題有三個:I/O地址或IRQ設置衝突,使用的是軟Modem,不完善的PnP支持導致Modem配置錯誤。

配置撥號網路

  Modem接入計算機之後,怎樣才能找到它?

  如果Modem是外置式的,那麼你應該清楚它連接到了COM1還是COM2。如果Modem是內置式的,那麼它很可能連接到COM3。COM1、COM2這類名字是Microsoft對串列埠的稱呼。在Linux中,COM1被稱為/dev/ttyS0, COM2是/dev/ttyS1,而COM3 則是/dev/ttyS2。在較早的Linux中,COM埠可能分別叫做/dev/cua0、/dev/cua1以及/dev/cua2。

  如果Modem是在Linux安裝期間配置的,那麼/dev目錄下會生成/dev/modem。這應該是一個指向Modem正確埠的連接。要查看/dev/modem指向了何處,在X終端輸入命令file /dev/modem。輸出結果應當類如:


/dev/modem: symbolic link
to ttyS2




  它告訴我們Modem安裝在COM3。如果/dev/modem存在且沒有指向Modem實際安裝的埠,則應刪除該連接。有些Linux發行版本提供一個名為modemtool的工具,使用它可以創建正確的連接。

  請確保所有用戶都具有訪問/dev/modem以及串列埠的許可權。

  如果你使用KDE,那麼kppp是一個幫助你配置和管理Internet連接的優秀工具。大多數Linux發行都提供kppp。注意在建立撥號連接之前必須先收集必要的信息,比如用戶名字、密碼、電話號碼、DNS伺服器地址。下面是具體的配置過程。

  步驟1:指定系統所安裝的Modem

  啟動kppp。如果不能在KDE菜單上找到它,試一下/usr/bin/kppp命令。

  首先要做的事情是讓kppp知道Modem在哪裡。點擊Setup按鈕,在配置窗口中選擇「Device」。

  點擊「Modem Device:」旁邊的箭頭,出現一個可選用Modem埠的清單,選擇Modem所接入的埠。接下來,再把「Connection Speed:」設置成115200,當然如果機器支持的話也可以把這個速度設置得更高。

  步驟2:測試Modem

  要測試Modem,先選擇「Modem」頁。點擊「Query Modem」按鈕,此時將出現一個窗口顯示查詢Modem的進度。請確保「Modem Volumn」(音量)設置在指示條的中間,以便在Modem工作時聽到聲音。

  如果kppp不能找到Modem,你可以返回步驟1試一下另外的埠(或速度)。

  步驟3:設置帳號參數

  接下來就可以設置帳號參數。返回「Accounts」頁,選擇「New」設置一個新的帳號。

  在「Dial」頁下面,取一個容易使人記起撥號目標的名字(建議使用ISP的名字)並將它輸入「Connection Name」框。然後再將ISP的電話輸入「Phone Number」框。

  現在選擇「IP」頁,選中「Dynamic IP Address」檢查框(如果ISP提供了固定的IP地址,則不要選中該項)。在DNS頁,輸入ISP提供的DNS伺服器的IP地址。

  點擊OK保存新創建的帳號。再次點擊OK關閉「Configuration」窗口。

  步驟4:連接

  現在我們回到了最初的kppp窗口。輸入用戶名字和密碼,然後點擊「Connect」按鈕。

  如果計算機能接通Modem,它將開始向設定的ISP撥號。此時可以聽到Modem撥號的聲音。

用Minicom測試Modem

  把Modem接入計算機之後首先要做的事情之一是測試一下看看它能否工作。這可以使用前面介紹的kppp,如果kppp不行,還可以使用一個名為minicom的Linux小工具。

  第一次運行minicom的時候必須進入設置模式,告訴它Modem所使用的埠。在X終端輸入命令minicom -s(必須以root身份運行),此時將出現一個菜單。使用「Serial port setup」,確保埠和速度的設置都正確無誤。

  配置好minicom之後,接下來就可以直接向Modem發送命令。大多數Modem都支持「賀氏協議」(Hayes Protocol)。試一下AT命令,如果Modem能正常工作,它將應答OK。如果沒有得到OK應答,那麼可能埠設置錯誤,可能Modem已經損壞,可能Modem不能適應你所設置的速度等選項。

  另外一個可能的原因是Modem被設置成了「靜默」模式。試一下ATE1Q0V1命令。該命令告訴Modem回顯並應答用戶命令(如果它能夠接受命令的話)。

  賀氏協議

  正如計算機業的其它許多事情,標準往往是由特定領域第一個取得成功的公司建立。第一個真正成功的Modem廠商是賀氏(Hayes)。賀氏開發了一種用於控制其Modem的非常簡潔的語言,即賀氏協議(Hayes Protocol)。今天,賀氏協議得到了幾乎所有Modem的支持。

  賀氏協議的命令以AT開頭,一行之內單個「AT」之後可以跟隨多個命令。雖然賀氏協議的應用已經相當普遍,但某些Modem仍不能支持完整的賀氏命令集。要得到Modem所支持賀氏命令的完整清單,請參見Modem手冊或製造商網站。

  下面是你應該熟悉的基本命令,大多數Modem都支持這些命令:


Z:(重新)初始化/重置
H:掛斷
Ln:揚聲器音量(L0=最低,L1=低,L2=中,L3=高)
Mn:揚聲器控制(M0=關,M1=連接后關,M2=總是開啟)
Vn:結果碼格式(V0=以數字顯示結果碼,V1=以文字顯示結果碼)
En:命令回顯(E0=不回顯,E1=回顯命令)





[火星人 via ] 玩轉Linux下的Modem已經有524次圍觀

http://www.coctec.com/docs/service/show-post-73868.html