Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1293503
  • 博文数量: 175
  • 博客积分: 2743
  • 博客等级: 少校
  • 技术积分: 4024
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-30 01:41
文章分类

全部博文(175)

文章存档

2015年(1)

2013年(53)

2012年(71)

2011年(50)

分类: LINUX

2012-03-26 16:29:54

device_create,device_create_file【转】 (2012-01-07 17:00:02)
标签: 杂谈 分类: 课题相关

1,

例子1

  device_create( my_class, NULL, MKDEV(hello_major, 0), "hello" "%d", 0 );

如果成功,它将会在/dev目录下产生/dev/hello0设备。

 

例子2

led_cdev->dev = device_create_drvdata(leds_class, parent, 0, led_cdev,

                                         "%s", led_cdev->name);

这是前文platformgpio-leds里面的源码

由于dev_t0,所以它不会在/dev下产生设备文件。

led_cdev为传递给class的私有数据。

会把第6个参数的内容复制到第5个参数 “%s”,就像printf一样

 

2,device_create_file好像用来在 文件系统的设备子系统下 设置某个设备文件属性的。而这个设备属性里包括了 属性名称, 读写属性的方法等

调用device_create_file(dev, &dev_attr_debug);函数在/sys中导出信息,device_create_file()的第一个入口参数类型为struct device结构体。问题是如何把cdev转换到device,

结构层次:


kobject


/ \
cdev device
所以从子类cdev--->父类kobject--->子类device
container_of(kobj)-->list_entry(entry)->(struct device*)

 

3,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_create创建对应的设备。大致用法如下:
struct class *myclass = class_create(THIS_MODULE, “my_device_driver”);
class_device_create(myclass, NULL, MKDEV(major_num, 0), NULL, “my_device”);
这样的module被加载时,udev daemon就会自动在/dev下创建my_device设备文件
阅读(3510) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~