【问题标题】:major and minor numbers in device drivers设备驱动程序中的主要和次要编号
【发布时间】:2014-04-15 13:08:43
【问题描述】:

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

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

【问题讨论】:

  • 对于具有相同主编号的驱动程序,您可以在 Internet 上阅读“杂项驱动程序”基本上是字符驱动程序。否则你上面提到的所有理解都是正确的。

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


【解决方案1】:

当您有多个驱动程序与同一个主要编号相关联时,您可以通过各个驱动程序下的不同次要编号范围来区分它们。您可以使用次要编号作为本地数组的索引来访问各个设备。

此外,建议使用 alloc_chrdev_region() 从内核动态获取主编号,而不是通过 register_chrdev_region() 硬编码当前空闲的编号。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    当调用open() 并且文件条目包含一个主要/次要对时,open 会查找具有相应struct device 的设备驱动程序,该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)具有次设备号)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多