linux下的modem撥號上網

 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已經可以識別你的軟貓了,你就可以前面的方法拔號上網了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章