好的,我会再问一次。在之前的问题中,我无法准确发布我打算获取的信息。
硬件设备在操作系统中安装了设备驱动程序,这些驱动程序驻留在系统内核中。操作系统通过设备驱动程序与硬件设备通信。如果设备驱动程序直接安装在硬件设备上而不是在操作系统中安装,该怎么办?这样做会带来什么后果?
答案 0 :(得分:3)
如果我明白了你的意思;我的猜测是你错过了关于司机的关键点。
这是非常简化的,不能按字面意思理解;用它来帮助自己了解司机的作用
什么是司机?
它们是一段代码,允许内核以方便的方式读取,写入和与某个设备进行交互。
你可以扔掉它;使用IRQs检查和内存地址(以及更多补充,如修剪帧,缓冲,检查数据的健全性,使用非常依赖硬件的例程来执行任务等等在NIC或其他设备中的其他设备中)每次执行此操作,但这样做没有任何意义,因为每次你想使用一个设备时你都需要编写数百/数千行代码,而且一旦在不同的机器上运行你的代码就会崩溃。
所以我们所做的就是我们为给定的设备编写这样的代码并加载(主要是在Linux中通过内核模块),所以内核可以使用它。
这段代码有什么作用?
它只是为给定的设备类型提供内核的标准接口;它提供了内核(和用户空间程序)在想要与给定设备类型交互时可以调用的函数列表(现在实现/整个驱动程序可能在不同型号/供应商的相同设备之间发生变化,但对您而言界面将保持不变)
为什么你总是需要一个司机呢? 因为设备驱动程序是一种以方便的方式处理某些硬件的方法;你需要一段代码来处理内核中的设备,然后才能有效地与硬件中的(驱动程序)进行通信,假设你在硬件中有驱动程序。
我举一个例子,我所处理过的所有网卡都提供物理级别的帧,但不提供DataLink级别的帧,因此NIC会为你的以太网帧添加前导码和FCS,但你仍然有编写MAC,为上层设置正确的缓冲,在自己的驱动程序代码中检查自己的健全状况,并为数据包进行分配(以及其他内容)。
因此,如果您的供应商在硬件本身提供某些功能,它仍然无法提供整个驱动程序,因为您至少需要实现该接口,以便内核可以有效地使用该设备。