2015-02-06 109 views
3

我是内核模块编程的初学者。并且在线使用资源(尤其是this tutorial)我已经设法编写了我的大部分驱动程序。Linux内核驱动程序模块:使用单个驱动程序处理多个设备文件

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

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

问题:

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

感谢。

回答

4

线141, “如果(cdev_add(& c_dev,首先,1)== - 1)”,仅 施加的file_operations结构到第一设备。 您应该使用的,而不是1这里

在另一方面MAXDEVICES,初始化代码是凌乱的(更好地使用goto,而不是重复的,可以失败,每一个功能的清理),并在某些情况下,之前的任何明显的错误(device_destroy()设备已创建,如果创建的设备不是第一个,则资源泄漏。整个文件不符合内核编码惯例。

+0

我记住了你的观点。由于我在玩这部分代码,因此设备销毁上升。感谢您的帮助和提示。 – Prateek 2015-02-09 21:39:05

相关问题