1. 概述
在Linux设备模型中,Bus(总线)是一类特殊的设备,它是连接处理器和其它设备之间的通道(channel)。为了方便设备模型的实现,内核规定,系统中的每个设备都要连接在一个Bus上,这个Bus可以是一个内部Bus、虚拟Bus或者Platform Bus。
内核通过struct bus_type结构,抽象Bus,它是在include/linux/device.h中定义的。本文会围绕该结构,描述Linux内核中Bus的功能,以及相关的实现逻辑。最后,会简单的介绍一些标准的Bus(如Platform),介绍它们的用途、它们的使用场景。
2. 功能说明
按照老传统,描述功能前,先介绍一下该模块的一些核心数据结构,对bus模块而言,核心数据结构就是struct bus_type,另外,还有一个sub system相关的结构,会一并说明。
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: