3.3. 以太网安装

当前的 Linux 网络代码支持各种各样的以太网卡。大多数驱动程序是由 Donald Becker 编写的,他为基于 National Semiconductor 8390 芯片的网卡编写了一系列驱动程序;这些驱动程序被称为 Becker 系列驱动程序。许多其他开发者也贡献了驱动程序,如今,Linux 几乎支持所有常见的以太网卡。受支持的以太网卡列表一直在增长,因此如果您的网卡尚未获得支持,那么很可能很快就会获得支持。

在 Linux 历史上的早期,我们可能尝试列出所有受支持的以太网卡,但现在这将花费太多的时间和空间。幸运的是,Paul Gortmaker 维护了 Ethernet HOWTO,其中列出了每个受支持的网卡,并提供了有关如何在 Linux 下运行它们的有用信息。[1] 它每月发布到 comp.os.linux.answers 新闻组,也可以在任何 Linux 文档项目镜像站点上找到。

即使您确信自己知道如何在您的机器中安装特定类型的以太网卡,也通常值得查看 Ethernet HOWTO 关于它的说明。您会找到超出简单配置问题的信息。例如,了解某些基于 DMA 的以太网卡的行为可能会为您省去很多麻烦,这些网卡默认情况下使用与 Adaptec 1542 SCSI 控制器相同的 DMA 通道。除非您将其中一个移动到不同的 DMA 通道,否则您最终会将以太网卡数据包数据写入硬盘驱动器上的任意位置。

要将任何受支持的以太网卡与 Linux 一起使用,您可以使用来自主要 Linux 发行版之一的预编译内核。这些内核通常为所有受支持的驱动程序提供模块,并且安装过程通常允许您选择要加载的驱动程序。然而,从长远来看,最好构建您自己的内核,并且只编译您实际需要的驱动程序;这样可以节省磁盘空间和内存。

3.3.1. 以太网自动探测

许多 Linux 以太网驱动程序都足够智能,知道如何搜索您的以太网卡的位置。这使您不必手动告诉内核它的位置。Ethernet HOWTO 列出了特定驱动程序是否使用自动探测以及它搜索网卡 I/O 地址的顺序。

自动探测代码有三个限制。首先,它可能无法正确识别所有网卡。对于某些常见网卡的廉价克隆产品尤其如此。其次,除非明确指示,否则内核不会自动探测多个网卡。这是一个有意识的设计决策,因为假定您希望控制哪个网卡分配给哪个接口。可靠地执行此操作的最佳方法是手动配置您机器中的以太网卡。第三,驱动程序可能不会在您的网卡配置的地址处进行探测。一般来说,驱动程序会在特定设备能够配置的地址处进行自动探测,但有时会忽略某些地址,以避免与通常使用相同地址的其他类型的网卡发生硬件冲突。

PCI 网卡应该可以可靠地检测到。但是,如果您使用多个网卡,或者如果自动探测未能检测到您的网卡,您可以显式地告诉内核网卡的基地址和名称。

在启动时,您可以向内核提供参数和信息,任何内核组件都可以读取这些参数和信息。这种机制允许您将信息传递给内核,以太网驱动程序可以使用这些信息来定位您的以太网硬件,而无需驱动程序进行探测。

如果您使用 lilo 引导系统,则可以通过在lilo.conf文件中通过 append 选项将参数传递给内核。

ether=irq,base_addr,[param1,][param2,]name

前四个参数是数字,而最后一个是设备名称。irq, base_addrname参数是必需的,但两个param参数是可选的。任何数值都可以设置为零,这将导致内核通过探测来确定该值。

第一个参数设置分配给设备的 IRQ。默认情况下,内核将尝试自动检测设备的 IRQ 通道。例如,3c503 驱动程序具有一个特殊功能,可以从列表 5、9、3、4 中选择一个空闲的 IRQ,并将网卡配置为使用此线路。base_addr参数给出了网卡的 I/O 基地址;值为零表示告诉内核探测上面列出的地址。

不同的驱动程序以不同的方式使用接下来的两个参数。对于共享内存卡,例如 WD80x3,它们指定共享内存区域的起始地址和结束地址。其他网卡通常使用param1来设置显示调试信息的级别。值 1 到 7 表示详细程度递增,而 8 则完全关闭它们;0 表示默认值。3c503 驱动程序使用param2来选择内部收发器(默认)或外部收发器(值为 1)。前者使用网卡的 BNC 连接器;后者使用其 AUI 端口。param如果您没有任何特殊配置,则根本不需要包含这些参数。

第一个非数字参数被内核解释为设备名称。您必须为您描述的每个以太网卡指定一个设备名称。

如果您有两张以太网卡,您可以让 Linux 自动检测一张网卡,并通过 lilo 传递第二张网卡的参数,但您可能需要手动配置两张网卡。如果您决定让内核探测一张网卡并手动配置第二张网卡,则必须确保内核不会意外地首先找到第二张网卡,否则另一张网卡将根本不会被注册。您可以通过将 liloreserve 选项传递给内核来做到这一点,该选项显式地告诉内核避免探测第二张网卡占用的 I/O 空间。例如,要使 Linux 在0x300处安装第二张以太网卡作为eth1,您需要将以下参数传递给内核

reserve=0x300,32 ether=0,0x300,eth1

reserve 选项确保在探测某些设备时,没有驱动程序访问第二张网卡的 I/O 空间。您还可以使用内核参数来覆盖对eth0

reserve=0x340,32 ether=0,0x340,eth0

的自动探测。您可以完全关闭自动探测。例如,您可能会这样做来停止内核探测您可能暂时移除的以太网卡。禁用自动探测就像指定一个base_addr参数 –1

ether=0,-1,eth0

一样简单。要在启动时向内核提供这些参数,请在 lilo “boot:” 提示符下输入参数。要让 lilo 在提示符下给出 “boot”,您必须在 lilo 启动时按下 Control、Alt 或 Shift 键中的任意一个。如果您在提示符下按下 Tab 键,您将看到可以引导的内核列表。要使用提供的参数引导内核,请输入您要引导的内核的名称,后跟一个空格,然后后跟您要提供的参数。当您按下 Enter 键时,lilo 将加载该内核并使用您提供的参数引导它。

要使此更改在每次重新启动时自动发生,请使用/etc/lilo.conf中的append=关键字输入参数。一个示例可能如下所示
boot=/dev/hda
root=/dev/hda2
install=/boot/boot.b
map=/boot/map
vga=normal
delay=20
append="ether=10,300,eth0"

image=/boot/vmlinuz-2.2.14
label=2.2.14
read-only

在您编辑lilo.conf之后,您必须重新运行 lilo 命令以激活更改。

注意

[1]

可以通过 gpg109@rsphy1.anu.edu.au 联系 Paul。