Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304586
  • 博文数量: 77
  • 博客积分: 394
  • 博客等级: 一等列兵
  • 技术积分: 562
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-19 16:15
文章分类
文章存档

2015年(17)

2014年(1)

2012年(59)

分类:

2012-10-14 22:19:34



>>>>>>>在这里注册了两个设备/dev/tty 和 /dev/console,它们的主设备号相同,只是次设备号不同,为什么需要定义两个file_operations(tty_fops和 console_fops),不是说一个主设备号表示一个驱动吗?当打开其中一个设备的时候,是调用哪个file_operations结构?


哈哈,这个是个特例。
open一个字符设备的过程是从
VFS层open系统调用 ===> def_chr_fops-->open ===> cdev->fops->open ===> device specific operation

如果是同一类设备,比如系统中有多个framebuffer,那么就把共有的操作放在cdev->fops->open ,这时向系统注册的仅仅是这一个驱动程序;
将这类主设备号相同的一类设备(如/dev/fb0 /dev/fb1等)放在一个数组中,然后在cdev->fops->open 根据次设备号作为Index来调用体现不同设备差异的那些操作,即 device specific operation , 这就是为什么framebuffer/block 等硬件驱动中实现的都不是file_operations这种操作,而是跟具体设备相关的那些操作。
这就是所谓的一类设备都应一种驱动。


可以认为大多数简单的设备,仅仅需要实现到cdev->fops->open 这个位置,等他们变得复杂,能够提炼出共性的时候就 需要实现到[红色device specific operation 这个位置。

呵呵,不知道我说得清楚不?


阅读(607) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~