代码之家  ›  专栏  ›  技术社区  ›  GIZ

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

  •  0
  • GIZ  · 技术社区  · 8 年前

    我有点想知道像/dev/null和/dev/zero这样的psedou设备是否在内核中实现为设备驱动程序。我肯定他们是,但不是百分之百肯定。/dev/null和/dev/zero设备文件的主编号相同,但次编号不同;它们使用同一个驱动程序,该驱动程序并不真正驱动物理硬件,而次要数字用于指定驱动程序中的不同功能。

    我的假设正确吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jonathan Leffler    8 年前

    至少在经典上,所有设备无论是否伪设备都在内核中实现为设备驱动程序。通常,支持函数的实现对于伪设备来说是最小的。的编写代码 /dev/null 什么都不成功(这很可能适用于 /dev/zero ); 的读取代码 /偏差/空 将给定的缓冲区归零。等等。在过去的20年里,事情可能发生了一些变化,但这或多或少是过去的样子,也是我期望的样子(但我活着就是为了惊讶)。

    /偏差/空 , /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
    

    我不知道这些人是如何区分他们应该做什么的。