【问题标题】:How come two devices share the same major-minor device number?为什么两个设备共享相同的主次设备号?
【发布时间】:2011-08-28 02:51:02
【问题描述】:

我正在阅读“Linux 设备驱动程序,第 3 版”,发现了一些我无法理解的内容。

在第3.2章,作者说:

传统上,主设备号标识与设备关联的驱动程序。 内核使用次要编号来准确确定所引用的设备。

然后我尝试“ls -l /dev”看了一下,我发现了一些不寻常的地方:

brw-rw----  1 root disk      1,   1 2011-08-23 23:52 ram1
brw-rw----  1 root disk      1,   2 2011-08-23 23:52 ram2
brw-rw----  1 root disk      1,   3 2011-08-23 23:52 ram3
brw-rw----  1 root disk      1,   4 2011-08-23 23:52 ram4
brw-rw----  1 root disk      1,   5 2011-08-23 23:52 ram5
...
crw-r-----  1 root kmem      1,   1 2011-08-23 23:52 mem
crw-r-----  1 root kmem      1,   4 2011-08-23 23:52 port
crw-rw-rw-  1 root root      1,   3 2011-08-23 23:52 null
crw-rw-rw-  1 root root      1,   5 2011-08-23 23:52 zero

这些设备 (ram1-ram5) 都有一个克隆,具有相同的主次设备,但名称和类型不同。我以为作者是在说“主要数字表示设备类,次要数字表示设备索引。所以主要-次要标识一个唯一的设备。

现在我很困惑。为什么两个设备可以共享相同的主要次要?设备编号具体是多少?

如果我错了,请纠正我。在此先感谢。

【问题讨论】:

    标签: linux device-driver


    【解决方案1】:

    memportnullzero 是字符设备(如列表开头的 c 所示)。 ramN 设备是块设备(因此是 b)。块设备的主要/次要编号独立于字符设备,反之亦然。

    【讨论】:

    • 所以它们是关联不同设备的完全不同的文件?我还在 LDD3 中发现了这一点,“现代 Linux 内核允许多个驱动程序共享主设备号,但是您将看到的大多数设备仍然按照一个主设备一驱动程序原则进行组织。”:,如果是这样,内核如何为设备选择正确的驱动程序?
    • @Shello,首先,这已经过时了,现在动态分配更为常见。其次,更准确的说法是,one-major-and-type-pair-one-driver(即可以认为类型是major的一部分)
    猜你喜欢
    • 2012-06-24
    • 2018-12-08
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2020-12-09
    相关资源
    最近更新 更多