设备,驱动,总线的结构

来源:互联网 发布:淘宝运营助理面试技巧 编辑:程序博客网 时间:2024/05/20 21:23
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;s

int (*match)(struct device *dev,struct device_driver *drv);
int (*uevent)(struct device *dev,struct kobj_uevent_env *env);
int (*remove)(struct device *dev);
void (*shutdown)(struct device *dev);

int(*online) (struct device *dev);
int(*offline)(struct device *dev);

const struct dev_pm_ops *pm;

struct iommu_ops *iomm_ops;

 struct subsys_private *p;
 struct lock_class_key lock_key;
};


struct device_type{
const char *name;
struct bus_type*bus;

struct module *owner;
const char *mod_name;

bool suppress_bind_attrs;

const struct of_device_id*of_match_table;
const struct acpi_device_id*acpi_match_table;

int  (*probe) (struct device *dev);
int  (*remove)(struct device *dev);
void (*shutdown)(struct device *dev);
int  (*suspend)(struct device *dev,pm_message_t state);
int  (*resume)(struct device *dev);
const struct attribute_group **groups;

const struct dev_pm_ops *pm;
struct driver_private *p;
};


struct device{
struct device *parent;

struct device_private*p;

struct kobject kobj;
const char *init name;
const struct device_type *type;

struct mutex mutex;

struct bus_type*bus;/*type of bus device is on*/
struct device_driver *driver;

void *platform_data;
struct dev_pm infopower;
struct dev_pm_domain *pm_domain;

#ifdef CONFIG_PINCTRL
struct dev_pin_info *pins;s
#endif
#ifdef CONFIG_NUMA
int numa_node;
#endif
u64 *dma_mask;
u64 coherent_dma_mask;
struct device_dma_parameters *dma_parms;s

struct list_head  dma_pools;

struct dma_coherent_mem*dma_mem;

#ifdef
struct cma *cma_area;
#endif

/*arch specific addition*/

struct dev_archdataarchdata;

struct device_node *of_node;

struct device_node *of_node;
struct acpi_dev_node *acpi_node;s

dev_t devt;
u32 id;

spinlock_t devers_lock;
struct list_head devers_head;

struct klist_nodeknode_class;
struct class *class;
const struct attribute_group **groups;

void (*release)(struct device *dev);
struct iommu_group *iommu_group;

boo offline_disabled:1
boo offline:1;

};
device_drivers和device分别表示 驱动和设备,而这两者都必须依赖于一种总线。因此都包含struct bus_type指针。
设备和驱动在内核当中是分开注册的,bus_type的match()成员函数将两者捆绑在一起。配对成功,xxx_driver的probe()
就会被执行。总线,驱动和设备最终都可以认为是kobject的派生类。一个kobject对应sysfs中的一个驱动。


今天更显到这里,爱你,YZ.
0 0
原创粉丝点击