从/proc/devices
文件可以看到设备驱动程序的主要编号。有没有办法列出设备驱动程序支持的次要号码?我没有消息来源,我需要一种从运行中的Linux获取信息的方法。
Linux确实跟踪特定驱动程序分配的区域。否则,如果没有额外的调度模块或类似的东西,在vc、serial(maj4)和ttyaux(maj5)区域上共享主数字是不可行的。在fs/char_dev.c
中,您会发现
kobj = kobj_lookup(cdev_map, inode->i_rdev, &idx);
因此,实际上,Linux是按(major,minor)查找cdev对象,而不仅仅是按(main)查找。
参见/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
时,该号码将传递给设备驱动程序。然后驾驶员可以随心所欲地使用它
给定的驱动程序可以实现一个次要数字表,每个次要数字指向一个状态结构。但它可能会以其他方式处理它