Operating system 如果我们在硬件设备上安装设备驱动程序,而不是在操作系统中安装它们来与硬件接口,会怎么样?

Operating system 如果我们在硬件设备上安装设备驱动程序,而不是在操作系统中安装它们来与硬件接口,会怎么样?,operating-system,drivers,hardware-interface,Operating System,Drivers,Hardware Interface,好的,我再问一遍。在前面的问题中,我无法准确地发布我想要获得的信息 硬件设备的设备驱动程序安装在操作系统中,这些驱动程序驻留在系统内核中。操作系统通过设备驱动程序与硬件设备通信。如果设备驱动程序直接安装在硬件设备上,而不是安装在操作系统中,该怎么办。这样做的后果是什么 如果我明白了你的确切意思;我猜你错过了关于司机的一个关键点 这是相当简单的,不能从字面上理解;用它来帮助自己了解驾驶员的角色 驾驶员到底是什么? 它们是一段代码,允许内核以方便的方式读取、写入特定设备,并通常与之交互。 你可以把它

好的,我再问一遍。在前面的问题中,我无法准确地发布我想要获得的信息


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

如果我明白了你的确切意思;我猜你错过了关于司机的一个关键点

这是相当简单的,不能从字面上理解;用它来帮助自己了解驾驶员的角色


驾驶员到底是什么?
它们是一段代码,允许内核以方便的方式读取、写入特定设备,并通常与之交互。

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

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

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

你为什么总是需要一个司机?
因为同样,设备驱动程序是一种以方便的方式处理特定硬件的方法;您需要一段代码来处理内核中的设备,然后才能与硬件中的其余(驱动程序)进行有效通信,前提是您在硬件中有驱动程序

我会给你一个例子,我处理过的所有NIC都在物理层提供帧,但不是在数据链路层,因此NIC会为以太网帧添加前导和FCS,但你仍然需要编写MAC,为上层设置正确的缓冲,在自己的驱动程序代码中检查自己是否健全,并为数据包上移(除其他外)进行分配


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

很好的解释。只是一个小小的补充:许多设备本身都有一个运行在设备上的软件,但这不是驱动程序,它被称为固件。事实上,驱动程序通过设备连接的硬件总线与固件交互。固件是管理设备的软件堆栈的另一个(最低级别)部分。如果您这样做,您的设备将只能与一个操作系统一起工作,即驱动程序所针对的系统。驱动程序是特定于设备和操作系统的。操作系统仍然需要一个设备驱动程序来与您在硬件上创建的任何接口进行接口。(一些)现在的硬件已经在硬件中包含了设备驱动程序,以简化操作系统驱动程序。我认为您没有理解硬件/软件接口。