![如果它不指向硬件设备,它是否被称为“设备驱动程序”?](https://linux22.com/image/149524/%E5%A6%82%E6%9E%9C%E5%AE%83%E4%B8%8D%E6%8C%87%E5%90%91%E7%A1%AC%E4%BB%B6%E8%AE%BE%E5%A4%87%EF%BC%8C%E5%AE%83%E6%98%AF%E5%90%A6%E8%A2%AB%E7%A7%B0%E4%B8%BA%E2%80%9C%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E2%80%9D%EF%BC%9F.png)
下图展示了设备文件、设备驱动程序和硬件设备之间的关系:
Application <---> /dev/device_file <---> device driver <---> hardware device
因此,应用程序将数据写入设备文件,然后将数据传递给设备驱动程序,然后设备驱动程序将数据传递给硬件设备(读取时发生相反的情况)。
但Linux中有一些设备驱动程序不指向硬件设备,例如/dev/random设备文件指向不指向硬件设备的设备驱动程序:
Application <---> /dev/random <---> device driver
说 /dev/random 指向“设备驱动程序”是否准确,或者是否有其他术语可以使用?
答案1
你的模型不正确。开发文件由udev
(或在旧版 Linux 中)提供devfs
。现在udev
是分开的systemd
。这些都不是必需的,您可以使用具有直接 API 调用的驱动程序(就像在 Windows 中一样)。事实上,据我所知,有些系统不是用它构建的。
创建文件/dev
只是创建任何文件的函数dev
。查看mount | grep ' /dev '
udev on /dev type devtmpfs (rw,nosuid,relatime,size=8087376k,nr_inodes=2021844,mode=755)
^ See the udev. That's what created the abstraction.
驱动程序存在于内核中。提供了抽象层,以便您可以将文件/io 连接到设备。这遵循 Unix 方法论,即一切事物都是文件,但它是不是必需的。