Linux
设备模型?/p>
Bus
1.
概述
?/p>
Linux
设备模型中,
Bus
(总线)是一类特殊的设备,它是连接处理器和其它设备之?/p>
的通道?/p>
channel
?/p>
。为了方便设备模型的实现,内核规定,系统中的每个设备都要连接?/p>
一?/p>
Bus
上,这个
Bus
可以是一个内?/p>
Bus
、虚?/p>
Bus
或?/p>
Platform Bus
?/p>
内核通过
struct bus_type
结构,抽?/p>
Bus
,它是在
include/linux/device.h
中定义的。本文会
围绕该结构,描述
Linux
内核?/p>
Bus
的功能,以及相关的实现逻辑。最后,会简单的介绍
一些标准的
Bus
(如
Platform
?/p>
,介绍它们的用途、它们的使用场景?/p>
2.
功能说明
按照老传统,描述功能前,先介绍一下该模块的一些核心数据结构,?/p>
bus
模块而言,核
心数据结构就?/p>
struct bus_type
,另外,还有一?/p>
sub system
相关的结构,会一并说明?/p>
2.1 struct bus_type
1: /* inlcude/linux/device.h, line 93 */
2: struct bus_type {
3:
const char *name;
4:
const char *dev_name;
5:
struct device *dev_root;
6:
struct bus_attribute *bus_attrs;
7:
struct device_attribute *dev_attrs;
8:
struct driver_attribute *drv_attrs;
9:
10: int (*match)(struct device *dev, struct device_driver *drv);
11: int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
12: int (*probe)(struct device *dev);
13: int (*remove)(struct device *dev);
14: void (*shutdown)(struct device *dev);
15:
16: int (*suspend)(struct device *dev, pm_message_t state);
17: int (*resume)(struct device *dev);