【发布时间】:2012-03-28 08:22:28
【问题描述】:
从/proc/devices 文件可以看到设备驱动程序的主编号。
有没有办法列出设备驱动程序支持的次要编号?
我没有资源,我需要一种从正在运行的 Linux 获取信息的方法。
【问题讨论】:
标签: linux linux-kernel device-driver
从/proc/devices 文件可以看到设备驱动程序的主编号。
有没有办法列出设备驱动程序支持的次要编号?
我没有资源,我需要一种从正在运行的 Linux 获取信息的方法。
【问题讨论】:
标签: linux linux-kernel device-driver
Linux 确实跟踪某个驱动程序分配的区域。否则,如果没有额外的调度模块或类似的东西,在 vc、serial (maj 4) 和 ttyaux (maj 5) 区域上共享主编号是不可行的。在fs/char_dev.c,你会发现
kobj = kobj_lookup(cdev_map, inode->i_rdev, &idx);
确实,Linux 是按(主要,次要)查找 cdev 对象,而不仅仅是(主要)。
例如见/sys/dev/char/:
lrwxrwxrwx 1 root root 0 Mar 27 17:34 4:62 -> ../../devices/virtual/tty/tty62
lrwxrwxrwx 1 root root 0 Mar 27 17:34 4:63 -> ../../devices/virtual/tty/tty63
lrwxrwxrwx 1 root root 0 Mar 27 17:34 4:64 -> ../../devices/pnp0/00:06/tty/ttyS0
lrwxrwxrwx 1 root root 0 Mar 27 17:34 4:65 -> ../../devices/platform/serial8250/tty/ttyS1
lrwxrwxrwx 1 root root 0 Mar 27 17:34 4:66 -> ../../devices/platform/serial8250/tty/ttyS2
...
lrwxrwxrwx 1 root root 0 Mar 27 17:34 4:79 -> ../../devices/platform/serial8250/tty/ttyS15
由于我使用CONFIG_SERIAL_8250_NR_UARTS=16、CONFIG_SERIAL_8250_RUNTIME_UARTS=16 配置了我的内核,我将在 sysfs 目录中看到最多 ttyS15 的条目。这是我的配置操作导致设备驱动程序注册的结果。这可能小于根据Documentation/devices.txt 保留的值。
【讨论】:
Linux 不跟踪它。
当使用次要编号调用open 时,此编号将传递给设备驱动程序。然后,驱动程序可以随心所欲地使用它。
给定的驱动程序可以实现一个次要编号表,每个次要编号都指向一个状态结构。但它可能会以其他方式处理它。
【讨论】: