第四季-专题13-总线设备驱动模型
专题2-总线设备驱动模型
第1课-总线设备驱动模型
- 总线模型概述
随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的
要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux 2.6内核开始提供了全新的设备模型。
- 总线
(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) 描述结构
在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. 描述结构
在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课-平台设备驱动设计
- 平台总线概述
平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这总线的模型对设备与驱动进行了管理,这样提高了程序的可移植性。
通过平台总线机制开发设备驱动的流程如图。
- 平台设备
平台设备使用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)
完成按键的注册
- 平台驱动
平台驱动使用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 驱动编写的3种方法 1.1 传统写法 1.2 总线设备驱动模型 1.3 设备树 2 在 Linux 中实现"分离":Bus/Dev/Drv 模型 2.1 模型 2.2 ...
- Linux SPI总线设备驱动模型详解
随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔.跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型.其实在linux2.4总线的概念就已经 ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型
文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...
- 【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 ...
- linux驱动开发篇(三)—— 总线设备驱动模型
linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...
- Linux驱动——驱动分离思想和总线设备驱动模型
驱动分离思想: 在传统的字符设备驱动思想中一个驱动程序对应一个硬件资源,在驱动入口函数中对资源进行配置,在file_operation中对各个硬件资源进行操作.这种思想使得内核中驱动代码变得庞大,为了 ...
- linux一个spi总线挂多个设备,Linux SPI总线设备驱动模型详解
随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔.跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型.其实在linux2.4总线的概念就已经 ...
- [国嵌攻略][125][总线设备驱动模型]
总线模型 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求越来越高,2.4内核已经难以满足这些需求.为了适应这种形势的需要,从Linux2.6内核开始提供了全新的设备驱动模 ...
- Linux总线驱动设计(1)-总线设备驱动模型
1.总线模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求.为适应这种形势的需要,从Linux 2.6内核开始提供了全新的 ...
- LED 模板驱动程序的改造:总线设备驱动模型
文章目录 1 概述 2 代码实现 3 代码分析 3.1 注意事项 1 概述 原来的框架: 要实现的框架: 2 代码实现 代码结构如下: board_A_led.c: #include <linu ...
最新文章
- MVC、MVP和MVVM的优缺点
- 使用netron对TensorFlow、Pytorch、Keras、PaddlePaddle、MXNet、Caffe、ONNX、UFF、TNN、ncnn、OpenVINO等模型的可视化
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
- apache 与 php-fpm 几种处理方式
- eclipse导出jar包
- linux运维有前途么,想去做linux运维,不知道有前途么?
- SAP Business Technology Platform 上 Roles,Roles collection 和 Scopes 的关联关系
- Zimbra高级应用之-双向证书认证(一)
- 巧妙使用信用卡N个小技巧
- 计算机房英语单词,主机房是什么意思
- 的注册表怎么才能删干净_油烟净化器怎么清洗才能清理干净呢?
- 湖南工程学院+c语言程序设计人事档案管理系统,程序设计人事档案管理系统.doc...
- oracle11gr2架构图,Oracle 11g R2 体系结构
- Oracle函数索引与普通索引
- PECL PEAR php扩展模块的简便安装方式
- 地图选择器怎么用_简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用....
- 从有限状态机(FSM)到行为树(Behavior Tree)(2)
- 冒泡排序 (Bubble Sort)
- Docker中LNMP分布式容器部署
- python安装配置教程win10_win10怎么安装python_win10安装python的图文步骤
热门文章
- 序列化和反序列化(JSON、protobuf)
- 缓冲区ByteBuffer简单说明
- Apache Flink 在斗鱼的应用与实践
- Flink 中的应用部署:当前状态与新应用模式
- ceph 存储 对比_对象存储cleversafe对比ceph有哪些优势?
- 中农考研计算机机考,开一个考研经验贴~2020中农考生,特别是农科大类考生看过来...
- php 字符串中 数组变量,PHP返回变量或数组的字符串表示:var_export()
- 算法知识点——(1)特征工程
- sparksql 保存点_Spark SQL笔记整理(三):加载保存功能与Spark SQL函数
- mnist tensorrt 运行_TensorRT学习笔记(三)