背景介绍:在gpio、uart、i2c、spi等驱动及应用程序开发中,不可避免的会涉及到platform总线,所以本文对platform做最精辟的介绍。
1 platform bus是从Linux 2.6 kernel起,在Linux设备模型中引入的一个虚拟总线,设备用platform_device表示,驱动用platform_driver表示。相比usb bus、pci bus而言platform更加简洁,其“主要用于”描述集成在soc内部的外围设备,如gpio控制器、uart控制器、i2c控制器、spi控制器、lcd控制器、camera控制器等等,它们有一个共同的特点是,都可以从CPU总线直接寻址,即它们的寄存器可以通过对应地址来读取。
platform bus的原文介绍在kernel.sdk/Documentation/driver-model/platform.txt
2 为什么会提出platform bus呢?在嵌入式系统中有这样一类设备,它们直接和CPU相连接,CPU可以通过直接寻址访问它们。这种连接方式,并不属于传统意义上的总线连接,但设备模型应该具备普适性,因此Linux就虚构了一条platform bus,供这些设备挂靠。显然,这样做的好处是,实现了此类设备和驱动的分离,增强设备驱动的可移植性。
3 Linux设备模型:设备驱动模型中,主要包含总线,设备和驱动三个实体,总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动;反之,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。根据这个模型的需求,一个现实的Linux设备和驱动通常都需要挂接在一种总线上,否则谁来管他们的匹配啊,注册驱动和注册设备都是由不同 API来完成的。对于本身依附于SPI、I2C、PCI、USB等的外部设备而言,这自然不是问题,但是在嵌入式系统里面,Controller系统中集成的外设控制器,挂载在内存空间的外设确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线称为platform总线。
阅读(3364) | 评论(0) | 转发(0) |