【问题标题】:Simple linux device driver does not appear in /dev简单的 linux 设备驱动程序不会出现在 /dev 中
【发布时间】: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


【解决方案1】:

我正在使用 alloc_chrdev_region 方法。所以我假设它有 254 ...

你不应该无缘无故地假设某事。打印alloc_chrdev_region()返回的*dev,或者改用register_chrdev(254, ...)

我调用 open 的用户空间程序只是返回一个 -1

不,它不仅返回 -1,open() 还将errno 设置为适当的错误号,您可以使用perror() 方便地从中生成消息。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多