Linux内核驱动程序模块:使用单个驱动程序处理多个设备文件

时间:2015-02-06 16:56:46

标签: linux-kernel kernel-module

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

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

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

问题:

  1. 为什么其他文件不起作用?
  2. 是否有更好的方法来实施该模块?
  3. 感谢。

1 个答案:

答案 0 :(得分:4)

第141行, “if(cdev_add(& c_dev,first,1)== -1)”, 仅将file_operations结构应用于第一个设备。 您应该使用MAXDEVICES而不是1

另一方面,init代码很乱(更好地使用goto而不是为每个可能失败的函数复制清理)并且在某些情况下会出现错误(device_destroy()在创建任何设备之前,如果失败则会发生资源泄漏创建一个不是第一个的设备)。 整个文件不符合内核编码惯例。