将 file_operations 转换为 proc_ops 时如何处理 cdev_init?

What To Do With cdev_init When Converting file_operations To proc_ops?

根据这个问题

您必须在较新的内核上使用 proc_ops 而不是 file_operations 结构。

当 cdev 使用旧的 file_operations 结构时,我们应该如何处理使用 cdev_init 初始化 cdev?

我查看了一些关于较新的 linux 内核 (https://elixir.bootlin.com/linux/latest/source/drivers/char/pcmcia/scr24x_cs.c#L216) 的示例,但它们仍然使用旧的 file_operations.

谢谢, -特殊K

cdev_init() 函数的签名 still uses 参数指向 struct file_operations 对象,因此在为更新的内核调整模块时无需更改此调用。

proc_create() 函数的签名已更改,因为它使用 proc 文件系统 (procfs) 下的文件,并且此文件系统已 re-designed 在较新的内核。

cdev_init 函数创建(初始化)一个 字符设备 。而字符设备通常用一个文件来表示(也可以位于procfs下),但是这个文件是特殊类型的,对这个文件的操作和字符设备本身的操作是不一样的。因为cdev_init只负责字符设备(不是文件),所以它不受procfs设计变化的影响。