Linux内核驱动程序模块:使用单个驱动程序处理多个设备文件
问题描述:
我是内核模块编程的初学者。并且在线使用资源(尤其是this tutorial)我已经设法编写了我的大部分驱动程序。Linux内核驱动程序模块:使用单个驱动程序处理多个设备文件
该驱动程序基本上是一个字符设备,它将不同区域的SRAM映射到单独的文件。你可以看到实际的代码here。
现在我能够在/dev
下成功创建4个文件,读取/写入第一个文件也可以,但其他3个文件不起作用。我使用次要号码来区分这些文件并相应地分配起始地址。
问题:
- 为什么其他文件不工作?
- 有没有更好的方法来实现模块?
感谢。
答
线141, “如果(cdev_add(& c_dev,首先,1)== - 1)”,仅 施加的file_operations结构到第一设备。 您应该使用的,而不是1这里
在另一方面MAXDEVICES,初始化代码是凌乱的(更好地使用goto,而不是重复的,可以失败,每一个功能的清理),并在某些情况下,之前的任何明显的错误(device_destroy()设备已创建,如果创建的设备不是第一个,则资源泄漏。整个文件不符合内核编码惯例。
我记住了你的观点。由于我在玩这部分代码,因此设备销毁上升。感谢您的帮助和提示。 – Prateek 2015-02-09 21:39:05