主设备号和file_operations结构关系

http://www.linuxforum.net/forum/showflat.php?Board=driver&Number=746510

>>>>>>>在这里注册了两个设备/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 这个位置。

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


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(768) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~
评论热议