我是内核模块编程的初学者。在线使用资源(尤其是this tutorial)我已经设法编写了大部分驱动程序。
驱动程序基本上是一个字符设备,它将SRAM的不同区域映射到单独的文件中。您可以看到实际代码here。
现在我能够在/dev
下成功创建4个文件,并且读取/写入第一个文件也可以,但其他3个文件不起作用。我正在使用次要号码来区分文件并相应地分配起始地址。
问题:
感谢。
答案 0 :(得分:4)
第141行, “if(cdev_add(& c_dev,first,1)== -1)”, 仅将file_operations结构应用于第一个设备。 您应该使用MAXDEVICES而不是1
另一方面,init代码很乱(更好地使用goto而不是为每个可能失败的函数复制清理)并且在某些情况下会出现错误(device_destroy()在创建任何设备之前,如果失败则会发生资源泄漏创建一个不是第一个的设备)。 整个文件不符合内核编码惯例。