关于驱动中device结构体的疑问
最近看到终端设备驱动,有这样几个疑问:
1.终端设备也属于字符设备,字符设备驱动中好像没有关于device结构体的注册,那为何终端设备驱动在注册的时候会需要有一个device结构体的注册呢?
2.既然字符设备驱动没有关于device结构体的注册,那么字符设备驱动就是简单的靠设备文件与设备关联的么?
3.如果第2点的假设成立,那么为何复杂设备驱动,比如PCI设备驱动需要维护一个device结构体的链表呢,为何不在加载了模块以后,也像字符设备一样通过设备文件来关联设备呢?
仅仅是为了支持热插拔么?
不知道表述清楚没,还望各位大大不吝赐教~~~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
5L正解,LZ没有理解设备和总线到区别
建议研究一下linux设备模型
linux那些事儿之我是USB里边关于设备模型有详细讲述,个人认为比LDD3里边关于设备模型的讲解更为通俗易懂
真可以说是朗朗上口,声声入耳
非常感谢你的推荐,我仔细阅读了一下,确实很幽默诙谐,但内容上还是讲述的总线,设备,驱动之间的关系。。。
因为我个人比较执着,必须要建立一个宏观的概念,才愿意更深入的探究。
其实我的问题在于,device结构的作用。为什么driver结构一定要和device结构建立一个关系呢?
根据字符设备驱动的表现,仅仅只需要driver结构就行了,而不需要device结构,即是说,只需要通过设备文件就可以访问驱动了。那么其他复杂设备为什么不这样呢?
从上一位的回答中,我觉得应该这样理解,建立这样的关系,仅仅是为了更好的管理设备和驱动,实际表现上来说,仍然是设备文件与驱动的关系。
哈哈,感觉你的思想就像是裸奔的思维,有了device,可以让driver更容易实现更完善的功能 ,而且更成为一个体系
如果没有device,那整个驱动系统就会很混乱,内核就不好维护了
坐等大神解答~~
结构cdev不是吗?
cdev结构了里并没有封装device结构~~说到cdev结构,我又有个问题,cdev结构里 虽然有kobject结构,但追踪字符设备的注册程序cdev_add,
发现根本没有涉及到设备模型的操作,即是说在sysfs文件系统中不存在字符设备的管理么?那cdev结构中的kobject结构,纯粹是为了计数?
device应该是至少有两种: 总线类型device (如PCI, UB,PLATFOM等等)以及
设备类型的device(net_device,cdev,等)
本帖最后由 wgs13579 于 2011-03-29 14:40 编辑
按照我个人的理解 我觉得你的说法也不正确,我觉得只要使用到device结构的设备,比如PCI,BLOCK等,它们都是将device结构进行了封装。
比如你说的第一类的总线pci_dev结构中包含了device结构,你说的第二类中的net_device结构中也包含了device结构,
惟独cdev结构没有~~~
回复 1# wgs13579
1. '字符设备',‘块设备’和‘PCI 设备’是正交关系,并非互斥
2. 对于那些只需要‘设备文件’和‘设备’相关联的‘某些’‘字符设备’,因为足够满足需求了。
3. 确实是为了能更好的抽象现代总线的feature,不过不是‘热插拔(hot plug)’,表达为‘即插即用’(plug and play)更准确一些。