我阅读了一些关于主要和次要数字的材料,并对此表示怀疑。 我的理解:
答案 0 :(得分:1)
如果有多个驱动程序与同一主要编号关联,则可以通过各个驱动程序下的不同次编号范围区分它们。您可以使用次要编号作为本地阵列的索引来访问各个设备。
此外,建议使用alloc_chrdev_region()动态地从内核获取主要数字,而不是通过register_chrdev_region()对当前可用的数字进行硬编码。
希望这有帮助!
答案 1 :(得分:1)
当调用open()
并且文件条目包含主/次对时,open会找到具有相应struct device
的设备驱动程序,该驱动程序包含相同的主/次对。仅major
数字不足以打开设备。
现代驱动程序应该由内核动态分配其主要编号,方法是在调用alloc_chrdev_region (&dev_num, 0, <number of contiguous minors to reserve>, DEVICE_NAME)
时将dev_num设置为零。如果调用成功,MAJOR(dev_num)
是动态分配的主设备编号(MINOR(dev_num)
1}}有次要设备号。)