关闭

谈论attribute驱动实现方式(及device_create与设备节点的关系)

标签: 设备节点attributefops
416人阅读 评论(0) 收藏 举报
分类:

谈论attribute驱动实现方式(及device_create与设备节点的关系)

目前接触过的两种驱动实现方式是attribute路线和file_operations路线(自己取的)。

attribute的实现方式是学习驱动框架的时候接触到的,如文《驱动框架基础》所示,file_operations方式则比较常见,如文《字符设备驱动基础》中的led驱动实现测试代码。两者都是以led这种简单设备为例子。

blog15-1

blog15-2

分析使用attribute方式的LED驱动框架源码的时候,我们知道了led的一种驱动实现方式–attribute路线。源码中没有register_chrdev,只有class_create和device_create。通过对register_chrdev代码实现的分析,我们知道有register_chrdev一定走的是file_operations路线。详情点击这里:__register_chrdev_region分析

所以猜测attribute路线是一条不依赖于内核维护的255字符设备数组的驱动实现方式。让我困惑的是走attribute方式的LED驱动框架中的device_create的参数设备号0代表什么。我们都知道使用device_create的最大目的是提供相应信息给udev,让udev在用户空间下去创建设备节点以便我们能在用户空间下去访问内核驱动(当然,device_create的作用不仅仅是这个)。

比较之前的file_operations路线实现驱动方式:先使用register_chrdev注册一个设备号,然后使用class_create和device_create来自动创建设备文件节点。那我们现在谈论的attribute方式实现驱动是否也会创建相应的设备文件节点,是否一样能通过设备文件节点来访问到内核空间的驱动?

实际测试发现使用attribute方式的驱动模块leds-s5pv210模块安装后,lsmod控制台会打印出相应的模块安装信息,但是/dev下并没有产生相应的设备节点

所以我的猜测是:虽然给了它一个设备号,但是这个设备号是没有意义的(而且这个设备号是写死在内核源码中,并且当我们用attribute方式去实现一个驱动的时候你不需要像用file_operations方式时那样去指定设备号)。

;真正能解释的就是去看驱动源码,时间有限,没有具体分析源码。留个空再补充

总结:
(1)device_create要能实现自动创建设备节点这一部分作用需要真正的主设备号的存在,并不是使用了device_create就一定有设备节点产生
(2)使用attribute的驱动实现方式不能通过设备节点来访问内核的对应驱动,只能通过/sys/class/xxx下的属性文件来访问

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

自动创建设备节点 device_create

error: implicit declaration of  ‘class_device_create’ 这个代码在Kernel 2.6.18下面编译的时候没有任何问题。为什么在2.6.34下...
  • newnewman80
  • newnewman80
  • 2013-03-12 10:14
  • 10535

自动创建设备节点 device_create

error: implicit declaration of  ‘class_device_create’ 这个代码在Kernel 2.6.18下面编译的时候没有任何问题。为什么在2.6.34下面会...
  • xiaopohaibebo
  • xiaopohaibebo
  • 2015-01-06 16:14
  • 624

Linux 设备文件的创建和mdev

本文是嵌入式企鹅圈开篇--《linux字符设备驱动剖析》的姐妹篇,在上述文章里面我们详细描述了字符设备驱动框架涉及的驱动注册、通过设备文件来访问驱动等知识,并明确通过device_create接口并结...
  • yueqian_scut
  • yueqian_scut
  • 2015-07-06 10:43
  • 3335

Linux下的device_create创建字符设备节点流程

对于字符设备驱动,当file_operations注册好了之后,这只是实现了该驱动的内部功能,我们还要向用户提供操作接口,也就是在/dev/目录下创建字符设备节点,其中device_create函数就...
  • chen_chuang_
  • chen_chuang_
  • 2015-09-15 08:38
  • 184

关于字符驱动设备的一些概念理解

file结构体、inode结构体和dentry结构体 内核使用三种数据结构表示打开的文件: (1)每个进程在进程表中都有一个记录项,记录项包含一张打开的文件描述符表,可将视为矢量,每个描述符占用一...
  • shenwanjiang111
  • shenwanjiang111
  • 2016-07-18 16:36
  • 316

device_create 函数详细分析

我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在...
  • jikaishihuaidan
  • jikaishihuaidan
  • 2014-05-24 15:45
  • 315

device_create 函数详细分析

我们在刚开始写Linux设备驱动程序的时候,很多时候都是**利用mknod命令手动创建设备节点**,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节...
  • tanyjin
  • tanyjin
  • 2016-06-18 13:35
  • 232

linux驱动--设备节点生成

linux驱动–设备节点生成关于设备注册于驱动注册,参考前一篇文章http://blog.csdn.net/cole10540316/article/details/51848272linux驱动一般...
  • cole10540316
  • cole10540316
  • 2016-07-07 17:26
  • 1307

class_create(),device_create自动创建设备文件结点

从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里...
  • linyangspring
  • linyangspring
  • 2014-01-27 14:42
  • 326

class_create(),device_create自动创建设备文件结点

cre class_create(),device_create自动创建设备文件结点 从linux 内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替...
  • liaoshengshi
  • liaoshengshi
  • 2015-03-21 19:41
  • 365
    个人资料
    • 访问:20539次
    • 积分:482
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:3篇
    • 译文:0篇
    • 评论:4条
    最新评论