伪设备是否在内核中实现为设备驱动程序?

时间:2017-07-09 21:44:31

标签: unix drivers

我有点想知道像/ dev / null和/ dev / zero这样的pseduo设备是否被实现为内核中的设备驱动程序。我确定他们是,但不完全是100%肯定。 / dev / null和/ dev / zero设备文件都具有相同的主要编号但不同的次要编号;他们使用相同的驱动程序,它不会真正驱动物理硬件和次要数字来指定驱动程序中的不同功能。

我的假设是对的吗?

1 个答案:

答案 0 :(得分:1)

至少经典地说,所有设备 - 伪或非 - 都在内核中实现为设备驱动程序。通常,支持功能的实现对于伪设备来说是最小的。 /dev/null的写代码没有成功(对/dev/zero也是如此); /dev/null的读取代码报告“无数据”; /dev/zero的读取代码将给定的缓冲区归零。等等。在过去的20年中,情况可能会有所改变,但这或多或少是以前的样子,以及我对它的预期如何(但我感到很惊讶)。

  

在我正在使用的Linux系统上,也许在其他Linux系统上,/dev/null/dev/zero/dev/random都具有相同的主编号。

这不一定是个问题。它们具有不同的次要编号,因此可以并且确实可以做彼此不同的事情,就像不同的磁盘驱动器可以共享一个主要数字,但次要数字区分主设备的不同子部分,甚至完全不同的驱动器。

在Mac上(运行macOS Sierra 10.12.5),/dev/null/dev/zero共享相同的主号码,/dev/random/dev/urandom共享相同的主号码与其他两个不同。

crw-rw-rw-  1 root      wheel            3,   2 Jul 10 20:10 /dev/null
crw-rw-rw-  1 root      wheel           14,   0 Jun 13 13:34 /dev/random
crw-rw-rw-  1 root      wheel           14,   1 Jun 13 13:34 /dev/urandom
crw-rw-rw-  1 root      wheel            3,   3 Jun 13 13:34 /dev/zero

更令人感兴趣的是,有许多设备具有相同的主要和次要数字:

crw-------  1 jleffler  staff            0,   0 Jul  8 01:54 /dev/console
crw-rw-rw-  1 root      wheel            0,   0 Jun 13 13:34 /dev/fbt
crw-rw-rw-  1 root      wheel            0,   0 Jun 13 13:34 /dev/lockstat
crw-rw-rw-  1 root      wheel            0,   0 Jun 13 13:34 /dev/machtrace
crw-rw-rw-  1 root      wheel            0,   0 Jun 13 13:34 /dev/profile
crw-rw-rw-  1 root      wheel            0,   0 Jun 13 13:34 /dev/sdt
crw-rw-rw-  1 root      wheel            0,   0 Jun 13 13:34 /dev/systrace

我不确定那些区别于他们应该做什么。