设备驱动程序中的主要和次要数字

时间:2014-03-11 18:46:08

标签: linux-kernel linux-device-driver drivers

我阅读了一些关于主要和次要数字的材料,并对此表示怀疑。 我的理解:

    由于register_chrdev_region(),
  1. 驱动程序有一个与之关联的主编号。
  2. mknod / dev / hello1 -c 123 32将创建主编号为123的设备文件,当应用程序打开/ dev / hello1时,它会搜索与/ dev / hello1相同的主编号的驱动程序。
  3. 多个设备文件可以与一个驱动程序相关联。 / dev中的两个文件都不会共享同一对主要和次要编号。
  4. 现在一些现代操作系统允许具有相同专业的驾驶员 数字。现在,在这种情况下,映射将如何工作?

2 个答案:

答案 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}}有次要设备号。)