Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236210
  • 博文数量: 49
  • 博客积分: 1035
  • 博客等级: 少尉
  • 技术积分: 477
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-14 17:23
文章分类

全部博文(49)

文章存档

2015年(15)

2014年(6)

2011年(1)

2008年(3)

2007年(11)

2006年(13)

我的朋友

分类: LINUX

2006-08-01 15:03:47

Linux下设备完全驱动之二(1)
时间:2005-09-25 作者:郄晓烨 来源:赛迪
前一节Linux培训园地:Linux下设备完全驱动之一,大家看过之后相信一定印象深刻。这一节首先讲述IDE硬盘及光驱的设置、IDE刻录机的使用,以及如何安装SCSI硬盘驱动。然后介绍以太网卡驱动模块的加载及网络接口的启功过程,如何调整网卡的参数,Modem、ADSL和宽带的驱动安装,以及PPP连接的设置等。

IDE硬盘及光驱

1.IDE设备的驱动过程

操作系统首先是安装在块设备上,没有对块设备的支持系统就无法启动,所以首先介绍常见块设备的安装。硬盘就是最常见的块设备,普通PC上的硬盘通常是IDE接口的,而服务器上的硬盘通常是SCSI接口的。

一般内核中内置对通用IDE控制芯片的支持。下面看一下IDE硬盘在内核中的驱动过程,dmesg命令可以看到内核在启功和加载内核模块时的信息:

# dmesg | less


在Linux内核启动过程中,可以发现内核首先驱动初始化CPU、内存、系统时钟部分,接着加载PCI总线的驱动,然后就加载了通用的IDE驱动程序:

Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4


接着初始化IDE的控制器,IDE控制器集成在Intel的ICH4南桥芯片组中,IDE控制芯片驱动加载后,进行初始化传输模式:

ICH4: chipset revision 1
            ICH4: not 100% native mode: will probe irqs later
            ide0: BM-DMA at 0xbfa0-0xbfa7, BIOS settings: hda:DMA, hdb:pio
            ide1: BM-DMA at 0xbfa8-0xbfaf, BIOS settings: hdc:DMA, hdd:pio


该驱动程序会向核心中注册主设备号为3的block型设备。可以看到,在IDE控制器初始化时,占用的I/O资源及分配给它的中断号:

ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
            ide1 at 0x170-0x177,0x376 on irq 15


接着使用IDE控制器查找连接在IDE接口上的设备,如果检查到硬盘则加载IDE硬盘的驱动程序,设置了该硬盘的基本参数,设置传输方式为UDMA(100),也就是ATA100(100Mb/s的传输速度),并且根据这个驱动程序检测硬盘上的分区:

hda: attached ide-disk driver.
            hda: host protected area => 1
            hda: 78140160 sectors (40008 MB) w/7898KiB Cache, CHS=4864/255/63, UDMA(100)
            ide-floppy driver 0.99.newide
            Partition check:
            hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 hda9 >
/dev/hda代表第一个IDE接口的主设备,它的设备号为block(3/0),而/dev/hda1是这块硬盘的第一个分区,设备编号是 block (3/1);/dev/hdb代表第一个IDE接口的从设备,设备编号为 block(3/64)。

由此我们可以看到,内核默认可以支持1~63个分区,其中第一个逻辑分区的编号肯定为/dev/hda5。但是,在/dev目录下查找有hda1~hda32,共32个分区文件,如果需要更多的分区,就需要使用mknod命令来创建更多的设备文件。

/dev/hdc是第二个IDE接口的主设备;/dev/hdd是第二个IDE接口的从设备。

2.安装、升级常见的IDE驱动程序

通用的IDE控制器可以通过内核这样加载起来,如果遇到一些较新的芯片组,当前的内核无法完全发挥出新硬件的性能,这时就要向内核中打补丁,例如,2.4.20-8的内核就无法支持VIA VT8237芯片组中的IDE ATA133方式,需要向内核中打补丁。

先到VIA的网站上下载相关补丁,网址为,注意要选择适合当前自己内核的驱动,接下来是升级内核,给内核打补丁。

# rpm -ivh kernel-source-.i386.rpm


安装需要版本的源代码包。把刚才链接中的补丁下载,将这个patch文件解开:

# tar xzvf  VIA IDE ATA133 Patch 8237 ver0.8.gz


进入解包出来的目录,将需要的patch文件cp到 /usr/src目录:

# cp  -patch-  /usr/src


Kernel Version代表内核的版本号,Linux OS代表不同的Linux系统。

# cd /usr/src
            # patch -p0 < -patch-


将patch打入内核中,重新编译内核:

# cd /usr/src/linux-


编辑 Makefile文件,把 "EXTRAVERSION=" 改成 "EXTRAVERSION=-test",这是给新的内核命名。

# cp /boot/config-XXX  .config
            # make menuconfig  ( config 或 xconfig也可以 )


确定 "ATA/IDE/MFM/RLL support/IDE,ATA and ATAPI Block devices"中的"VIA82CXXX chipset support"被选中。

开始编译内核:

# make dep
            # make clean
            # make bzImage
            # make modules
            # make modules_install
            # cp arch/i386/boot/bzImage (或 vmlinuz-test)  /boot/vmlinuz-test
            # cp /boot/initrd-< Kernel Version >.img  /boot/initrd-test.img


编辑 /boot/grub/grub.conf文件,在最后添加下面三行:

title linux-test
            kernel /boot/vmlinuz-test ro root=/dev/hda1
            initrd /boot/initrd-test.img


重新启动系统,使用刚刚编译的内核就会发现启动信息中多出一行“linux-test”。留意启动时的信息,就会发现有下面一行信息:

"VP_IDE: VIA vt8237 (rev 00) IDE UDMA133 Controller on pci00:0f.1"


如果正常启动,各种服务也都没有问题,那么以后就可以用这个新的内核了。可以用# hdparm -i命令来调整硬盘的传输方式,检查硬盘目前的传输模式。

/dev/hda:
            Model=IC25N040ATCS05-0, FwRev=CS4OA63A, SerialNo=CLP429F4HALVPA
            Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
            RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
            BuffType=DualPortCache, BuffSize=7898kB, MaxMultSect=16, MultSect=16
            CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78140160
            IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
            PIO modes:  pio0 pio1 pio2 pio3 pio4
            DMA modes:  mdma0 mdma1 mdma2
            UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5  //这里显示所支持的硬盘传输模式
            AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled
            Drive conforms to: ATA/ATAPI-5 T13 1321D revision 3:
            * signifies the current active mo


查看一下当前硬盘的工作模式,如果不是ATA133,则可以灵活使用控制硬盘传输模式的命令:

# hdparm -d1 /dev/hda  //enable DMA 模式
            # hdparm -d0 /dev/hda  //disable DMA 模式
            # hdparm -X70 /dev/hda  //将传输模式切换到UDMA 6 -ATA133模式


-X后数字16~18代表SDMA 0~2,32~34代表MDMA 0~2,64~70代表UDMA 0~6。

将最后一行加入到/etc/rc.d/rc.sysinit或/etc/rc.d/rc.local文件中,可以让硬盘每次启动都工作在ATA133下。
3.安装nforce芯片组的驱动程序

AMD64平台的nforce系列芯片组性能强劲,虽然可以用常规的方法加以驱动,但有可能无法发挥新设备的特性,或者该芯片组的网卡、声卡无法使用。nVIDIA提供了更方便的RPM文件供使用,其中一些是源代码tar文件,需要进行编译;有些是RPM包,直接进行安装就可以了。

nforce芯片组在Linux下驱动的下载地址为,其中包含了内核的补丁、芯片组中对网卡及声卡的驱动程序。下载经过编译的RPM包可以直接安装:

# rpm -ivh NVIDIA_nforce.athlon.rpm


如果使用的不是SuSE或Red Hat Linux系统,也可以下载带有源代码的.src.rpm包经过编译后再安装:

# rpm -ivh NVIDIA_nforce.src.rpm
            //将驱动程序的源程序文件安装到系统中
            # cd /usr/src/redhat/SPECS
            # rpmbuild -bb NVIDIA_nforce.specs
            //编译源驱动程序,编译成可直接使用的rpm文件
            # cd /usr/src/redhat/RPM/i386/
            //根据具体包的不同,也可能是i686、noarch等
            # rpm -ivh NVIDIA_nforce.i386.rpm
            //程序自动安装包内的驱动程序,并利用RPM包中的脚本自动配置


光驱的驱动及刻录机的使用

1.光驱的驱动过程

编译内核时,在ATA/IDE/MFM/RLL选单中都会有IDE/ATAPI CDROM support的选项,通常所见到的内核都将这个部分编译在了内核中,所以不需设置光驱就可以使用。下面看一下系统启动时光驱是如何驱动的:

# dmesg |grep  CD
            hdc: HL-DT-STCD-RW/DVD-ROM GCC-4240N, ATAPI CD/DVD-ROM drive
            Uniform CD-ROM driver Revision: 3.12


一般的通用CD/DVD-ROM驱动程序就可以将光驱驱动起来,不需要特别的配置。如果遇到的是SCSI光驱,则一般的内核也可以驱动,因为在编译内核时,一般会将SCSI的内容编译出来。



如果没有SCSI的光驱驱动,则可以自己手动编译。make menuconfig(或xconfig)时,在SCSI support 选单中只要将SCSI support设置为“Y”或“M”(Y代表该部分编译在内核中,M表示该部分编译为内核模块);SCSI CD-ROM support设置为“Y”或“M”;SCSI generic support设置为“Y”或“M”,这样就可以驱动SCSI接口的光驱了。
2.CD/DVD刻录机的驱动及使用

现在CD或DVD刻录机越来越普及,那么在Linux下如何使用内置的CD或DVD刻录机呢?默认的情况下,系统会将刻录机视作只读的驱动器,只加载普通的CD/DVD-ROM驱动,光驱无法写入。

因此,需要用ide-scsi 伪设备驱动程序来驱动刻录机,将普通的IDE接口的设备模拟成一个SCSI接口的设备,这时才能向其中刻录。我们可以使用三种方式来实现将IDE光驱模拟为SCSI光驱。假设使用GRUB作为bootloader,刻录机安装在第二个IDE接口,是主设备,则它默认应该为/dev/hdc 。

(1)更改/boot/grub/grub.conf文件在kernel /boot/vmlinuz-2.XXX ro root=/dev/hda1之后,添hdc=ide-scsi。

(2)更改 /etc/modules.conf文件添加下面两行:

ide-cd ignore=\"hdc\"
            ide-scsi


(3)直接编译内核

不编译ATA/IDE/MFM/RLL选单中的IDE/ATAPI CDROM support部分,但是要编译对SCSI光驱的支持。

上面三种方法都是不希望系统用自带的普通CD/DVD-ROM驱动程序去驱动刻录机,希望将刻录机模拟成一个SCSI设备,其中第一种方法最简单,成功后就可以通过以下命令来刻录CD或DVD光盘。

# mkisofs -Jv -V examplecd -o example.iso /root/


将/root/目录下的文件做成一个名叫example.iso的光盘镜像文件,该文件的卷标为xamplecd。

还可通过命令将该文件加载到/mnt/iso文件夹中,可以自由添加删除镜像中的文件,但要注意不要超过光盘的容量。

# mkdir /mnt/iso
            # mount -t iso9660 -o loop example.iso /mnt/iso


调整/mnt/iso文件的内容:

# umount /mnt/iso


最后使用cdrecord命令来刻录:

# cdrecord -scanbus


查看SCSI总线中刻录机的配置信息:

Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 J?rg Schilling
            Linux sg driver version: 3.1.25
            Using libscg version 'schily-0.7'
            cdrecord: Warning: using inofficial libscg transport code version
            (schily - Red Hat-scsi-linux-sg.c-1.75-RH '@(#)scsi-linux-sg.c
            1.75 02/10/21 Copyright 1997 J. Schilling').
            scsibus0:
            0,0,0     0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM
            0,1,0     1) *
            0,2,0     2) *
            0,3,0     3) *
            0,4,0     4) *
            0,5,0     5) *
            0,6,0     6) *
            0,7,0     7) *


可以看到目前的光驱在SCSI总线的参数,然后根据参数来输入下面的命令刻录光盘:

# cdrecord -v -eject speed=24 dev=0,0,0 example.iso



speed=24是以24倍速来刻录光盘,dev=后加上刚才显示的刻录机的SCSI参数。

SCSI设备驱动过程

下面以Adaptec SCSI RAID 3200S卡为例,介绍SCSI RAID卡的驱动过程。这是常见的带RAID功能的SCSI卡。在大部分编译好的内核中,都会编译对SCSI设备的支持。但是需要知道,内核中只是支持通用的SCSI总线,而具体的SCSI卡还需要加载相应的驱动程序。SCSI芯片驱动的安装比较特殊,下面分成两种情况叙述。

1. Linux系统的启动文件就是在SCSI硬盘上

这种情况下,SCSI设备的驱动程序不能像普通的驱动程序来安装。因为如果系统启动时没有加载SCSI卡的驱动程序,那么根本无法访问其它的Linux系统文件,所以必须在内核启动后立刻就加载该设备的驱动程序。以下是在Red Hat系统中具体的安装过程。

(1)从Adaptec网站 下载Adaptec SCSI RAID 3200S卡针对Red Hat 9.0的驱动程序,大家可以看到这是一个.img的镜像文件。

(2)将该镜像文件写入软盘中。Linux下可以用下面命令:

# dd if=dpt_i20-drv_2.5.0-rh9-i686.img of=/dev/fd0



或者

# cat dpt_i20-drv_2.5.0-rh9-i686.img  > /dev/fd0



在Windows下利用Red Hat第一张安装光盘中的/CDROM/dosutils/rawrite.exe程序。

(3)在启动Red Hat安装过程时,boot提示符出现时进入安装模式:

boot:  linux dd



(4)按照向导提示,将刚才制作的驱动软盘插入。

以后的安装过程就没有什么不同了。安装向导实际上将软盘上的驱动程序放到了initrd的RAMDISK(内存磁盘镜像)文件中,每次内核启动后,都最先加载这个内存虚拟硬盘的镜像,利用里面的SCSI驱动程序来驱动SCSI RAID卡和卡上连接的硬盘。
2. Linux系统已经安装到一个IDE的硬盘上

这种情况跟其它的驱动程序没有太大的区别,用modprobe或insmod将SCSI卡的驱动模块加载到内存中。(1)查看系统是否能访问PCI设备:

# lspci -v | grep -i  i2o



(2)从Adaptec网站下载驱动程序,检验是否可以加载模块。

# rpm -ivh dpt_i20-drv_2.5.0-rh9.rpm
            # modprobe dpt_i2o



(3)察看是否可以访问/dev/sda设备,或者已经创建好/dev/md0设备。

加载以太网卡驱动模块及参数调整

1.以太网卡的驱动过程

处理网络方面任务是Linux的长项,仅仅一两兆的Linux内核就可以对TCP/IP有很好的支持。下面首先了解一下最常见的网络设备—以太网卡的驱动过程。

在内核加载后,虽然已经有了对TCP/IP协议的支持,但是具体的网络接口设备的驱动并没有加载。在内核启动后,将硬盘上的根分区mount到系统中,系统就会查找模块配置文件/etc/modules.conf,并按照该文件记录的内容来加载模块:

# cat /etc/modules.conf
            alias eth0 8139too
            alias sound-slot-0 i810_audio
            post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
            pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :
            alias usb-controller usb-uhci
            alias usb-controller1 ehci-hcd



上面代码表示加载8139too模块,我的网卡是8139的100Mb以太网芯片,并将该模块取别名叫做eth0。这表示第一个以太网的网络接口,以后只要访问eth0,就是访问这块网卡。然后系统会在/lib/modules/2.4XXX/的modules.deps中查找该模块的具体位置:

# grep 8139too /lib/modules/2.4.21-4.EL/modules.dep
            /lib/modules/2.XXX/kernel/drivers/net/8139too.o:
            /lib/modules/2.4.21-4.EL/kernel/drivers/net/mii.o
            /lib/modules/2.4.21-4.EL/kernel/lib/crc32.o



以上内容在同一行中,表示8139too模块依存于mii模块和crc32模块,8139too模块的具体位置在/lib/modules/2.XXX/kernel/drivers/net/8139too.o,所有系统内置的网络驱动程序都在/lib/modules/2.XXX/kernel/drivers/net目录下。

驱动模块加载完成之后,可以直接通过命令ifconfig来设置网卡的IP地址,:

# ifconfig  eth0 192.168.1.1



这样设置的IP地址重启后就会失效,使用netconfig命令可以永久更改IP地址:

# netconfig
            # service network restart 或者
            # /etc/rc.d/init.d/network restart`



那么系统每次启动时是怎样配置网络的呢?在Linux系统中,网络作为一项服务被加载,配置文件是/etc/rc.d/init.d/network,在该文件中可以看到系统启动网络接口、绑定IP地址、设定静态路由的过程,这个文件通过调用/etc/sysconfig/network-scripts/ifcfg-*的几个文件来配置各个网卡的IP地址。比如有eth0,则会生成一个文件ifcfg-eth0,系统每次启动时自动绑定eth0的IP地址:

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
            DEVICE=eth0
            ONBOOT=yes
            BOOTPROTO=none
            IPADDR=192.168.0.1
            NETMASK=255.255.255.0
            TYPE=Ethernet



以上就为eth0设备绑定了192.168.0.1的IP地址。

# cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
            DEVICE=eth0:1
            ONBOOT=yes
            BOOTPROTO=none
            IPADDR=192.168.1.1
            NETMASK=255.255.255.0
            TYPE=Ethernet



以上的ifcfg-eth0:1文件为eth0设定了第二个IP地址192.168.1.1,这个文件是我添加的,注意DEVICE=eth0:1 跟上一个文件是不一样的。
2.安装3COM 3CR990网卡驱动程序

我们可以看到,系统内置的网卡驱动程序在/lib/modules/2.4.XXX/kernel/drivers/net目录下,如果网卡不在默认支持的硬件中,可以用以下方法来安装网卡驱动。

比如,我们有一块3COM 3CR990网卡,可以到3COM网站上下载针对2.4内核的驱动。然后解压缩下载的文档到解开的目录中:

#t tar xvfz 3c990-1.0.0a.tar.gz
            # make



此时当前文件下将会生成3c990.o的驱动模块。

# modprobe ./3c990.o



看一下该模块是否可以被正常加载,如果没有问题,就更改/etc/modules.conf文件和/lib/modules/2.XXX/modules.dep文件,让模块每次启动时加载:

# echo “alias eth0 3c990” >> /etc/modules.conf
            # cp  ./3c990.o  /lib/modules/2.XXX/kernel/drivers/net
            # echo  "/lib/modules/2.XXX/kernel/drivers/net/3c990.o:" >> /lib/modules/2.XXX/modules.deps



3.调整以太网卡的参数

有时在加载完网卡的驱动后,如果网卡的状态不正确,比如驱动起一块网卡,但是它在100Mb的速度上工作很不稳定,就可以使用mii-tool命令调整以太网卡的属性。目前多数以太网卡为10BaseT与100BaseTx的10Mb/100Mb自适应网卡,也有较新的支持1000BaseT的千兆以太网卡。

下面介绍mii-tool命令的一些用法:

(1)显示当前网卡所使用的以太网类型,目前这块网卡使用的是100baseTx的全双工工作方式。

# mii-tool
            eth0: negotiated 100baseTx-FD flow-control, link ok



(2)显示当前的网卡支持的所有以太网类型。

# mii-tool -v
            eth0: negotiated 100baseTx-FD flow-control, link ok
            product info: vendor 00:08:18, model 22 rev 2
            basic mode:   autonegotiation enabled
            basic status: autonegotiation complete, link ok
            capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
            advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
            link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control



(3)强制eth0使用10baseT-FD的方式(10Mb全双工的方式)工作。

# mii-tool -F 10baseT-FD eth0



(4)解除eth0的强制状态,让eth0自动侦测使用什么方式通信。

# mii-tool -R
            resetting the transceiver...


Modem和ADSL驱动安装及PPP连接设置

1.外置Modem的驱动程序安装

Modem分为外置和内置两种。比较而言,外置的Modem配置较容易,使用方便。Modem一般接在串口上,在Linux中串口对应的设备文件为/dev/ttyS*,如果是COM1口,则对应/dev/ttyS0。如果不知道连接的是哪一个COM口,可以先给Modem加电,用以下命令测试:

# echo AT > /dev/ttyS0



如果Modem的TR灯亮,则表明该Modem接到COM1口上;如果不亮,再试一下/dev/ttyS1文件。知道了Modem连接的是哪一个串口后,就可以拨号了。拨号的过程实际上是通过Modem建立PPP(点对点通信协议)的连接。

在命令行下,可以使用pppd进行拨号,常见的Linux系统中会安装这个拨号程序,大家可以看一下/etc/ppp目录下是否有相关的脚本文件,如果没有可以下载并安装ppp包ftp://cs.anu.edu.au/pub/software/ppp。将包安装后,可以查找ppp-on和ppp-on-dialer文件,把文件复制到/etc/ppp文件夹下,修改ppp-on文件如下几个地方:

TELEPHONE=270  //ISP提供的上网电话号码
            ACCOUNT=user  //ISP提供的账号名称
            PASSWORD=123  //登录密码
            LOCAL_IP=0.0.0.0  //PPP连接的IP地址,0.0.0.0表示由ISP动态分配
            REMOTE_IP=0.0.0.0   //远端IP地址,一般为0.0.0.0
            NETMASK=255.255.255.0
            export TELEPHONE ACCOUNT PASSWORD \
            DIALER_SCRIPT=/etc/ppp/ppp-on-dialer \   //查找另一个必须的配置脚本
            exec /usr/sbin/pppd lock modem crtscts /dev/ttyS0 115200 \   //设置COM口及速度
            asyncmap 0 kdebug 4 \
            $LOCAL_IP:$REMOTE_IP noipdefault netmask $NETMASK defaultroute \
            connect $DIALER_SCRIPT&



给这个文件加上执行权限:

# chmod 700 ppp-on
            # ./ppp-on



这样就可以拨号上网了。这种方法可以适用于多数的Linux系统,如果是Red Hat Linux,可以使用redhat-config-network命令轻松地在文本界面上配置拨号连接,如图1。

 

图1 文本界面下的redhat-config-network





如果启动了X-Window,GNOME与KDE都自带图形界面的拨号程序。

2.内置Modem驱动程序的安装

内置Modem比起外置的Modem配置要麻烦一些,下面在Dell D600笔记本安装内置Modem的驱动程序。到下面网址下载驱动 /drivers/hsf/full/downloads.php,选定适合本系统内核版本的驱动程序,下载后是一个RPM包。

#rpm-ivhhsfmodem-6.03.00lnxt04061800full _k2.4.21_4.EL-1rh.i686.rpm
            ... ...
            Config for modem unit 0: /dev/ttySHSF0
            Device instance: 0-PCI-8086:24c6-14f1:5422
            HW revision    : CXT22
            HW profile name: hsfmc97ich
            Registration ID: 115C-247C-BFC0
            License owner  : unknown
            License key    : FREE
            License status : FREE (max 14.4kbps data only)
            Current region : CHINA (T.35 code: 0026)
            The /dev/modem alias (symlink) points to /dev/ttySHSF0
            ……



由上可以看到,安装程序自动建立了一个设备文件/dev/ttySHSF0,并且为它创建了名叫/dev/modem的软链接文件,这个文件与其它的ttyS文件的类型是不同的:

# ls /dev/ttyS0 -l
            crw-rw----  1 root  uucp   4,  64 Sep 15  2003 /dev/ttyS
            # ls /dev/ttySHSF0 -l
            crw-rw-rw-  1 root   root   240,  64 Jun 29 02:36 /dev/ttySHSF0



由上可以看到,/dev/ttySHSF0文件不是标准的COM口,而是该驱动程序自己注册的240类型的驱动程序。

实际上,驱动内置Modem的过程是先加载驱动程序,模拟一个ttyS的串口设备文件,然后像给普通外置Modem建立PPP链接那样,为内置的Modem建立拨号连接,不过这时要选定/dev/modem作为设备文件。

3.ADSL及宽带连接驱动

ADSL设备通常是通过以太网卡来拨号,建立PPP链接,这时的PPP协议叫做PPPoE,就是PPP over Ethernet(在以太网上的点对点通信协议),一般不需要任何ADSL Modem的驱动,只需直接建立PPPoE连接。

在命令行下,下载ADSL拨号程序rp-pppoe,可以通过下载, 或者直接下载RPM包 。

配置非常简单,下载包解压缩后直接运行下面代码:

# ./go



则出现PPPoE配置向导,会提示输入用户名和密码,然后使用以下命令建立连接:

# adsl-start



或者

# ifup ppp0



系统中会在配置完后出现一个SysV的服务:

# chkconfig --list adsl
            adsl         0:off   1:off   2:off    3:off    4:off    5:off    6:off
            # chkconfig adsl on



这样以后每次启动就会启用ADSL拨号。

如果不用rp-pppoe的向导,也可以在X-Window中直接使用下面命令(如图2):

#neat

图2 X-Window中运行网络配置工具



或者

#redhat-config-network



上面两个命令是Red Hat Linux中的命令,可以在图形界面下建立PPPoE的连接,其它版本的Linux也应该有自己的ADSL拨号程序。

如图3所示中,单击上面的“New”建立新连接,如VPN、eth、ISDN、Modem等,则出现图4所示页面。

图3 单击建立新连接



图4里的xDSL并不是只有ADSL等DSL的连接,一般的PPPoE连接都可以使用,比如即使是建立类似网通的宽带LAN接入形式也应该选择这一项。单击“Forward”进行下一步。

图4 选择xDSL连接,建立PPPoE连接



输入ADSL或LAN宽带接入的连接信息,如图5所示。然后单击“Forward”。

建立好了链接后,在/etc/sysconfig/network-scripts/ 目录中会出现ifcfg-ppp0的文件,可以通过以下命令让系统通过ADSL拨号上网,建立宽带连接;也可以用刚才的向导拨号上网,如图6。

# ifup ppp0



有些地方提供LAN宽带接入方式也需要进行拨号,如北京网通LAN接入宽带,它实际上使用跟ADSL一样的PPPoE协议,建立连接时与ADSL的拨号方式一样,也可以用rp-pppoe或redhat-config-network来建立拨号连接,运行向导时没有区别。

图5 输入ADSL或LAN宽带接入的连接信息

图6 建立PPPoE连接先选中PPP0再单击上面的Activate按钮



4.常见故障处理

如果在配置网络时出现问题,可遵循以下步骤检查:

(1)用ifconfig看一下网络接口是否启动,IP地址是否绑定,如果网络接口没有启动。例如,PPP0没有启动,可使用ifup ppp0命令。如果IP地址没有绑定,使用命令ifconfig eth0 192.168.1.1设置地址;也可以使用命令netconfig设置IP地址、网关及DNS服务器的地址。然后用service network restart重启网络。

(2)如果网络接口及IP没有问题,但是不能上网,可使用ping 211.XXX的一个外网地址,如果能通,则应该是DNS服务器的问题,更改/etc/resolv.conf文件中的nameserver的地址,换一个能用的DNS服务器的地址。

(3)如果都没有问题就是ping不通外网的IP,可使用命令route -n看一下默认网关是否正确,如果不正确使用route del/add来设置默认网关,使用netconfig可以永久更改默认网关。

从上面的讲解中可以看到,我们遇到的情况可能是千差万别的,安装的方式也是多种多样的。但是,不论哪一种设备应该首先理解这种设备的驱动方式,然后再来了解具体的驱动程序。

阅读(1174) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~