极限首页 业界焦点 软件工程师之路 系统工程师之路 网络工程师之路 软件下载 技术社区
 Linux操作系统的内核编译内
 Linux下设备完全驱动之四
 Linux下设备完全驱动之三
 Linux下设备完全驱动之一
 Linux内核如何从2.4升级到
 开源世界的虚拟机 QEMU
 Linux下软件RAID的实现
 RHEL4内建LVM工具入门
 linux SSH 的一些安全小技
 Cron服务配置详解
 Linux操作系统的内核编译内
 Linux下设备完全驱动之四
 Linux下设备完全驱动之三
 Linux下设备完全驱动之一
 Linux内核如何从2.4升级到
 开源世界的虚拟机 QEMU
 Linux下软件RAID的实现
 RHEL4内建LVM工具入门
 linux SSH 的一些安全小技
 Cron服务配置详解

Shell 中文手册

Python 2.3 中文手册

Python 2.4 中文手册

Mysql 4.x 中文手册

PHP 4.x 中文手册

Apache 2.x 中文手册
更多手册

站内搜索:
当前位置:首页>>系统工程师之路>>管理进阶>>正文
Linux下设备完全驱动之二(2)
时间:2005-09-25 作者:郄晓烨 来源:赛迪

 

SCSI设备驱动过程

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

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

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

(1)从Adaptec网站http://www.adaptec.com/worldwide/support/driverdetail.jsp?sess=no&language=English+US&cat=/Product/ASR-3200S&filekey=dpt_i20-drv_2.5.0-rh9-i686.img 下载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网站http://www.adaptec.com/worldwide/support/driverdetail.jsp?sess=no&language=English+US&cat=/Product/ASR-3200S&filekey=dpt_i20-drv_2.5.0-rh9.rpm下载驱动程序,检验是否可以加载模块。

# 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内核的驱动http://support.3com.com/infodeli/tools/nic/linux/3c990-1.0.0a.tar.gz。然后解压缩下载的文档到解开的目录中:

#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的驱动程序。到下面网址下载驱动http://www.linuxant.com /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,可以通过http://www.linuxsir.org/postnuke/modules.php?op=modload&name=Downloads&file=index&req=getit&lid=242下载, 或者直接下载RPM包http://www.neweasier.com/software.html?class=4 。

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

# ./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可以永久更改默认网关。

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


  共2页: 上一页 [1] 2   
推荐】【 】【关闭


关于极限 | 站内地图 | 意见反馈 | 广告服务 | 数据服务 | 联系我们
本站所刊登的文章,技术资料,软件均整理于网络资源或本站原创,转载请务必联系原作者或本站。
Copyright ? 2001-2004 UPLinux.com All Rights Reserved.
本站唯一联系信箱:
京ICP备05010519