device_create与device_register
2024-10-21 03:23:22
//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的文件夹
最新文章
- angular开发单页面应用--页面资源部分
- Android获取ImageView上的图片,和一个有可能遇到的问题!
- static
- Object Removal by Exemplar-Based Inpainting 概括(附源码)
- MVC 生成图片,下载文件(图片不存在本地,在网上下载)
- CSS3中动画属性transform、transition和animation
- paip.提升性能---list,arraylist,vector,linkedlist,map的选用..
- [转载]我们可以用SharePoint做什么
- 3种方式实现Java多线程
- C# POST数据到指定页面,并跳转至该页面
- 一个超级简单的node.js爬虫(内附表情包)
- 栈溢出之rop到syscall
- css布局学习笔记之position属性
- FreeBSD安装桌面环境
- 开启MongoDB客户端访问控制
- springboot模块
- OverFeat学习
- 在网站开发时,可以设置防盗,不被复制和F12
- Oracle之with as和update用法
- Kubernetes学习之路目录