如果我们在硬件设备上安装设备驱动程序而不是在操作系统中安装设备驱

时间:2012-11-07 09:18:57

标签: operating-system drivers hardware-interface

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

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

1 个答案:

答案 0 :(得分:3)

如果我明白了你的意思;我的猜测是你错过了关于司机的关键点。

这是非常简化的,不能按字面意思理解;用它来帮助自己了解司机的作用

什么是司机? 它们是一段代码,允许内核以方便的方式读取,写入和与某个设备进行交互。

你可以扔掉它;使用IRQs检查和内存地址(以及更多补充,如修剪帧,缓冲,检查数据的健全性,使用非常依赖硬件的例程来执行任务等等在NIC或其他设备中的其他设备中)每次执行此操作,但这样做没有任何意义,因为每次你想使用一个设备时你都需要编写数百/数千行代码,而且一旦在不同的机器上运行你的代码就会崩溃。

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

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

为什么你总是需要一个司机呢? 因为设备驱动程序是一种以方便的方式处理某些硬件的方法;你需要一段代码来处理内核中的设备,然后才能有效地与硬件中的(驱动程序)进行通信,假设你在硬件中有驱动程序。

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

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