//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的文件夹

最新文章

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

热门文章

  1. deque详解
  2. javaSE、javaEE、javaME
  3. DPDK硬件盒子的初步安装测试
  4. 使用Docker遇到的基本命令及问题小结
  5. 【Javascript-基础-ecma6】ecma6学习笔记(持续更新)
  6. 04_Docker入门(下)之docker镜像和仓库的使用
  7. 【腾讯敏捷转型No.8】你爱上手机QQ了么?
  8. NIO流—理解Buffer、Channel概念和NIO的读写操作
  9. 【css】table标签内的td、th如何设置固定宽度,而不是自适应?
  10. debug?用对拍!