【问题标题】:Linux Kernel Driver Module: Handle multiple device files using a single driverLinux Kernel Driver Module:使用单个驱动程序处理多个设备文件
【发布时间】:2015-02-07 20:29:47
【问题描述】:

我是内核模块编程的初学者。并且使用在线资源(尤其是this tutorial)我已经设法编写了我的大部分驱动程序。

驱动程序基本上是一个字符设备,它将 SRAM 的不同区域映射到单独的文件中。可以看到实际代码here

现在我能够在/dev 下成功创建 4 个文件,并且读/写第一个文件也可以,但其他 3 个文件不起作用。我使用次要编号来区分文件并相应地分配起始地址。

问题:

  1. 为什么其他文件不起作用?
  2. 有没有更好的方法来实现该模块?

谢谢。

【问题讨论】:

    标签: linux-kernel kernel-module


    【解决方案1】:

    第 141 行, "如果 (cdev_add(&c_dev, first, 1) == -1)", 仅将 file_operations 结构应用于第一个设备。 您应该在这里使用 MAXDEVICES 而不是 1

    另一方面,初始化代码很混乱(最好使用 goto,而不是为每个可能失败的函数重复清理),并且在某些情况下明显错误(在创建任何设备之前的 device_destroy(),资源泄漏以防失败创建一个不是第一个设备)。 整个文件不符合内核编码约定。

    【讨论】:

    • 我记住了你的观点。设备销毁上升了,因为我正在使用那部分代码。感谢您的帮助和提示。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多