设备,驱动,总线的结构

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 info power;
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_archdata archdata;

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_node knode_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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值