linux-device-driver - cdev_alloc 和 cdev_init 有什么区别

标签 linux-device-driver

我正在创建一个字符设备。我找到了两种初始化字符设备的方法

cdev_alloc


cdev_init

根据书,如果我嵌入 struct cdev在我的设备结构中,我应该使用 cdev_init
谁能告诉我它们之间有什么区别?

最佳答案

您可以使用:

struct cdev my_cdev;

在这种情况下,您不需要调用 cdev_alloc,因为内存已经分配。相反,您必须调用 cdev_init(&my_cdev, &fops) .
然后 my_cdev.owner = THIS_MODULE;
或者

您可以使用:
struct cdev *my_cdev_p;

在这种情况下,您必须调用 cdev_alloc()来分配内存。
然后,您必须初始化 my_cdev_p->ops=&fops;my_cdev_p->owner = THIS_MODULE; .从不使用 cdev_init()在这种情况下!

请注意,上述 2 种方法不属于旧机制。

关于linux-device-driver - cdev_alloc 和 cdev_init 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783877/

相关文章:

linux - 设备何时从文件系统获得 512B 请求?

Linux 内核 : how to get 'struct file' pointer inside kernel for a device file?

c - 存储大小未知

c - 为什么在 Linux 字符驱动读取调用中 size 总是 = 4096?

linux - 如何在 centos 中为 devVm 设置 ipmitool?

linux - 虚假中断处理

linux - Buildroot 不会在 am335x 自定义板上为 emmc 创建/开发条目

networking - Linux网络驱动程序中的并发: probe() VS ndo_open(), ndo_start_xmit() VS NAPI poll()

linux - 如何为 i2c 设备编写新的 Linux 驱动程序?

linux - 在内核模块中生成随机数