总线
总线控制器驱动程序功能:
- 必须定义总线特定的驱动程序结构和总线特定的设备结构
- 为探测到的每个物理设备分配总线特定的设备结构,并负责初始化设备的bus和parent字段,向LDM内核注册设备
总线管理的列表: - 添加到总线的设备列表
- 注册到总线的驱动程序列表
设备
cpp
struct device {
struct device *parent;
struct kobject kobj;
const struct device_type *type;
struct bus_type *bus;
struct device_driver *driver;
void *platform_data;
void *driver_data;
struct device_node *of_node;
struct class *class;
const struct attribute_group **groups;
void (*release)(struct device *dev);
};
- *parent:代表设备的父设备,用于构建设备树层次结构
- *bus:代表设备所在总线。总线驱动程序必须配置该字段
- *type:标识设备类型
- kobj:句柄引用计数和设备模型支持中的kobject
- *of_node:指向与设备相关的OF节点的指针
- platform_data:指向设备特有的平台数据的指针,通常设备配置期间在开发板特有的文件中声明
- driver_data:指向驱动程序私有数据的指针
- class:指向设备所属类的指针
- *group:指向struct attribute_group列表的指针,用作设备的默认属性
- release:设备引用计数达到零时调用的回调。总线负责设置这个字段,
kobject结构
cpp
struct kobject {
const char *name;
struct list_head entry;
struct kobject *parent;
struct kset *kset;
struct kobj_type *ktype;
struct sysfs_dirent *sd;
struct kref kref;
};
- name:指向这个kobject的名称。使用kobject_set_name(struct kobject * kobj, const char * name)函数可以修改它
- parent:指向此kobject父项的指针
- sd:指向struct sysfs_dirent结构
- kref:提供kobject上的引用计数
- ktype:描述该对象,kset说明这个对象属于哪组对象