总线/设备/驱动模型

设备元素:

总线, 驱动, 设备

 

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

 

总线的注册使用:

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);

删>除属性文件

 <file://D:\資料\学习资料\linux相关\演示代码\bus\bus_basic.c>

 

设备:

用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);

删除属性

 <file://D:\資料\学习资料\linux相关\演示代码\bus\bus.c>

 <file://D:\資料\学习资料\linux相关\演示代码\bus\device.c>

 

驱动:

用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);

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

 <file://D:\資料\学习资料\linux相关\演示代码\bus\driver.c>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值