1.platform平台总线简介
-> 相对于usb、pci、i2c等物理总线来说,platform总线是虚拟的、抽象出来的。
-> CPU与外部通信的2种方式:地址总线式连接和专用接口式连接。平台总线对应地址总线式连接设备,也就是SoC内部集成的各种内部外设。
-> platform工作体系都定义在drivers/base/platform.c中。
-> 两个结构体:platform_device和platform_driver。
2.platform_device结构体
struct platform_device {
const char * name; // 平台总线下设备的名字
int id;
struct device dev; // 所有设备通用的属性部分
u32 num_resources; // 设备使用到的resource的个数
struct resource * resource; // 设备使用到的资源数组的首地址
const struct platform_device_id *id_entry; // 设备ID表
/* arch specific additions */
struct pdev_archdata archdata; // 自留地,用来提供扩展性的
};
3.platform_driver
struct platform_driver {
int (*probe)(struct platform_device *); // 驱动探测函数
int (*remove)(struct platform_device *); // 去掉一个设备
void (*shutdown)(struct platform_device *); // 关闭一个设备
int (*suspend)(struct platform_device *, pm_message_t state); //电源管理支持的挂起
int (*resume)(struct platform_device *); //挂起对应的恢复
struct device_driver driver; // 所有设备共用的一些属性
const struct platform_device_id *id_table; // 设备ID表
};
4.platform平台总线工作原理
-> 系统启动时在bus系统中注册platform。
-> 内核移植的人负责提供platform_device。
-> 写驱动的人负责提供platform_driver。