contents
下一节: 内核配置 上一层: 配置网络硬件 上一节: 配置网络硬件

设备、驱动程序以及所有相关内容

到目前为止,我们已经谈了很多关于网络接口和通用的 TCP/IP 问题,但并没有真正涵盖当内核中的“网络代码”访问硬件时实际发生了什么。 为此,我们必须稍微谈谈接口和驱动程序的概念。

首先,当然,是硬件本身,例如以太网卡:这是一片环氧树脂板,上面布满了许多带有奇怪数字的小芯片,安装在您 PC 的插槽中。 这就是我们通常所说的设备。

为了能够使用以太网卡,您的内核中必须存在特殊的函数,这些函数能够理解访问此设备的特定方式。 这些就是所谓的设备驱动程序。 例如,Linux 内核具有适用于功能非常相似的几种品牌以太网卡的设备驱动程序。 它们被称为“Becker 系列驱动程序”,以其作者 Donald Becker 的名字命名。 另一个例子是 D-Link 驱动程序,它处理连接到并行端口的 D-Link 袖珍适配器。

但是,当我们说驱动程序“处理”设备时,我们是什么意思? 让我们回到我们上面检查的以太网卡。 驱动程序必须能够以某种方式与外围设备的板载逻辑进行通信:它必须向网卡发送命令和数据,而网卡应将接收到的任何数据传递给驱动程序。


图: 驱动程序、接口和硬件之间的关系。

在 PC 中,这种通信通过映射到板载寄存器等的 I/O 内存区域进行。 内核发送到网卡的所有命令和数据都必须通过这些寄存器。 I/O 内存通常通过给出其起始地址或基地址来描述。 以太网卡的典型基地址为 0x300 或 0x360。

通常,您不必担心任何硬件问题,例如基地址,因为内核会在启动时尝试检测网卡的位置。 这称为自动探测,这意味着内核读取多个内存位置,并将读取的数据与如果安装了特定以太网卡时应该看到的数据进行比较。 但是,可能存在内核无法自动检测到的以太网卡; 这有时发生在廉价以太网卡上,这些网卡并非完全是其他制造商标准网卡的克隆产品。 此外,内核在启动时只会尝试检测一个以太网设备。 如果您使用多个网卡,则必须显式地告知内核有关此网卡的信息。

您可能需要告知内核的另一个此类参数是中断请求通道。 硬件组件通常在需要对其进行处理时中断内核,例如,当数据到达或发生特殊情况时。 在 PC 中,中断可能发生在 15 个中断通道中的一个上,编号为 0、1 和 3 到 15。 分配给硬件组件的中断号称为其中断请求号,或 IRQ。gif

如 chapter-gif 中所述,内核通过所谓的接口访问设备。 接口提供一组抽象的函数,这些函数在所有类型的硬件中都是相同的,例如发送或接收数据报。

接口通过名称来标识。 这些名称在内核内部定义,而不是 /dev 目录中的设备文件。 以太网接口的典型名称是 eth0、eth1 等。 接口到设备的分配通常取决于配置设备的顺序; 例如,安装的第一个以太网卡将变为 eth0,下一个将变为 eth1,依此类推。 此规则的一个例外是 SLIP 接口,它们是动态分配的; 也就是说,每当建立 SLIP 连接时,就会将接口分配给串行端口。

gif 试图展示硬件、设备驱动程序和接口之间的关系。

启动时,内核会显示它检测到的设备以及它安装的接口。 以下是典型启动画面的摘录

这表明内核已编译并启用了 TCP/IP,并且包含 SLIP、CSLIP 和 PPP 的驱动程序。 倒数第三行显示检测到 D-Link 袖珍适配器,并安装为接口 dl0。 如果您有不同类型的以太网卡,内核通常会打印以 eth0 开头的行,后跟检测到的网卡类型。 如果您安装了以太网卡但没有看到任何此类消息,则表示内核无法正确检测到您的网卡。 这将在后面的章节中处理。


contents
下一节: 内核配置 上一层: 配置网络硬件 上一节: 配置网络硬件

Andrew Anderson
Thu Mar 7 23:22:06 EST 1996