【发布时间】:2014-12-12 23:21:58
【问题描述】:
我一直在编写一个简单的 scull_dev 设备驱动程序来学习如何对内核模块进行编程,我想我已经完全编写好了。
我可以成功,我可以调用sudo insmod scull.ko没有任何问题,但是驱动程序永远不会出现在linux的/dev/文件夹中。
我现在正在尝试实现.ioctl,但没有文件可供我打开。使用用户空间程序中的 ioctl 使用设备驱动程序的“文件”的打开 fd 调用它的正确方法不是吗? (甚至不知道这是什么意思……)
设备驱动程序的整个话题让我非常非常困惑,而且我一直在使用的书在我看来完全是垃圾,所以我知道我在这里可能有一些主要的误解......
【问题讨论】:
-
老派的方法是使用 mknod:
mknod /dev/scull0 c 254 0 -
那会创建驱动程序的实例吗? 0 是主要数字,对吗?所以我需要知道我的双桨驱动程序的正确主号码才能正常工作?
-
那本书其实还不错,就是有点过时了。有一个设备节点是什么的解释。 0 是次要编号。 Linux 中的主编号通常分配给驱动程序类型,因此 254 是示例 skull 设备的任意大数字。您的驱动程序将被分配到该节点。
-
另见 register_chrdev()。
-
您的 register_chrdev() 参数必须与设备节点专业匹配。
标签: linux kernel device-driver