第三章 配置网络硬件
3.1 设备、驱动程序等等
直到现在,我们已经讨论了许多有关网络接口以及一般TCP/IP问题,但是并没有真正地包括
当内核中的“网络代码”访问一个硬件时会确切地发生什么事情。对此,我们将简要地讨论
一下有关接口和驱动程序的概念。
当然,首先是硬件本身,例如一块以太网卡:这是一块环氧树脂板,上面散布着许多有着糊
涂数字的很小的芯片,这块板插在你的PC机的一个插槽中。这就是我们通常所称的设备。
为了让你能够使用这块以太网卡,你的内核中必须含有一些特殊函数,这些函数知道如何访
问这个设备的特定方法。这些就是所谓的设备驱动程序。例如,Linux有几种以太网卡牌子的
设备驱动程序,它们在功能上很相似。它们以“Becker系列驱动程序”而知名,与它们的作
者同名,唐纳德贝克(Donald Becker)。另一个例子是处理连接至并行口的D-Link 袖珍适
配器的D-Link驱动程序。
但是,当我们说一个驱动程序“处理”一个设备是什么意思呢?让我们回到上面讨论的以太
网板卡上。驱动程序必须能够与外围设备板上的某些逻辑电路通信:它必须往板卡上发送命
令和数据,而板卡应该能够传递任何收到的数据给驱动程序。
图3.1 驱动程序、接口、以及硬件之间的关系。
在PC机中,通信是通过映射到板卡上的寄存器等的I/O存储器(内存)进行的。内核发送到板
卡上的所有命令和数据都要经过这些寄存器。I/O存储器通常是用给定的开始地址或基地址(
base address)来描述的。以太网板卡的典型基地址是0x300,或0x360。
通常,你不用担心有关基地址之类的任何硬件问题,因为内核会在引导时试图检测到板卡上
基地址的位置。这称为自动探测(autoprobing),它意味着内核读取几个存储器位置并且将
读取的数据与如果安装了某个以太网卡所应有的数据作比较。然而,有些以太网卡不能够自
动地被检测出来;当使用其它生产厂商的不是完全按照标准板卡复制的便宜的以太网板卡时
有时就会碰到这种情况。同样,在引导时,内核将只试图检测一块以太网设备。如果你使用
了不止一块网卡,你就必须明确地将这块网卡告知内核。
你必须告诉内核的另一个这样的参数是中断请求通道(interrupt request channel)。当硬
件部件需要得到照料时,常常中断内核的操作,例如,当数据来到时、或者一个特殊情况发
生时。在一台PC机中,中断可以发生在15个中断通道之一上,编号从0、1、以及3到15。分配
给一个硬件部件的中断号被称为是中断请求号(interrupt request number),或IRQ。[1]
正如第二章中所述,内核是通过一个所谓的接口访问一个设备的。接口提供了一个对于所有
硬件类型都一样的抽象的函数(功能)集,比如发送或接收一个数据报。
接口是通过名字识别的。这些名字是在内核里定义的,而不是在/dev目录下的设备文件中定
义的。对于以太网接口来说,典型的名字有eth0、eth1等等。对设备的接口分配通常依赖于
配置设备次序;例如,第一块安装的以太网卡将成为eth0,下一个将成为eth1,等等。这个
规则的一个例外是SLIP接口,它是动态分配的;也即,无论何时只要建立了一个SLIP连接,
就为该串行端口分配一个接口。
图3.1中给出的图片试图显示出硬件、设备驱动程序以及接口之间的关系。
当引导时,内核会显示出检测到什么设备,以及它安装了什么接口。下面是一个典型引导屏
幕的摘录:
.
.
This processor honours the WP bit even when in supervisor mode. Good.
Floppy drive(s): fd0 is 1.44M
Swansea University Computer Society NET3.010
IP Protocols: ICMP, UDP, TCP
PPP: version 0.2.1 (4 channels) OPTIMIZE_FLAGS
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
SLIP: version 0.7.5 (4 channels)
CSLIP: code copyright 1989 Regents of the University of California
Dl0: D-Link DE-600 pocket adapter, Ethernet Address: 00:80:C8:71:76:95
Checking 386/387 coupling… Ok, fpu using exception 16 error reporting.
Linux version 1.1.11 (okir@monad) #3 Sat May 7 14:57:18 MET DST 1994
这表明内核是在TCP/IP激活的状态下编译的,并且包括了SLIP、CSLIP和PPP的驱动程序。倒
数第三行说明检测到一个D-Link袖珍适配器,并作为接口dl0安装了。如果你有一块不同类型
的以太网卡,内核通常将打印出以eth0开始的一行信息来,接下来是所检测到的卡的类型。
如果已经安装了一块以太网卡,但是没有看到任何这样的消息,这表示内核不能正确地检测
出你的网卡。这将在稍后的小节中加以讨论。
3.2 内核的配置
大多数的Linux版本带有引导启动盘,它可以在所有普通PC机类型的硬件上使用。这表明在那
些盘片上的内核,配置进了所有种类的驱动程序,其中一些你永远不会用到,但是它们却会
浪费宝贵的系统内存,因为部分内核是不能被交换出去的。因此,你通常将配置你自己的内
核,只包括那些你实际需要或想要的驱动程序。
当运行一个Linux系统时,你应该熟悉内核的建立。这个工作的基本原理在Matt Welsh的“安
装与入门”手册中作出了解释,这本手册同样也是文档计划系列中的一本。因此,在本节中
,我们将只讨论那些影响网络的配置选项。
当运行make config时,你首先将被问及一些普通配置,例如你是否需要内核数学仿真,等等
。这些询问之一是问你是否要TCP/IP网络支持。你必须用y作答以得到一个支持连网的内核。
3.2.1 Linux 1.0及以上版本的内核选项
在普通选项部分完成以后,配置将继续进行询问你各种特性,如SCSI驱动程序等等。随后列
出了与网络支持有关的问题。由于正在进行中的研制开发,确切的配置选项集是在不停的变
动中。大多数1.0到1.1内核版本所提供的一个典型的选项列表看上去象这样(注解用斜体给
出):
*
* Network device support
*
Network device support? (CONFIG_ETHERCARDS) [y]
不管方括号中宏名字(macro name)是什么,如果你想要使用任何类型的连网设备的话,你
就必须用y回答这个问题,而不管这是否是以太网、SLIP、或PPP。当用y回答这个问题时,对
以太网类型设备的支持是自动激活的。对其它网络驱动程序类型的支持必须分别进行激活:
SLIP (serial line) support ? (CONFIG_SLIP) [y]
SLIP compressed headers (SL_COMPRESSED) [y]
PPP (point-to-point) support (CONFIG_PPP) [y]
PLIP (parallel port) support (CONFIG_PLIP) [n]
这些问题涉及到Linux支持的各种链路层协议。SLIP使得你能够在串行线路上传输IP数据报。
压缩首部选项提供了对CSLIP的支持,一种将TCP/IP首部压缩成只有三个字节的技术。这个内
核选项不会自动打开CSLIP,这仅仅为它提供所需的内核函数。
PPP是另外一种在串行线路上传输网络通信量的协议。它比SLIP更灵活,而且并不限于IP,一
旦开发完成也将支持IPX。由于PPP的支持只是在最近才完成,这个选项可能没有出现在你的
内核中。
PLIP提供了在并行端口连接上发行IP数据报的方法。它主要是用于与运行DOS的PC机进行通信
。
下面的问题涉及到各个供应商的以太网卡。随着更多的驱动程序开发出来,你很可能看到更
多的问题被加入这部分。如果你想建立一个能用于许多不同机器上的内核,你可以激活不止
一个驱动程序。
NE2000/NE1000 support (CONFIG_NE2000) [y]
WD80*3 support (CONFIG_WD80x3) [n]
SMC Ultra support (CONFIG_ULTRA) [n]
3c501 support (CONFIG_EL1) [n]
3c503 support (CONFIG_EL2) [n]
3c509/3c579 support (CONFIG_EL3) [n]
HP PCLAN support (CONFIG_HPLAN) [n]
AT1500 and NE2100 (LANCE and Pcnet-ISA) support (CONFIG_LANCE) [n]
AT1700 support (CONFIG_AT1700) [n]
DEPCA support (CONFIG_DEPCA) [n]
D-Link DE600 pocket adaptor support (CONFIG_DE600) [y]
AT-LAN-TEC/RealTek poket adaptor support (CONFIG_ATP) [n]
*
* CD-ROM drivers
*
…
最后,在文件系统部分中,配置脚本将询问你是否需要支持NFS,网络文件系统。NFS可以让
你输出文件系统到几个主机上,这使得文件显现出好象它们是在主机的一个普通硬盘上一样
。
NFS filesystem support (CONFIG_NFS_FS) [y]
3.2.2 Linux 1.1.14及以上版本的内核选项
从Linux 1.1.14开始,(其中加入了对IPX的alpha支持),配置过程稍有改变。在普通选项
部分中现在会问你是否需要通用的网络支持。这问题后立刻就是几个各种连网选项问题。
*
* Networking options
*
TCP/IP networking (CONFIG_INET) [y]
为了使用TCP/IP网络,你必须用y回答这个问题。然而,如果你回答n,你将仍能够编译出支
持IPX的内核。
IP forwarding/gatewaying (CONFIG_IP_FORWARD) [n]
你必须激活这个选项,如果你的系统将在两个以太网之间、或在任何以太网与SLIP链路等之