platform_device
struct platform_device中包含三个重要属性:const char *name、struct device dev、struct resource *resource。device结构体包含bus_type类型结构体,bus_type结构体实现match()函数,用于匹配设备和驱动。resource结构体包含 start、end和flags,start、end表示设备资源起始值和结束值,flags为资源类型,flags为IORESOURCE_MEM时,start、end表示platform_device的起始和结束地址。驱动中使用platform_get_resource()获取设备资源。
platform_device模板
static struct platform_device dm9000_device = {
name = "dm9000",
id = 0,
num_resources = ARRAY_SIZE(dm9000_resource),
resource = dm9000_resource,
dev = {
platform_data = &dm9000_platdata,
}
};
platform_driver
platform_driver结构体包含probe、remove函数指针、struct device_driver、platform_device_id *id_table几个重要结构。device_driver结构体中也同样包含bus_type结构体,每当向内核中添加设备和驱动时都会调用bus_type中的match函数,通过四种方式:id_table、acpi、of_device_id、name来匹配设备和驱动,匹配成功后驱动的probe函数执行
总线
总线为bus_type类型结构体,通过bus_register(),bus_unregister()实现总线的注册,并通过实现match函数完成设备和驱动的匹配。BUS_ATTR宏可将自定义文件导出到sys/bus目录下,在cat该文件时,可执行show回调函数