最近想到一个问题,linux为什么要采用platform总线模型来管理设备。要想搞清楚这个问题就要搞清楚在使用platform总线之前是怎样来管理设备的,于是在网上下了2.5版本的内核,阅读到了设备初始化的最底层才发现它注册一个设备就直接使用register_chrdev来完成,并没有类似platform层次功能的东西,那么为什么最终又决定添加platform总线啦,最终在<深入linux内核-P525>当中找到了答案,这段话是这样描述的:
Linux内核的早期版本为设备驱动程序的开发者提供微不足道的基本功能:分配动态内存,保留I/O地址范围或中断请求(IRQ),激活一个中断服务例程来响应设备的中断。事实上,在更老的硬件设备上编程棘手困难重重,还有即使两种不同的硬件设备连在同一条总线上,但二者也很少有共同点。因此,试图为这种舌尖设备的驱动程序开发者提供一种统一的模型是难以做到的。
现在的情形大不一样。诸如PCI这样的总线类型对硬件设备的内部设计提出类强烈的要求,因此,新的硬件设备即使类型不同但也有相似的功能。对这种设备的驱动程序应当特别关注:
1. 电源管理(控制设备电源线上不同的电压级别)
2. 即插即用(配置设备时透明的资源分配)
3. 热插拔 (系统运行时支持设备的插入和移走)
系统中所有的舌尖设备由内核全权负责电源管理。例如,在以电池供电的计算机进入“待机”状态是,内核应但立即强制每个硬件设备(硬盘、显卡、声卡、网卡、总线控制器等等)处于低功率状态。因此,每个能够响应“待机”状态的设备驱动程序必须包含一个回调函数,它能够使得硬件处于低功率状态。而且,硬件设备必须按准确的顺序进入“待机”状态,否则一些设备可能处于错误的电源状态。例如,内核必须将硬盘处于“待机”状态,然后才是他们的磁盘控制器,因为若按照相反的顺序执行,磁盘控制器就不能向磁盘发送命令。
为了使用这些操作,Linux2.6提供了一些数据结构和辅助函数,他们为系统中所有的总线,设备以及设备驱动程序提供了统一的视图:这个框架被称为设备驱动程序模型。
从这段话当中可以总结出两个关键词,一是相似性:现在大量的设备拥有相似的操作,这可以用统一驱动模型来完成;一是统一的视图,统一的试图可以提供拓扑结构,这种结构能够保证对设备操作顺序的正确性,才能有效的避免先关闭磁盘控制器然后再关闭磁盘这种错误顺序。
阅读(1025) | 评论(0) | 转发(0) |