首页 文章

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

提问于
浏览
2

我读了一些关于主要和次要数字的材料,并对此有疑问 . 我的理解:

由于register_chrdev_region(),

  • 驱动程序有一个与之关联的主要编号 .

  • mknod / dev / hello1 -c 123 32将创建主编号为123的设备文件,当应用程序打开/ dev / hello1时,它会搜索与/ dev / hello1相同的主编号的驱动程序 .

  • 多个设备文件可以与一个驱动程序相关联 . 并且/ dev中的两个文件都不会共享同一对主要和次要编号 .

  • 现在一些现代操作系统允许具有相同主要编号的驾驶员 . 现在在这种情况下,映射将如何工作?

2 回答

  • 1

    如果有多个驱动程序与同一主要编号关联,则可以通过各个驱动程序下的不同次编号范围区分它们 . 您可以使用次要编号作为本地阵列的索引来访问各个设备 .

    此外,建议使用alloc_chrdev_region()从内核动态获取主要编号,而不是通过register_chrdev_region()对当前可用的编号进行硬编码 .

    希望这可以帮助!

  • 1

    当调用 open() 并且文件条目包含主/次对时,open会找到具有相应 struct device 的设备驱动程序,该驱动程序包含相同的主/次对 . 仅仅 major 数字不足以打开设备 .

    当调用_627252时,现代驱动程序应该由内核动态分配其主要编号,并将dev_num设置为零 . 如果调用成功, MAJOR(dev_num) 是动态分配的主设备编号(并且 MINOR(dev_num) 具有次设备编号) .

相关问题