(九) 字符设备节点生成

1.创建设备类

  字符类设备设备节点的生成和杂项设备节点生成相类似,不过相比较杂项设备设备,字符设备需要额外添加一个设备类。
  linux创建设备类需要通过class类进行创建。linux中的class是设备类,是一个抽象的概念,并没有对应的实体。它提供给用户接口相似的一类设备集合。常见的有输入子系统input、usb、串口tty、块设备block等。在linux根目录中,使用命令”vim include/linux/device.h”:

#define class_create(owner, name)               
({                                                          
         static struct lock_class_key __key;     
         __class_create(owner, name, &__key);    
 })

  参数owner:一般是THIS_MODULE;参数name:设备名称;调用函数class_creat会返回一个class结构体变量。
在linux根目录中,使用命令”vim include/linux/device.h”:

    struct class {
         const char              *name;
         struct module           *owner; 
         struct class_attribute          *class_attrs;
         struct device_attribute         *dev_attrs;
         struct bin_attribute            *dev_bin_attrs;
         struct kobject                  *dev_kobj; 
         int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
         char *(*devnode)(struct device *dev, mode_t *mode); 
         void (*class_release)(struct class *class);
         void (*dev_release)(struct device *dev); 
         int (*suspend)(struct device *dev, pm_message_t state);
         int (*resume)(struct device *dev); 
         const struct kobj_ns_type_operations *ns_type;
         const void *(*namespace)(struct device *dev);

         const struct dev_pm_ops *pm;

         struct subsys_private *p;
};

对于代码中的参数可以不用去管,只需要定义一个class变量,然后在创建设备节点的时候作为一个参数赋值使用即可。与class_creat相对应的函数class_destroy,就只有一个参数class。这个函数也是在头文件”include/linux/device.h”
### 2.创建字符设备节点
创建设备节点需要函数device_create在头文件”include/linux/device.h”,使用命令”vim include/linux/device.h”,查找device_create函数:

extern struct device *device_create(struct class *cls,struct device *parent,dev_t devt,void *drvdata,const char *fmt....);
extern struct device_detroy();

  参数struct class *cls:设备所属的类,前面创建类的返回值;参数struct device *parent:设备的父设备,NULL;参数dev_t devt:设备号;参数void *drvdata :设备数据,NULL;参数const char *fmt:设备名称。与device_create对应的函数device_destory();只有两个参数,分别是设备类和设备号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值