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

Linux Kernel Driver Module: Handle multiple device files using a single driver

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

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

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

问题:

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

谢谢。

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

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