Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1715215
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: 嵌入式

2016-08-31 19:12:54

背景介绍:在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总线。

阅读(3288) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~