linux设备模型

     为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理、电源管理等,Linux内核提出了设备模型(也称作Driver Model)的概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口。驱动的开发,就简化为对内核所规定的数据结构的填充和实现。

      我们知道linux内核中常见的的总线有I2C总线,PCI总线,串口总线,SPI总线,PCI总线,CAN总线,单总线等,所以有些设备和驱动就可以挂在这些总线上,然后通过总线上的match进行设备和驱动的匹配。但是有的设备并不属于这些常见总线,所以我们引入了一种虚拟总线,也就是platform总线的概念,对应的设备叫做platform设备,对应的驱动叫做platform驱动。比如:外设led----设备----挂在总线上。但是我这个led不是iiic等范围内的总线,必须要挂载在总线上。那么linux系统有什么办法?

linux发明虚拟总线-----platform bus----platform Device------platform drviver

当然引入platform的概念,可以做的与板子相关的代码和驱动的代码分离,使得驱动有更好的可扩展性和跨平台性。

Linux设备模型架构----平台总线,平台设备,平台驱动

平台总线驱动设备模型

platform总线是一种虚拟的总线(涉及Soc上的资源,而这些资源的共同点:cpu可以直接获取其资源也就是可以直接通过读取他们的地址获取这些资源),相应的设备则为platform_device,而驱动则为platform_driver。Linux 2.6的设备驱动模型中,把I2C、RTC、LCD等都归纳为platform_device。

总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。

Linux2.6系统中定义了一个bus_type的实例platform_bus_type

http://blog.chinaunix.net/uid-27041925-id-3581985.html

http://www.wowotech.net/linux_kenrel/13.html

http://blog.csdn.net/lwj103862095/article/details/17957637

原文地址:https://www.cnblogs.com/zhaobinyouth/p/6160028.html