linux-kernel - Linux 内核驱动模块 : Handle multiple device files using a single driver

标签 linux-kernel kernel-module

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

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

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

问题:

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

谢谢。

最佳答案

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

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

关于linux-kernel - Linux 内核驱动模块 : Handle multiple device files using a single driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370854/

相关文章:

c - 内存未满时Linux内核模块OOM

c - 有没有办法使用最新内核创建 vDSO?

c - 为另一个架构重建 Linux 内核模块

windows - WinDbg 显示一些变量但不显示其他变量,在同一位置显示一些变量

linux 0.01内核交叉引用

c - 为什么这个函数在 Linux 驱动中不能是静态的

linux - 是否可以使用 Linux 实时监控进程的调度方式?

linux - Linux 内核代码中的 "current"

我可以从模块添加系统调用吗?

c - 重建/更新内核模块