------------------------------------------------------ +--------------+-------------------------------------+ |Board | Addresses probed for | +--------------+-------------------------------------+ |WD/SMC | 0x300, 0x280, 0x380, 0x240 | |SMC 16 Ultra | 0x300, 0x280 | |3c501 | 0x280 | |3c503 | 0x300, 0x310, 0x330, 0x350, 0x250, | | | 0x280, 0x2a0, 0x2e0 | |NEx000 | 0x300, 0x280, 0x320, 0x340, 0x360 | |HP | 0x300, 0x320, 0x340, 0x280, 0x2C0, | | | 0x200, 0x240 | |DEPCA | 0x300, 0x320, 0x340, 0x360 | +--------------+-------------------------------------+ +--------------+-------------------------------------+自动探测代码有两个限制。 首先,它可能无法正确识别所有网卡。 对于一些常见网卡的廉价克隆产品,以及一些 WD80x3 网卡来说,尤其如此。 第二个问题是,内核目前不会自动探测多个网卡。 这是一个特性,因为假设您希望控制哪个网卡被分配给哪个接口。
如果您正在使用多个网卡,或者如果自动探测未能检测到您的网卡,您必须显式地告诉内核关于网卡的基地址和名称。
在 Net-3 中,您可以使用两种不同的方案来完成此操作。 一种方法是在内核源代码的 drivers/net/Space.c 文件中更改或添加信息,该文件包含有关驱动程序的所有信息。 仅当您熟悉网络代码时才推荐这样做。 更好的方法是在启动时向内核提供此信息。 如果您使用 lilo 启动系统,则可以通过在 lilo.conf 中的 append 选项中指定参数来将参数传递给内核。 要将以太网设备信息告知内核,您可以传递以下参数
ether=irq,base addr,param1,param2,name前四个参数是数值,而最后一个是设备名称。 所有数值都是可选的; 如果省略或设置为零,内核将尝试通过探测来检测该值,或使用默认值。
第一个参数设置分配给设备的 IRQ。 默认情况下,内核将尝试自动检测设备的 IRQ 通道。 3c503 驱动程序有一个特殊功能,可以从列表 5、9、3、4 中选择一个空闲的 IRQ,并将网卡配置为使用此线路。
base_addr 参数给出网卡的 I/O 基地址; 值为零表示内核探测上面列出的地址。
剩余的两个参数可能被不同的驱动程序以不同的方式使用。 对于像 WD80x3 这样的共享内存网卡,它们指定共享内存区域的起始地址和结束地址。 其他网卡通常使用 param1 来设置正在显示的调试信息的级别。 值 1 到 7 表示详细程度递增,而 8 则完全关闭它们; 0 表示默认值。 3c503 驱动程序使用 param2 来选择内部收发器(默认)或外部收发器(值为 1)。 前者使用网卡的 BNC 连接器; 后者使用其 AUI 端口。
如果您有两个以太网网卡,您可以让自动探测检测一个网卡,并使用 lilo 传递第二个网卡的参数。 但是,您必须确保驱动程序不会意外地首先找到第二个网卡,否则另一个网卡将根本不会被注册。 您可以通过将 reserve 选项传递给 lilo 来做到这一点,该选项显式地告诉内核避免探测第二个网卡占用的 I/O 空间。
例如,要安装第二个地址为 0x300 的以太网网卡作为 eth1,您需要将以下参数传递给内核
reserve=0x300,32 ether=0,0x300,eth1reserve 选项确保在探测某些设备时,没有驱动程序访问网卡的 I/O 空间。 您还可以使用内核参数来覆盖 eth0 的自动探测。
reserve=0x340,32 ether=0,0x340,eth0要完全关闭自动探测,您可以指定 base_addr 参数为 -1。
ether=0,-1,eth0