总线/设备/驱动模型

设备元素:

总线, 驱动, 设备

 

总线:处理器和设备之间的通道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟“platform”总线(定时器,看门狗并没有直接相连)。在linux设备模型中,总线由bus_type结构表示,定义在

 

总线的注册使用:

bus_register(struct bus_type *bus);

若成功,新的总线将被添加进系统,并可以在sysfs的/sys/bus下面看到。

总线的删除:

void bus_unregister(struct bus_type *bus);

 

总线的方法:

int (*match)(struct device *dev, struct device_driver *drv);

当一个新设备或者驱动被添加到这个总线的时候,调用该方法。用于半段指定的驱动程序系否能处理指定的设备。如果可以,则返回非零值。

 

int (*uevent)(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size);

在为用户空间产生热插拔事件(目录变化)之前,这个方法允许总线添加环境变量。

 

总线属性:

struct bus_attribute{

   struct attribute attr;

   ssize_t (*show)(struct bus_type *, char *buf);

   ssize_t (*store)(stuct bus_type *, const char *buf, size_t count);

}

 

int bus_create_file(struct bus_type *bus, struct bus_attribute *attr);

添加属性文件

void bus_remove_file(struct bus_type *bus, struct bus_attribute *attr);

删>除属性文件

 

 

设备:

用struct device来描述。

 

设备注册:

int device_register(struct device *dev);

注册设备

 

voi device_unregister(struct device *dev);

注销设备

总线也是设备,也必须按照设备来注册

 

设备属性:

struct device_attribute{

   struct attribute attr;

   ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf);

   ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count);

}

 

int device_create_file(struct device *device, struct device_attribute *entry);

创建属性

 

void device_remove_file(struct device *dev, struct device_attribute *attr);

删除属性

 

 

 

驱动:

用struct device_driver来描述

 

注册驱动:

int driver_register(struct device_driver *drv);

注册驱动

void driver_unregister(struct device_driver *drv);

注销驱动

 

驱动属性:

struct driver_attribute{

    struct attribute attr;

   ssize_t (*show)(struct device_driver *drv,char *buf);

   ssize_t (*store)(struct device_driver *drv, const char *buf, size_t count);

}

 

int driver_create_file(struct device_driver *drv,struct driver_attribute *attr);

int driver_remove_file(struct device_driver *drv,struct driver_attribute *attr);

驱动方法:

int(*probe)(struct device *dev);

当驱动找到与之匹配的设备的时候,会被调用。

 

你可能感兴趣的:(Linux,study)