Chinaunix

标题: 关于驱动中device结构体的疑问 [打印本页]

作者: wgs13579    时间: 2011-03-28 11:20
标题: 关于驱动中device结构体的疑问
最近看到终端设备驱动,有这样几个疑问:

1.终端设备也属于字符设备,字符设备驱动中好像没有关于device结构体的注册,那为何终端设备驱动在注册的时候会需要有一个device结构体的注册呢?

2.既然字符设备驱动没有关于device结构体的注册,那么字符设备驱动就是简单的靠设备文件与设备关联的么?

3.如果第2点的假设成立,那么为何复杂设备驱动,比如PCI设备驱动需要维护一个device结构体的链表呢,为何不在加载了模块以后,也像字符设备一样通过设备文件来关联设备呢?
   仅仅是为了支持热插拔么?


不知道表述清楚没,还望各位大大不吝赐教~~~
作者: wgs13579    时间: 2011-03-28 19:13
坐等大神解答~~
作者: Fine_oday    时间: 2011-03-28 21:30
结构cdev不是吗?
作者: wgs13579    时间: 2011-03-29 09:30
结构cdev不是吗?
Fine_oday 发表于 2011-03-28 21:30



cdev结构了里并没有封装device结构~~说到cdev结构,我又有个问题,cdev结构里 虽然有kobject结构,但追踪字符设备的注册程序cdev_add,

发现根本没有涉及到设备模型的操作,即是说在sysfs文件系统中不存在字符设备的管理么?那cdev结构中的kobject结构,纯粹是为了计数?
作者: Trigger_Huang    时间: 2011-03-29 12:52
device应该是至少有两种: 总线类型device (如PCI, UB,PLATFOM等等)以及
                          设备类型的device(net_device,cdev,等)
作者: wgs13579    时间: 2011-03-29 14:38
本帖最后由 wgs13579 于 2011-03-29 14:40 编辑
device应该是至少有两种: 总线类型device (如PCI, UB,PLATFOM等等)以及
                          设 ...
Trigger_Huang 发表于 2011-03-29 12:52



按照我个人的理解 我觉得你的说法也不正确,我觉得只要使用到device结构的设备,比如PCI,BLOCK等,它们都是将device结构进行了封装。

比如你说的第一类的总线pci_dev结构中包含了device结构,你说的第二类中的net_device结构中也包含了device结构,

惟独cdev结构没有~~~
作者: snail_314    时间: 2011-03-30 08:04
回复 1# wgs13579


1. '字符设备',‘块设备’和‘PCI 设备’是正交关系,并非互斥
2. 对于那些只需要‘设备文件’和‘设备’相关联的‘某些’‘字符设备’,因为足够满足需求了。
3. 确实是为了能更好的抽象现代总线的feature,不过不是‘热插拔(hot plug)’,表达为‘即插即用’(plug and play)更准确一些。
作者: lelee007    时间: 2011-03-30 13:56
5L正解,LZ没有理解设备和总线到区别

建议研究一下linux设备模型

linux那些事儿之我是USB里边关于设备模型有详细讲述,个人认为比LDD3里边关于设备模型的讲解更为通俗易懂

真可以说是朗朗上口,声声入耳
作者: wgs13579    时间: 2011-03-31 09:35
5L正解,LZ没有理解设备和总线到区别

建议研究一下linux设备模型

linux那些事儿之我是USB里边关于设备 ...
lelee007 发表于 2011-03-30 13:56


非常感谢你的推荐,我仔细阅读了一下,确实很幽默诙谐,但内容上还是讲述的总线,设备,驱动之间的关系。。。


因为我个人比较执着,必须要建立一个宏观的概念,才愿意更深入的探究。

其实我的问题在于,device结构的作用。为什么driver结构一定要和device结构建立一个关系呢?

根据字符设备驱动的表现,仅仅只需要driver结构就行了,而不需要device结构,即是说,只需要通过设备文件就可以访问驱动了。那么其他复杂设备为什么不这样呢?

从上一位的回答中,我觉得应该这样理解,建立这样的关系,仅仅是为了更好的管理设备和驱动,实际表现上来说,仍然是设备文件与驱动的关系。
作者: lelee007    时间: 2011-04-02 14:27
哈哈,感觉你的思想就像是裸奔的思维,有了device,可以让driver更容易实现更完善的功能 ,而且更成为一个体系

如果没有device,那整个驱动系统就会很混乱,内核就不好维护了
作者: 奇门遁甲-lu    时间: 2011-04-04 13:36
不是所有驱动都能必须通过设备文件去访问。

比如网卡驱动,
用户态程序不可能通过直接读写网卡来发数据。
必须和协议栈联系起来。同时又有层次关系,比如是PCI上的网卡。
usb网卡。

tty设备页是这样。tty系统有很多工作,
如果都在tty 设备做这些工作,那么代码就很复杂了。
作者: myspace21    时间: 2011-04-07 11:21
总线、设备和驱动是驱动模型的三剑客,总线主要是抽象硬件层的总线互联,不论是在MPU内部还是外围链接;设备和驱动之间的互动主要是考虑了热插拔的机制
作者: myspace21    时间: 2011-04-07 11:24
linux的网络子系统单独拿出来建模,可见其对网络的重视程度
作者: ai616818    时间: 2012-03-28 12:32
全是没有回答问题的。。。。

楼主问的问题太多了。也都比较好。
我觉得,设备模式中才涉及device, 跟device一起的是对应的bus driver。请问cdev有bus吗?没有,那么还需要设备模型中的device吗?不需要。

个人理解。如果说的不对,请大家指正。谢谢!
作者: ai616818    时间: 2012-03-28 13:02
wgs13579 发表于 2011-03-29 14:38
按照我个人的理解 我觉得你的说法也不正确,我觉得只要使用到device结构的设备,比如PCI,BLOCK等,它 ...


PCI 也是属于总线类型的。但是cdev就没有总线。
我觉得五楼说的对。
作者: xole1111    时间: 2012-07-26 10:47
一直与楼主一样有这样的疑问,原来device还分为两类:总线类型与设备类型.

总线类型的device需要bus,device两个结构体.
设备类型的device就不需要.

不知道这样理解对不对??
作者: chxy85    时间: 2012-10-11 16:20
看到了大家的帖子,有种顿悟的赶脚,请原谅我把这个帖子顶上去了,不回帖不快啊~~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2