1

好的,我要再问一次。在较早的问题中,我无法准确发布我打算获取的信息。

硬件设备的设备驱动程序安装在操作系统中,这些驱动程序驻留在系统内核中。操作系统通过设备驱动程序与硬件设备进行通信。如果设备驱动程序直接安装在硬件设备上而不是安装在操作系统中会怎样。这样做会有什么后果?

4

1 回答 1

3

如果我明白你的意思;我的猜测是您错过了有关驱动程序的关键点。

这是相当简化的,不能从字面上理解;用它来帮助自己了解驱动程序的作用 驱动程序


到底是什么?
它们是一段代码,可让内核以方便的方式读取、写入并通常与特定设备进行交互。

你可以把它扔掉;每次都使用 IRQ 检查和内存地址(以及更多附加功能,如修剪帧、缓冲、检查数据完整性、使用非常依赖硬件的例程在 NIC 或其他设备中执行任务等)来执行此操作,但是这个这是没有意义的,因为每次您想使用设备时都必须编写成百上千行代码,而且一旦在不同的机器上运行,您的代码就会崩溃。

所以我们要做的是为给定的设备编写这样的代码并加载(主要通过内核模块,在 Linux 中)它,以便内核可以使用它。

这段代码有什么作用?
它只是为给定的设备类型提供到内核的标准接口;它提供了内核(和用户空间程序)在想要与给定设备类型交互时可以调用的函数列表(现在实现/整个驱动程序可能会在不同型号/供应商的相同设备之间发生变化,但对你来说界面将保持不变)

为什么你总是需要司机?
因为再次,设备驱动程序是一种以方便的方式处理特定硬件的方法。假设您在硬件中获得了驱动程序,那么您将需要一段代码来处理内核中的设备,然后才能有效地与硬件中的其余(驱动程序)进行通信。

我给你举个例子,我处理过的所有 NIC 都在物理级别提供帧,但不在 DataLink 级别,所以 NIC 会为你的以太网帧添加前导码和 FCS,但你仍然必须编写MAC,为上层设置正确的缓冲,在您自己的驱动程序代码中检查您自己的健全性,并为数据包进行分配以向上移动(除其他外)。

因此,如果您的供应商在硬件本身中提供了某些功能,它仍然无法提供完整的驱动程序,因为您至少需要实现接口,以便内核可以有效地使用该设备。

于 2012-11-07T14:09:20.990 回答