第四季-专题13-总线设备驱动模型

专题2-总线设备驱动模型

第1课-总线设备驱动模型

  1. 总线模型概述

随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的

要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux 2.6内核开始提供了全新的设备模型。

  1. 总线

(1)     描述结构

在Linux 内核中, 总线由bus_type 结构表示,

定义在<linux/device.h>

struct bus_type {

const char *name; /*总线名称*/

const char *name; /*总线名称*/

int (*match) (struct device *dev, struct

device_driver *drv); /*驱动与设备的匹配函数*/

………

}

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

当一个新设备或者新驱动被添加到这个总线时,该函数被调用。用于判断指定的驱动程序是否能处理指定的设备。若可以,则返回非零。

(2)     注册

总线的注册使用如下函数bus_register(struct bus_type *bus)若成功,新的总线将被添加进系统,并可在/sys/bus 下看到相应的目录。总线的注销使用:

void bus_unregister(struct bus_type *bus)

(3)     注销

  1. 驱动

(1)     描述结构

在Linux内核中, 驱动由device_driver结构表示。

struct device_driver {

{

const char *name; /*驱动名称*/

const char *name; /*驱动名称*/

struct bus_type *bus; /*驱动程序所在的总线*/

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

………

}

(2)     注册

驱动的注册使用如下函数

int driver_register(struct device_driver *drv)

驱动的注销使用:

void driver_unregister(struct device_driver *drv)

(3)     注销

  1. 设备

1. 描述结构

在Linux内核中, 设备由struct device结构表示。

struct device {

{

const char *init_name; /*设备的名字*/

const char *init_name; /*设备的名字*/

struct bus_type *bus; /*设备所在的总线*/

………

}

2. 驱动注册与注销

设备的注册使用如下函数:int device_register(struct device *dev)

设备的注销使用:void device_unregister(struct device *dev)

在总线上挂载设备

第2课-平台设备驱动设计

  1. 平台总线概述

平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这总线的模型对设备与驱动进行了管理,这样提高了程序的可移植性。

通过平台总线机制开发设备驱动的流程如图。

  1. 平台设备

平台设备使用struct platform_device来描述:

struct platform_device {

const char *name; /*设备名*/

int id; /*设备编号,配合设备名使用*/

struct device dev;

u32 num_resources;

struct resource *resource; /*设备资源*/

}

struct resource {

resource_size_t start;

resource_size_t end;

const char *name;

unsigned long flags; /*资源的类型*/

unsigned long flags; /*资源的类型*/

struct resource *parent, *sibling, *child;

};

注册平台设备,使用函数:

int platform_device_register(struct platform_device *pdev)

完成按键的注册

  1. 平台驱动

平台驱动使用struct platform_driver 描述:

struct platform_driver {

int (*probe)(struct platform_device *);

int (*remove)(struct platform_device *);

int (*struct platform_device *);

……

}

平台驱动注册使用函数:

int platform_driver_register(struct platform_driver *)

将按键驱动修改我平台驱动模型

原文地址:https://www.cnblogs.com/free-1122/p/11452262.html

时间: 2024-10-22 03:50:46

第四季-专题13-总线设备驱动模型的相关文章

20150225 IMX257 总线设备驱动模型编程之总线篇

20150225 IMX257 总线设备驱动模型编程之总线篇 2015-02-25 19:40 李海沿 从现在开始,我们开始来实现 总线-设备-驱动模型中的总线.. 我们这个程序的目标是在 sysfs文件系统的/sys/bus/ 目录下面建立一个文件夹. 一.总线介绍 1. 总线数据结构bus_type struct bus_type 结构体的定义如下: struct bus_type { const char *name; --总线名 struct bus_attribute *bus_att

16.总线设备驱动模型学习

总线设备驱动模型学习 一.总线概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求.为适应这种形势的需要,从Linux 2.6内核开始提供了全新的设备模型. 总线:创建一条总线,跟按键一样,首先是描述总线结构,接着是注册总线,注销总线.总线设备,例如usb总线,上面会有很多类型的usb的驱动,例如鼠标.键盘.....等,当我们把之一的usb插上的时候,usb总线会把每个驱动遍历一遍,找到相应的驱动程序执行. 1.1总线描述

20150226 IMX257 总线设备驱动模型编程之平台总线设备platform

20150226 IMX257 总线设备驱动模型编程之平台总线设备platform 2015-02-26 李海沿 前面我们实现了总线设备驱动模型,下面我们来了解一下平台总线,平台设备驱动 分为平台设备和平台驱动两种,和前面所说的设备驱动差不多 platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver.Linux 2.6的设备驱动模型中,把I2C.RTC.LCD等都归纳为platform_device. 一.平台设备介绍 1. p

20150226 IMX257 总线设备驱动模型编程之设备篇

20150226 IMX257 总线设备驱动模型编程之设备篇 2015-02-26 李海沿 前面我们呢实现了总线-设备-驱动模型中的总线,自然,我们的目标就是在我们建立的总线下面创建一个设备. http://www.cnblogs.com/lihaiyan/p/4301072.html 一.程序分析 1. 包含总线 既然我们的设备在总线上,自然我们既要包含总线了 如图所示,使用外部声明将我们的总线的结构体包含进来 2. 定义设备结构体 父目录为 my_bus 3. 定义属性文件结构体 属性文件结

20150226 IMX257 总线设备驱动模型编程之驱动篇

20150226 IMX257 总线设备驱动模型编程之驱动篇 2015-02-26 11:42 李海沿 前面我们已经实现了 总线和设备 的驱动程序,接下来我们的任务就是 实现 驱动 了 地址:http://www.cnblogs.com/lihaiyan/p/4301079.html http://www.cnblogs.com/lihaiyan/p/4301072.html 在实现驱动程序之前,我们来想两个问题: 一.问题分析 1.什么时候驱动程序会在总线上找它可以处理的设备? 在driver

linux总线设备驱动模型

本篇文章通过平台总线设备模型为例,讲解总线设备驱动模型: platform_device_register的作用: 1.把device放入bus的device链表 2.从bus的driver链表中取出每一个driver,用bus的match函数判断driver能否支持这个device 3.若可以支持,调用driver的probe函数 platform_driver_register的作用: 1.将driver放入bus的driver链表 2.从bus的device链表中取出每一个device,用

8.总线设备驱动模型

总线设备驱动模型 总线:创建一条总线,跟我们前面的按键一样,首先是描述总线结构,接着是注册总线,注销总线.总线设备,例如usb总线,上面会有很多类型的usb的驱动,例如鼠标.键盘.....等,当我们把之一的usb插上的时候,usb总线会把每个驱动遍历一遍,找到相应的驱动程序执行. 接下来用bus.c创建一条总线. #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #in

linux嵌入式驱动-总线设备驱动模型

一个农夫想要合理的理财,他给你未来N天的每天支出(1<=N<=100000), 并计划把这N天分成M个部分(1 <=M <=N)(每个部分的天数是连续的),要求求出这些部分里花费最和最大值最小,输出这个最大值. 100 400 300 100 500 101 400 可以这么划分(100 400) (300 100) (500) (101)(400) ,五个分组里最大值是500,这个划是最佳的了,因为在其他划分里肯定有部分是大于500的,如(100) (400 300) (100

总线设备驱动模型【转】

本文转载自:http://blog.csdn.net/coding__madman/article/details/51428400 总线驱动设备模型: 1. 总线设备驱动模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求,为适应这宗形势的需求,从linux2.6内核开始提供了全新的设备模型 2. 总线 2.1 描述结构 2.2 注册 2.3 注销 void  bus_unregister(struct  bus_ty