首先我们要了解bus驱动框架是由三部分组成的:Device(硬件相关),Bus(中间媒介),Driver(软件)
为了实现高内聚,低耦合,解决重复代码过多,对整个驱动进行了分层。硬件相关的部分被抽象成Device部分,纯软件部分抽象成Driver部分,为了将这两部分匹配起来就创建了bus这一中间媒介。
接下来搭建一个基础的框架
(一)Bus的构建
1 先来看看bus中的bus_type结构体
struct bus_type {
const char *name;
const char *dev_name;
struct device *dev_root;
struct device_attribute *dev_attrs; /* use dev_groups instead */
const struct attribute_group **bus_groups;
const struct attribute_group **dev_groups;
const struct attribute_group **drv_groups;
int (*match)(struct device *dev, struct device_driver *drv);
int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
int (*probe)(struct device *dev);
int (*remove)(struct device *dev);
void (*shutdown)(struct device *dev);
int (*online)(struct device *dev);
int (*offline)(struct device *dev);
int (*suspend)(struct device *dev, pm_message_t state);
int (*resume)(struct device *dev);
const struct dev_pm_ops *pm;
struct iommu_ops *iommu_ops;
struct subsys_private *p;
struct lock_class_key lock_key;
};
里面含有非常多的成员,而在我们这个简单框架中要定义的成员只有以下两项
const char *name;//该bus总线的名字
int (*matc