linux驱动学习加强版-4(class_create和device_create)

一、class_create和device_create

首先我们看我们驱动注册和注销

static int __init filectl_init(void)
{
    // 在初始化的时候进行驱动注册, 设备号, 设备名,核心操作函数
    major = register_chrdev(0,"filectl",&filectl_ops); 
    if(major < 0) {
        printk("[%s %d] filectl error\n", __FUNCTION__, __LINE__); // 注册失败
        return -1;
    }

    filectl_class = class_create(THIS_MODULE, "filectl"); // class_create 动态创建dev的类
    // IS_ERR 查看指针是否有错误
    if(IS_ERR(filectl_class)) {
        printk("[%s %d] class_create error\n", __FUNCTION__, __LINE__);
        unregister_chrdev(major,"filectl");
        return -1;
    }
	// 创建字符设备
    device_create(filectl_class, NULL, MKDEV(major, 0),NULL, "filectl");
    printk("[%s %d] filectl driver create success\n", __FUNCTION__, __LINE__);

    return 0;
}

static void __exit filectl_exit(void) {
    device_destroy(filectl_class, MKDEV(major, 0));
    class_destroy(filectl_class);
    // 注销字符设备
	unregister_chrdev(major,"filectl");
    printk("[%s %d]goodbye filectl driver\n",  __FUNCTION__, __LINE__);
}

在注册函数里面会有 class_create 和一个 device_create. 这是成双成对的。
注销函数是里面会有 class_destroy 和一个 device_destroy,同样的这也是一起的,不然你注册了不注销,下次就无法注册了。

class_create就是在sys/class里面去创建一个目录,并赋予一些属性方便后期操作,device_create就是在dev目录下创建一个字符设备。
但是我验证过,好像单独使用device_create是无法在dev下面去创造的,但是加上class_create就可以了

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: class_create是一个函数,用于创建一个新的设备类。它接受一个指向struct class结构体的指针作为参数,并返回一个指向新创建的设备类的指针。 device_create是一个函数,用于创建一个新的设备节点。它接受一个指向struct class结构体的指针、一个指向父设备的指针和一个设备号作为参数,并返回一个指向新创建的设备节点的指针。 ### 回答2: 在Linux驱动程序开发中,class_createdevice_create是常用的函数,它们的作用是为Linux设备驱动程序提供一种无需手动注册设备节点的方式,从而简化了驱动程序的编写过程。 class_create函数可用于向系统注册一个新的设备类别(class),同时自动创建一个sysfs设备类目录,该目录下包含了该设备类别的各种属性和状态信息。在该目录下创建的设备文件会自动继承该设备类别,从而归类管理,便于后续的设备管理操作。另外,向系统注册一个设备类别还可以允许用户空间的程序动态地发现和识别与其相关的设备。 device_create函数是在一个已经注册的设备类别下(通过调用class_create函数实现)创建一个设备对象(即设备节点),并自动将其添加到sysfs文件系统中。设备节点包含了与设备相关的信息,如设备号、设备属性等等。通过该函数,用户空间程序只需知道设备类别名称和设备名称,即可实现对设备的自动发现和访问。同时,该函数还允许驱动程序在设备对象被创建之前执行一些相关的初始化配置操作,以确保设备在使用时的正确性和稳定性。 总之,class_createdevice_createLinux设备驱动程序编写中非常基础和重要的函数,它们可以大大简化设备节点的创建和管理工作,同时也为用户空间程序提供了一种方便的接口,有助于提升Linux设备驱动程序的可用性和易用性。 ### 回答3: class_createdevice_create都是Linux内核中的函数,用于驱动程序中的设备注册和创建。 class_create函数用于创建设备类,它有以下几个参数: 1. owner:表示该类的拥有者,通常为THIS_MODULE。 2. name:表示设备类的名称,该名称在/sys/class目录下创建。 3. parent:表示设备类的父类指针,可以为NULL。 4. class_attr:表示指向设备类的属性结构数组的指针,属性结构数组中存放着设备的各种属性信息,包括设备属性名、访问方式、读写接口等。 5. device_attr:表示指向设备的属性结构数组的指针,属性结构数组中存放着设备的各种属性信息,包括设备属性名、访问方式、读写接口等。 因此,在使用class_create函数时,需要先定义好设备类和设备的属性结构数组,并通过参数传递给该函数。 而device_create函数用于创建一个设备,并将其加入到设备类中。它有以下几个参数: 1. class:表示指向设备类的指针。 2. parent:表示指定设备的父设备,可以为NULL。 3. devt:表示设备的设备号,在内核中唯一识别该设备。 4. name:表示设备的名称,该名称在/dev目录下创建。 5. fmt:表示设备名称的格式,常用的格式有“%s”,表示设备名称为字符串。 本函数的基本操作就是在设备类中创建一个新的设备。因此,在调用该函数之前,需要确定要创建哪个设备类,以及要创建的设备的名称和设备号。 总的来说,class_createdevice_create两个函数都是用于管理设备的函数,前者用于创建设备类,后者用于创建设备。它们是Linux设备驱动程序中非常常用的两个函数,掌握它们对于开发Linux设备驱动程序非常重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值