字符设备初始化

来源:互联网 发布:mac导入照片不清晰 编辑:程序博客网 时间:2024/06/17 08:15
一个 cdev 一般它有两种定义初始化方式:静态的和动态的。 静态内存定义初始化: struct cdev my_cdev; cdev_init(&my_cdev, &fops); my_cdev.owner = THIS_MODULE;动态内存定义初始化: struct cdev *my_cdev = cdev_alloc(); my_cdev->ops = &fops; my_cdev->owner = THIS_MODULE;两种使用方式的功能是一样的,只是使用的内存区不一样,一般视实际的数据结构需求而定。 下面贴出了两个函数的代码,以具体看一下它们之间的差异。struct cdev *cdev_alloc(void) {    struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL);    if (p) {       INIT_LIST_HEAD(&p->list);       kobject_init(&p->kobj, &ktype_cdev_dynamic);    }    return p; } void cdev_init(struct cdev *cdev, const struct file_operations *fops) {    memset(cdev, 0, sizeof *cdev); 注1;    INIT_LIST_HEAD(&cdev->list);    kobject_init(&cdev->kobj, &ktype_cdev_default);    cdev->ops = fops; }由此可见,两个函数完成都功能基本一致,只是 cdev_init() 还多赋了一个 cdev->ops 的值。

原创粉丝点击