专题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

第四季-专题13-总线设备驱动模型相关推荐

  1. 驱动进化之路:总线设备驱动模型

    文章目录 1 驱动编写的3种方法 1.1 传统写法 1.2 总线设备驱动模型 1.3 设备树 2 在 Linux 中实现"分离":Bus/Dev/Drv 模型 2.1 模型 2.2 ...

  2. Linux SPI总线设备驱动模型详解

    随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔.跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型.其实在linux2.4总线的概念就已经 ...

  3. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型

    文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...

  4. 【Bus】编写一个Demo虚拟的总线-设备-驱动模型

    文章目录 1. 前言 2. 总线驱动模型三要素 2.1 总线 2.2 设备 2.3 驱动 3. Demo Code 3.1 virt_bus_core.c 3.2 virt_device.c 3.3 ...

  5. linux驱动开发篇(三)—— 总线设备驱动模型

    linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...

  6. Linux驱动——驱动分离思想和总线设备驱动模型

    驱动分离思想: 在传统的字符设备驱动思想中一个驱动程序对应一个硬件资源,在驱动入口函数中对资源进行配置,在file_operation中对各个硬件资源进行操作.这种思想使得内核中驱动代码变得庞大,为了 ...

  7. linux一个spi总线挂多个设备,Linux SPI总线设备驱动模型详解

    随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔.跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型.其实在linux2.4总线的概念就已经 ...

  8. [国嵌攻略][125][总线设备驱动模型]

    总线模型 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求越来越高,2.4内核已经难以满足这些需求.为了适应这种形势的需要,从Linux2.6内核开始提供了全新的设备驱动模 ...

  9. Linux总线驱动设计(1)-总线设备驱动模型

    1.总线模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求.为适应这种形势的需要,从Linux 2.6内核开始提供了全新的 ...

  10. LED 模板驱动程序的改造:总线设备驱动模型

    文章目录 1 概述 2 代码实现 3 代码分析 3.1 注意事项 1 概述 原来的框架: 要实现的框架: 2 代码实现 代码结构如下: board_A_led.c: #include <linu ...

最新文章

  1. MVC、MVP和MVVM的优缺点
  2. 使用netron对TensorFlow、Pytorch、Keras、PaddlePaddle、MXNet、Caffe、ONNX、UFF、TNN、ncnn、OpenVINO等模型的可视化
  3. 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
  4. apache 与 php-fpm 几种处理方式
  5. eclipse导出jar包
  6. linux运维有前途么,想去做linux运维,不知道有前途么?
  7. SAP Business Technology Platform 上 Roles,Roles collection 和 Scopes 的关联关系
  8. Zimbra高级应用之-双向证书认证(一)
  9. 巧妙使用信用卡N个小技巧
  10. 计算机房英语单词,主机房是什么意思
  11. 的注册表怎么才能删干净_油烟净化器怎么清洗才能清理干净呢?
  12. 湖南工程学院+c语言程序设计人事档案管理系统,程序设计人事档案管理系统.doc...
  13. oracle11gr2架构图,Oracle 11g R2 体系结构
  14. Oracle函数索引与普通索引
  15. PECL PEAR php扩展模块的简便安装方式
  16. 地图选择器怎么用_简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用....
  17. 从有限状态机(FSM)到行为树(Behavior Tree)(2)
  18. 冒泡排序 (Bubble Sort)
  19. Docker中LNMP分布式容器部署
  20. python安装配置教程win10_win10怎么安装python_win10安装python的图文步骤

热门文章

  1. 序列化和反序列化(JSON、protobuf)
  2. 缓冲区ByteBuffer简单说明
  3. Apache Flink 在斗鱼的应用与实践
  4. Flink 中的应用部署:当前状态与新应用模式
  5. ceph 存储 对比_对象存储cleversafe对比ceph有哪些优势?
  6. 中农考研计算机机考,开一个考研经验贴~2020中农考生,特别是农科大类考生看过来...
  7. php 字符串中 数组变量,PHP返回变量或数组的字符串表示:var_export()
  8. 算法知识点——(1)特征工程
  9. sparksql 保存点_Spark SQL笔记整理(三):加载保存功能与Spark SQL函数
  10. mnist tensorrt 运行_TensorRT学习笔记(三)