内核设备驱动API之register_chrdev
2018-03-23 20:16
399 查看
register_chrdev用于注册一个字符设备。 其源码分析如下: static inline int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops) { #这里设置最小的字符设备号和最大的设备号后,调用下面的函数继续注册 return __register_chrdev(major, 0, 256, name, fops); } int __register_chrdev(unsigned int major, unsigned int baseminor, unsigned int count, const char *name, const struct file_operations *fops) { struct char_device_struct *cd; struct cdev *cdev; int err = -ENOMEM; #申请一个保存字符设备的结构体 cd = __register_chrdev_region(major, baseminor, count, name); if (IS_ERR(cd)) return PTR_ERR(cd); #申请一个字符设备 cdev = cdev_alloc(); if (!cdev) goto out2; #字符设备赋值 cdev->owner = fops->owner; cdev->ops = fops; #设定字符设备的name kobject_set_name(&cdev->kobj, "%s", name); #添加字符设备 err = cdev_add(cdev, MKDEV(cd->major, baseminor), count); if (err) goto out; #指向新申请的字符设备 cd->cdev = cdev; #正常情况下major 不为零,所以整个函数返回零作为成功的结果 return major ? 0 : cd->major; out: kobject_put(&cdev->kobj); out2: kfree(__unregister_chrdev_region(cd->major, baseminor, count)); return err; }
相关文章推荐
- 内核设备驱动API之__register_chrdev_region
- __register_chrdev_region分析(简单字符设备驱动在内核的工作原理)
- Linux字符设备驱动之register_chrdev_region()系列
- 内核设备驱动API之get_device和put_device
- Linux字符设备驱动之register_chrdev_region()系列
- Linux字符设备驱动之register_chrdev_region()系列
- 字符设备驱动: register_chrdev和register_chrdev_region
- Linux字符设备驱动之register_chrdev_region()系列
- linux驱动---字符设备的注册register_chrdev说起
- Linux驱动API之register_chrdev
- linux驱动---字符设备的注册register_chrdev说起
- 字符设备驱动之register_chrdev_region()系列
- 24 驱动设备申请一体函数(register_chrdev)
- 内核设备驱动API之__class_create
- linux驱动---字符设备的注册register_chrdev说起
- linux驱动---字符设备的注册register_chrdev说起
- Linux字符设备驱动的register_chrdev()与unregister_chrdev()
- Linux 内核设备驱动之GPIO驱动之GPIO API
- Linux字符设备驱动的register_chrdev()与unregister_chrdev()
- Linux字符设备驱动的register_chrdev()与unregister_chrdev()