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

普拉泰克

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

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

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

问题:

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

谢谢。

塔拉索

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

另一个需要注意的是,初始化代码很杂乱(最好使用goto而不是对每个可能失败的函数重复执行清理操作),在某些情况下,这是完全错误的(在创建任何设备之前,device_destroy()都会出错,如果创建失败,则会导致资源泄漏)不是第一个的设备)。整个文件不符合内核编码约定。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Linux设备驱动程序访问控制

Linux内核中的USB鼠标使用哪些驱动程序?

IOCTL Linux设备驱动程序

如何在Linux驱动程序模块中暂停100毫秒以上?

如何编写Linux驱动程序模块调用/使用其他驱动程序模块?

设备驱动程序中的中断处理

如何通过在驱动程序模块中使用seq_file实现可写的proc文件

测量某个Linux驱动程序模块的内存使用情况

Zigbee内核驱动程序

可以在Linux中注册多个驱动程序以处理同一设备

Linux内核:从驱动程序中删除输入处理程序

Linux设备驱动程序-文件操作不起作用

Linux内核-检查当前使用的驱动程序

如何为USB-HID设备使用Linux内核驱动程序绑定/取消绑定接口?

在Linux下,哪个设备使用哪个驱动程序?

linux如何为内置驱动程序模块加载固件

如何阻止内核内置的驱动程序,即不是模块的驱动程序

Linux:以独立方式编译内核设备驱动程序

linux内核如何处理驱动程序?

linux内核驱动程序调试日志

Linux内核驱动程序-SPI如何识别SPI设备?

如何在连接的USB设备上加载我的自定义驱动程序模块?

如何知道驱动程序模块的代码流?

Linux字符设备驱动程序问题

Linux内核中的WS2812设备驱动程序

如何为我的处理器更新Debian Linux内核使用的驱动程序?

如何使用设备驱动程序获取文件版本?

Linux 内核使用来自不同驱动程序树的头文件

linux 设备驱动程序文档