为什么我必须在外部调用 mknod 而不是直接在驱动程序中调用?

为什么我必须在外部调用 mknod 而不是直接在驱动程序中调用?

阅读我能找到的有关字符设备驱动程序的所有书籍/文章/教程/示例,它们都涵盖了如何在驱动程序代码中获取主设备号,并且都建议我通过调用alloc_chrdev_region().为了创建实际的设备节点,他们都告诉我mknod 手动或在脚本中调用外部驱动程序代码。一位推荐人希望我的司机打印主设备号。另一个希望我使用awkon/proc/devices来查找主号码。提到了该函数mknod(),但它似乎是打算在用户态代码中使用的。

我显然错过了一些东西,因为我不明白为什么没有办法让我的驱动程序变得自给自足,即我这样做modprobe my_driver并最终得到,比如说,/dev/my_driver创建而无需做任何其他事情。

答案1

在 Linux 中,命令对 device_create 和 class_create 就可以实现这一目的。查看 https://stackoverflow.com/questions/5970595/create-a-device-node-in-code

答案2

Unix传统上遵循“机制,而不是政策”的传统。对于设备驱动程序,这意味着内核中的驱动程序标识只是主/次设备号。使用 mknod 命名设备(“策略*”)已留给用户空间。

相关内容