• device_create与device_register


    //device_create的定义如下
    struct device *device_create(struct class *class, struct device *parent,
                     dev_t devt, void *drvdata, const char *fmt, ...)
    {
        va_list vargs;
        struct device *dev;
    
        va_start(vargs, fmt);
        dev = device_create_vargs(class, parent, devt, drvdata, fmt, vargs);
        va_end(vargs);
        return dev;
    }
    //device_create_vargs的定义如下
    struct device *device_create_vargs(struct class *class, struct device *parent,
                       dev_t devt, void *drvdata, const char *fmt,
                       va_list args)
    {
        struct device *dev = NULL;
        int retval = -ENODEV;
    
        if (class == NULL || IS_ERR(class))
            goto error;
    
        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        if (!dev) {
            retval = -ENOMEM;
            goto error;
        }
    
        dev->devt = devt;
        dev->class = class;
        dev->parent = parent;
        dev->release = device_create_release;
        dev_set_drvdata(dev, drvdata);
    
        retval = kobject_set_name_vargs(&dev->kobj, fmt, args);
        if (retval)
            goto error;
    
        retval = device_register(dev);
        if (retval)
            goto error;
    
        return dev;
    
    error:
        put_device(dev);
        return ERR_PTR(retval);
    }

    看第39行调用了device_register(dev),在调用device_register之前构造了一个device变量dev, 并将该dev的devt,class,parent,device_create_release等变量赋值了。 所以执行device_register(dev)时会在/sys/class生成一个名字为dev->init_name的文件夹。而且该dev的父设备是paretn

    如果我不设置class的值

    像下面这样 struct device hello ={  .init_name = "hello", } device_register(&hello); 像这样只设置了device变量 hello的 init_name成员,那么他会默认的把文件夹建立在/sys/device目录下, 此时你会在/sys/device目录看见一个名字为hello的文件夹

  • 相关阅读:
    分析函数
    Orcal函数
    归档日志
    JSP数据交互
    JSP
    接口
    JAVA修饰符
    QuicKHit
    Java 三章错题
    Java 多态
  • 原文地址:https://www.cnblogs.com/Blue-Moon/p/3219915.html
Copyright © 2020-2023  润新知