linux下的modem撥號上網
在寬帶接入還沒有走進千家萬戶之時,我們要連上互聯網,還是要驅“貓”,所以對於許多網民而言,Modem是一個十分可愛的東西。Windows對Modem提供了很好的支持,使得安裝Modem十分簡單。但是在Linux下安裝這個可愛的東西時,卻並不是那麼好辦呀!
一、 認清Modem
我們都知道,電腦處理的是數字信息,而電話線路則是模擬信息,而Modem就是用來做數字信息和模擬信息之間的轉換的。
當電腦要將信息傳出來時,Modem將其調製成爲模擬信號,然後通過電話線傳送出去。
而當信息通過電話線傳送到電腦時,Modem將其從模擬信號解調成數字信息,這樣就能夠傳給電腦,讓電腦識別。
從這裏大家就應該不難理解它的學名:“調制解調器”了。
Modem可謂是五花八門,下面我們一起來理清這些“類型”:
1. 按照Modem的速率進行分類:
也就是Modem調製的速度,我們使用單位bps來衡量。Bps的全稱是Bit per second,也就是表示每秒多少位!
最早是2400bps,後來發展到9600bps、14.4Kbps、28.8Kbps、33.6Kbps、56Kbps。
大家是否記得,通常我們使用一個33.6Kbps的Modem下載時,每秒鐘的傳輸速度最大也就4K左右,可能大家對這個速度會有一些疑惑。其實這個問題很簡單,這個4K代表的是4K Byte,而33.6Kbps則是33.6K Bit,1Byte=8Bit。
2. 按照外形進行分類:
1) 外置式Modem,也稱外貓
這種Modem的外形是一個小盒子,它通過串口與電腦相連。
2) 內置式Modem,也稱內貓
這種Modem的外形則是與顯卡、聲卡、網卡相似,是通過插在電腦主板的ISA插槽或PCI插槽中使用的。
3. 按照實現原理來分:
1) 硬貓:顧名思義,使用硬件電路實現的MODEM;
2) 軟貓:隨着CPU速度的提高,使用軟件將CPU模擬成爲MODEM的DSP。使用這種MODEM,就需要軟件的支持。Windows中提供了這種軟件支持,因此,軟貓又常被稱爲Win貓,這種MODEM的特點是便宜但佔用資源厲害。筆者認爲,硬貓價格已經很低,使用這種軟貓沒有什麼意義。
二、 Linux對Modem的支持
首先,我們一起來看一下Linux對於MODEM的支持情況:
1. Linux對軟貓支持有限,我的建議是你別買軟貓這種東西!如果你真的需要驅動這種軟貓,參見本篇的第八部分:驅動軟貓。
2. 對於外置式MODEM而言,可謂是配置最簡單的設備,只需插入某個串行口,再對這個串行口進行相應的配置就可以使用了!
3. 對於內置式MODEM而言,也是通過串行口來進行使用的,但有些內置式MODEM並不能被Linux所認識(畢竟是插在主板上的,是一種虛擬的方式來使用串行口的),我們將在第七部分:驅動內貓中說明。
4. 在Linux中,MODEM的速率並不影響Linux的支持。
總而言之一句話:在Linux中使用MODEM,都是通過串行端口來進行的。只要系統能夠找到這個串行端口,就可以通過串行端口來通訊。因此,驅動MODEM的思路就是:
1) 對於外置式MODEM與能夠被Linux系統識別的內置式MODEM,只需直接使用串行端口對其操作就行了;
2) 對於那些Linux不能夠識別的內置式MODEM,我們先得想辦法讓它被Linux系統識別,然後才能夠使用第1種方式來操作。
三、 Linux下的串行口
在Linux下,所有的設備都表現成爲一個文件形式,對設備的操作也就與對文件的操作一樣了。這些所有代表設備的文件都存放在“/dev”目錄下。
串行端口也不例外,不過有些特別的是,每個串行端口對應的不僅是一個文件,而是兩個。其中一個是用於拔入,而另一個則用於拔出。
1) 用來拔出的的設備文件名是ttySx,其中最後一個x是個數字,從0開始編號,與DOS串行口名的對應關係是:
DOS下的名稱 Linux下的名稱
COM1 /dev/ttyS0
COM2 /dev/ttyS1
COM3 /dev/ttyS2
COM4 /dev/ttyS3
…… ……
2) 而用來拔入的設備文件則是caux,其中最後一個x也是個數字,也是從0開始編號,與DOS串行口名的對應關係是:
DOS下的名稱 Linux下的名稱
COM1 /dev/cau0
COM2 /dev/cau1
COM3 /dev/cau2
COM4 /dev/cau3
…… ……
不過現在許多Linux發行版本似乎已經不對拔入、拔出加以區分了,都統一使用ttySx命名了。如果在你的系統的/dev目錄中找不到ttySx的話,則需要自己手動創建,如:
# cd /dev
# ./MAKEDEV ttyS0
每個串行端口都均需使用IRQ與I/O地址資源在,一般來說COM1和COM3共用IRQ3,而COM2和COM4共用IRQ4(如下表所示):
串行端口 IRQ I/O地址
/dev/cau0、/dev/ttys0 4 0x3f8
/dev/cau1、/dev/ttys1 3 0x2f8
/dev/cau2、/dev/ttys2 4 0x3e8
/dev/cau3、/dev/ttys3 3 0x2e8
通常,在Linux系統中,每一個設備都需有一個唯一的IRQ號,也就是說如果有三個串行設備的話,就必須把空閒的IRQ中斷拿過來用了。例如:
/sbin/setserial /dev/ttyS0 irq 3 (COM1口上接着鼠標,中斷號爲3)
/sbin/setserial /dev/ttyS1 irq 4 (COM2口上接着一個MODEM,中斷號爲4)
/sbin/setserial /dev/ttyS2 irq 5 (COM3口上還有一個MODEM,而IRQ3已經佔用,因此只得使用空閒的IRQ5)
我們只需將這些命令放在/etc/rc.d/rc.local文件中,這樣就可以保證每次啓動Linux時就完成設置。
我們可以使用兩個簡單的命令來查看一下是否存在IRQ和I/O地址的衝突:
cat /proc/interrupts 查看IRQ中斷號
cat /proc/ioports 查看I/O地址
四、 使用MODEM拔號上網
通常,我們是通過MODEM拔打ISP提供的拔號服務電話號碼,從而連入Internet的,在Linux系統中,整個過程爲:
1.準備好相應的軟件
做爲拔號上網的客戶端所需的程序有chat和pppd,如果你的機器上還沒有這兩個程序,就要安裝它們,它們包含在ppp軟件包中(如ppp-2.3.7-2.i386.rpm)。
chat程序的用途是撥號並等待提示,根據提示輸入用戶名和密碼等登錄信息。而pppd的用途則是建立並維持與服務器的ppp連接,傳輸數據。
另外,爲了測試方便,我們還需要一個名爲minicom的軟件。不過通常這些軟件都已經會在安裝Linux系統時安裝了。
2.使用minicom測試拔號
我們可以通過minicom軟件來測試MODEM是否工作正常。
1) 首先以root身份登錄系統,然後運行命令:minicom -s。這將會啓動一個文本對話框的配置界面。在這個配置界面中,我們可以使用上、下箭頭鍵在菜單中選擇,用Enter鍵選中命令。
2) 測試調制解調器的關鍵在於設置串行端口。我們在此選擇Serial prot setup,進入串行端口配置菜單。如果對這裏的項目需要修改,只需按相應的字母鍵就可以了。
3) 首先我們應設置串行設備(選擇A Serial Device)。這時,要將這個位置變爲相應的設備文件,例如,如果調制解調器連接在第2個串口上.則要將其設置爲/dev/ttys1,因爲Minicom用於輸出連接。不過,由於Minicom默認是使用/dev/modem來標識MODEM的,因此,你可在此之前執行命令:ln /dev/ttys1 /dev/modem。這樣會省去不少麻煩。
4) 然後我們根據所連接的系統要求設備MODEM參數(選擇E Bps/Par/Bits),在這裏需要設置的包括速率(Bps)、奇偶校驗位(Par)、數據位和停止位(Bits)。其中速率設備爲MODEM的最高連接速度,通常可以是MODEM速度的4倍。例如,對於1.44kbPs的調制解調器,應選擇57.6kbps.對於28.8kbps的調制解調器.應選擇115.2kbps。而對於數據位的設置,通常是無奇偶位、8個數據位和1個停止位。例如:38400 8N1。
5) 完成之後.按Enter鍵鍵返回serial port setup菜單、再接Enter鍵,返回主菜單。有了這些信息,就可以測試調制解調器了。選擇Save setup as df1將配置保存爲默認配置.然後選Exit退出安裝界面。
6) 打開Minicom程序,如果出現Ok提示,則調制解調器設置正確可以開始正常工作。
7) 可以輸入'AT'並按Enter鍵進行測試。這時,回到OK信息。如果一切順利,則可以開始撥號。看看是否正常進接.輸入"ATD163"。此時,應該聽到連接的聲音,然後看到連接信息和遠程系統的信息提示:
ATD163
CONNECT 115200
這時,就說明你的MODEM已經可以使用了。
8)最後按CTRL+A,Q退出Minicom。
3.設置DNS域名解析
在Linux中,要設置DNS域名需要編輯配置文件/etc/resolv.conf,在最後加入一行:
nameserver xxx.xxx.xxx.xxx (如:nameserver 202.101.103.55)
其中IP地址是ISP提供的域名服務器的IP地址。
4.手動拔號上網
下面,我們就在命令行上手動完成拔號上網工作:
1) 首先,運行minicom,然後輸入Ctrl-A,再敲D, 將會出現一個拔號界面,此時選擇manual(手動),並輸入ISP的電話號碼,調制解調器一陣亂響之後,會有幾聲音樂響,並在屏幕上提示按任意鍵繼續。
2) 接着,屏幕上就會出現你ISP的信息,根據提示輸入你的username和password,(有可能還會要求你選擇ppp連接還是slip連接等)如果成功的話,就會出現一些垃圾字符。
3)這時,輸入CTRL+A再按Q,退出minicom。
注意,不是按X,那樣就會斷開這次拔號
4) 接着,我們使用pppd建立ppp連接,也就是執行命令:
pppd debug lock modem crtscts defaultroute /dev/ttyS1 115200&
命令說明:
deubg 使其在/var/log/messages中記錄下相關調試信息;
lock 鎖定串行口設備
modem 說明使用MODEM的控制信號
crtscts 說明使用硬件數據流控制
defaultroute 在本機路由表中加入一項缺省路由
/dev/ttyS1 指出Modme所在端口
115200 說明串行口的速率
& 表示使其在後臺運行。
一會兒之後,ppp連接就會建立,這時你可以試一試:
a. 運行ifconfig,你將看到ppp0的網絡接口,這個接口的IP地址就是對端服務器給你分配的IP地址;
b.運行route,你會發現對端服務器的IP地址被加入路由表了;
c.ping一下遠方的主機,應該能夠連通。
你還可以在另一個虛擬控制檯上運行:
tail -f /var/log/messages
這時,你可以觀察到動態的pppd日誌信息。
4) 如果要斷開這次連接的話,只需執行命令:
killall pppd
5.通過腳本程序自動拔號上網
安裝了ppp軟件包後,會生成/etc/ppp和/usr/doc/ppp-x.x.x(其中x.x.x是版本號)兩個目錄,pppd的配置文件都存放在/etc/ppp目錄中,而/usr/doc/ppp-x.x.x則存放着pppd的相關文檔,在這個目錄下有一個名爲scripts的子目錄,這個目錄中有幾個有用的文件:
 ppp-on-dialer:一個負責拔打電話,並輸入所需登錄信息的腳本程序(實現了當時我們通過minicom完成的工作);
 ppp-on:負責啓動本機的pppd,與服務器端的pppd進行對話,實現端對端連接;
 ppp-off:負責斷開連接的一個腳本。
下面,我們就使用它們來簡化我們的拔號上網工作:
1) 首先,將它們複製一份到/etc/ppp目錄中;
2) 編輯ppp-on文件,將以下幾部分根據你的實際情況修改:
TELEPHONE=8163
ACCOUNT=8163
PASSWORD=8163
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400
注:這些內容在ppp-on文件中都是有的,不是新增,而是修改它的值。
3) 修改ppp-on-dialer文件,將以下幾部分根據你的ISP的實際情況做相應的修改:
username: $ACCOUNT
assword: $PASSWORD
" select(1~3):" 1
注:“:”左邊的內容都是拔號時會問你的,右邊的都是相應的回答。這些內容在我們當時使用minicom做測試拔號時就會看到了!
4) 爲三個腳本賦予可執行權限,也就是執行命令:
chmod +x ppp-on ppp-on-dialer ppp-off
5) 到此,我們就可以執行/etc/ppp-on完成拔號上網,執行/etc/ppp-off斷開網絡連接了。
五、 使用kppp軟件完成拔號上網
對於習慣使用了圖形化界面的Windows用戶而言,這些晦澀的命令行操作,會嚇走一大堆人的,別急,現在我們就介紹一種圖形化的拔號上網軟件kppp,只要你安裝了KDE,就可以使用這個軟件。使用它拔號上網很簡單:
1) 運行Kppp:如下圖所示,先點擊“K”按鈕,選擇Internet,然後選擇Kppp:
2) 單擊Kppp面板上的Setup按鈕,將出現如下圖的界面:
首先,我們單擊“New…”按鈕,進行Accounts的設置;
3) 接着,我們選擇“Device”進行相應的設置:
4) 設置完成後,按OK按鈕退出,返回Kppp主畫面:
5) 填入Login ID和Password,再按Connect按鈕,就可以開始拔號了,拔號成功了,會在任務條上出現一個MODEM似的小圖標,就像Windows中的網絡連接示意圖標一樣。開始衝浪吧!
六、 驅動內貓
對於大多數內貓而言,Linux系統能夠自己識別到,那隻需用前面的方法使用它就行了。而如果你的Linux無法識別它的話,就需要讓Linux系統識別到它。通常我們可以採用兩種方法:
1、 對於一些即插即用設備而言,我們可以使用isapnptools工具解決這一問題:
1) 首先以root用戶登陸,然後運行命令/sbin/pnpdump > /etc/isapnp.conf,將你機器上所有的即插即用設備信息寫入文件/etc/isapnp.conf中。
2) 接下來需要爲該設備分配IRQ與I/O資源:
a.根據該設備在Windows中查看其所佔資源,當然這要你在本機上裝有Windows;
b.或者自已動手爲其分配資源,只要不衝突就行了!(已分配的資源可以從/proc/interrupts、/proc/ioports、/proc/dma查到)
3) 然後從isapnp.conf中找到你要驅動的設備,然後去掉它們前面的註釋號“#”,將填入它們的INT(IRQ號)、IO(IO地址)及DMA等。
4) 設置完成後,我們就可以執行以下命令驅動該設備:
/sbin/isapnp /etc/isapnp.conf
5)如果該命令沒有出錯的話,就會在屏幕上打印出相關的硬件信息,你只需將該句命令寫入/etc/rc.d/rc.local就可以使得每次啓動Linux時,都自動驅動該設備。
2、 如果你能夠找到該款內貓的驅動程序的話,那也可以採用安裝驅動程序的方法。採用這種方法,大致的步驟如下:
1) 下載驅動程序包;
2) 解壓驅動程序包,然後運行make,完成編譯;
3) 使用insmod將驅動程序模塊加入內核;
4) 然後在/dev目錄下創建一個設備,命令如下:
cd /dev
mknod 驅程模塊名 c 127 1
5) 然後創建一個名爲modem的符號鏈接,使其指向剛剛創建的設備;
6) 這樣,我們就可以使用前面的方法來操作MODEM了。
由於對於不同的MODEM,驅動程序不同,因此無法一一細解,只能是將安裝的思路整理出來,供大家參考。
七、 驅動軟貓
由於軟貓的生產廠商不願公開軟貓的技術,也不願意開發Win9x/NT以外的驅動程序。因此Linux對其的支持就十分有限。
如果你的MODEM包裝盒上注有"HCF" , "WinMODEM" 或 "soft MODEM" 字樣的話,就很可能是軟貓。如果你想在Linux下使用它,那一定要去www.linmodems.org看一看。該網站中有一些軟貓的驅動程序,目前已有支持Cirrus Logic(CL-MD5620DT)、 Conexant (Rockwell) HSF、ESS ES56T-PI、MODEMs (PCI)、 Lucent LT WinMODEM、 Pc Tel等芯片的軟貓驅動程序。
下面我就以CL-MD5620DT爲例(其他品牌類似),說明一下軟貓的驅動方法,希望對軟貓用戶有一些指導和參照。
1. 從www.linmodems.org中下載其驅動程序clmodem-0.3.0+gg.tar;
2. 執行以下命令,解開這個tar包:
# tar - xvf CLMODEM-0.3.0+gg.tar
3. 由於該驅動程序不支持PnP(即插即用),因此需要手工配置IRQ與I/O地址,我們可以通過執行cat /proc/pci |more命令來獲取其IRQ與I/O資源佔用情況。從該命令的輸出中你可以看到類似下面的一段信息:
Bus 0, device 13, function 0:
Communication controller: Cirrus Logic Unknown device (rev 1).
Vendor id=1013. Device id=4000.
Medium devsel. IRQ 10.
Non-prefetchable 32 bit memory at 0xebffe000 [0xebffe000].
I/O at 0xe 000 [0xe001].
從中,我們可以得知,其資源佔用情況:IRQ=10;I/O地址=0xe0000。
4. 然後我們修改驅動程序中的clm_config.h文件,將其前兩行根據其輸出修改:
#define CLM_BASE_IO_ADDRESS 0xe000
#define CLM_IRQ 10
5. 然後在驅動程序目錄中執行make命令,編譯驅動程序;
6. 接着使用insmod命令將該模塊裝載入內核:
/sbin/insmod clm.o
若要每次啓動Linux時自動加載該模塊,可將該句加入/etc/rc.d/rc.modules文件。
7. 使用mknod命令創建設備:
mknod /dev/clm c 121 0
8. 最後,將/dev/modem鏈接爲/dev/clm:
ln /dev/modem /dev/clm
好了,Linux已經可以識別你的軟貓了,你就可以前面的方法拔號上網了。