linux - 除了本质上是表的索引之外,Linux 设备主编号还有什么意义吗?

标签 linux linux-device-driver

对设备主编号的重要性感到困惑。有人可以帮我确认一下吗?:

Linux 设备主编号只是一些内核列表的索引,如数据结构(~数组),除此之外没有任何实际意义。本质上,一些实现了一组接口(interface)(驱动程序)的对象位于该偏移量处。按照惯例,某些主要数字指向具有某些角色的此类对象,但它是唯一的约定。例如,我一直假设主要数字以某种方式与特定的硬件地址/总线相关联,但事实并非如此 - 它们只是索引......

最佳答案

对于主要设备编号,您基本上是正确的:它们索引到内核的设备驱动程序表中以识别用于处理设备的驱动程序例程。不过,次要设备编号将使用该驱动程序的唯一设备彼此区分开来,因为系统上可能存在多个使用单个驱动程序的设备。

您也正确地指出,一些主要编号是静态(硬编码)分配给某些常见设备的,例如您的硬盘或某些 TTY 设备(出于遗留原因),但大多数是动态分配的。添加到 Linux 内核的新驱动程序现在需要动态请求设备号。

进一步阅读:

https://www.kernel.org/doc/Documentation/devices.txt - 显示哪些类型的设备被硬编码到哪些主要数字
http://www.linux-tutorial.info/modules.php?name=MContent&pageid=94 - 对主要/次要数字的更详细解释。

关于linux - 除了本质上是表的索引之外,Linux 设备主编号还有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25655937/

相关文章:

linux - ls | 的输出wc -l

linux - Nagios 松弛 channel 集成

c - 如何确定是否启用了 CONFIG_FANOTIFY_ACCESS_PERMISSIONS?

windows - Linux 和 Windows 下的 boost::filesystem 和 Unicode

linux - 启动时 Jiffies 不为零

linux-kernel - 设备树覆盖 : fragment numbers

linux - 为什么 "ulimit -s unlimited"可以在溢出时反ASLR?

linux - 如何在Linux内核中只创建一个模块?

audio - Beaglebone Black Custom Audio Cape DMA/IRQ麻烦

c - 读取错误设备驱动程序