Linux 总线、设备、驱动模型 与 设备树
1.总线、设备、驱动模型
本着高内聚、低耦合的原则,Linux 把设备驱动模型分为了总线、设备和驱动三个实体,这三个实体在内核里的职责分别如下:

设备和驱动向总线进行注册,总线负责把设备和对应的驱动绑定起来。
驱动通过总线 API 接口 platform_get_resource() 取得板级设备信息,这样驱动和设备之间就实现了高内聚、低耦合的设计,
无论设备怎么换,驱动都可以岿然不动。
代码架构如下图所示:

2、设备树
引入设备树之前,关于硬件设备的描述信息一般放在一个个类似 arch/xxx/mach-xxx/board-xxx.c 的文件中,
这些代码中除了描述的设备信息不同,其代码逻辑都是一样的。我们有理由,把这些设备端的信息,用一个非 C 的脚本语言来描述,这个脚本文件,就是 Device Tree(设备树)。
设备树是一种 dts 文件,它用简单的语法描述每个板子上的所有设备,以及这些设备的连接信息。
设备树文件存储在目录 arch/xxx/boot/dts 中,每一个 board 对应一个 dts 文件。
引入设备树之后,大量重复的 C 代码(arch/xxx/mach-xxx/board-xxx.c)被去除——驱动的归于驱动 C 代码,设备的归于设备树脚本文件。
arch/arm/mach-xxx/board-a.c 这样的文件永远地进入了历史的故纸堆,换个板子,只要换个 Device Tree 文件就好。
代码架构如下图所示:

Linux 总线、设备、驱动模型 与 设备树的更多相关文章
- Linux设备驱动模型简述(源码剖析)
1. Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写.Linux设备驱动模型包含设备(device).总线(bus).类(class)和 ...
- Linux设备驱动模型底层架构及组织方式
1.什么是设备驱动模型? 设备驱动模型,说实话这个概念真的不好解释,他是一个比较抽象的概念,我在网上也是没有找到关于设备驱动模型的一个定义,那么今天就我所学.所了解 到的,我对设备驱动模型的一个理解: ...
- Linux的总线设备驱动模型
裸机编写驱动比较自由,按照手册实现其功能即可,每个人写出来都有很大不同: 而Linux中还需要按照Linux的驱动模型来编写,也就是需要按照"模板"来写,写出来的驱动就比较统一. ...
- Linux中总线设备驱动模型及平台设备驱动实例
本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方 ...
- Linux设备驱动模型之platform(平台)总线详解
/********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /*********** ...
- Linux学习 : 总线-设备-驱动模型
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver.Linux 2.6的设备驱动模型中,把I2C.RTC.LCD等都归纳为pl ...
- 探究linux设备驱动模型之——platform虚拟总线(一)
说在前面的话 : 设备驱动模型系列的文章主要依据的内核版本是2.6.32的,因为我装的Linux系统差不多就是这个版本的(实际上我用的fedora 14的内核版本是2.6.35.13的.) ...
- linux设备驱动模型之Kobject、kobj_type、kset【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74838165 版权声明:本文为博主原创文章,转载请注明http://blog.c ...
- Linux与Windows的设备驱动模型对比
Linux与Windows的设备驱动模型对比 名词缩写: API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Bi ...
随机推荐
- Deloyment Descriptor web.xml
Deployment Descriptor部署描述符: - 部署描述符是要部署到Web容器或EJB容器的Web应用程序或EJB应用程序的配置文件. - 部署描述符应包含EJB应用程序中所有企业bean ...
- javascript 创建节点和新增节点
createElement(tabName) 创建一个为tagName的新元素节点 ANode.appendChild(BNode)把B节点追加至A节点的末尾 insertBefore(ANode,B ...
- c# 获取 bios 序列号
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.M ...
- 超详细SQLMap使用攻略及技巧分享
sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限.它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数 ...
- 测试CentOS-7-x86_64-Minimal-1708.iso这种光盘安装效果
在dvd1光盘安装选择mininal时有292个包 [root@localhost ~]# rpm -qa|wc -l 292 [root@localhost ~]# 测试下使用mininal的iso ...
- 密码疑云 (3)——详解RSA的加密与解密
上一篇文章介绍了RSA涉及的数学知识,本章将应用这些知识详解RSA的加密与解密. RSA算法的密钥生成过程 密钥的生成是RSA算法的核心,它的密钥对生成过程如下: 1. 选择两个不相等的大素数p和q, ...
- 关于jeesite的陷阱需要注意
jeesite,其框架主要为: 后端 核心框架:Spring Framework 4.0 安全框架:Apache Shiro 1.2 视图框架:Spring MVC 4.0 服务端验证:Hiberna ...
- sql 用过记住
1 递归查询一个节点下的所有子节点 包括该节点 connect by h.parent_menu_id= prior h.menu_idstart with h.menu_id='当前节点' h.pa ...
- C/C++常见错误
1.段错误 段错误:指的是访问了不可访问的内容,内存要么是不存在的,要么是受到系统保护的. 如:1.释放了不存在的内存(堆内存) ; free a; 2.代码被重复定义了 往往是由于头文件被重复定义了 ...
- 关于使用colorbox加载html页面的一些问题
ColorBox是一个基于jQuery 1.3 的轻量级,自定义灯箱插件,功能非常强大,支持图片,图片组,ajax,inline和iframed内容,灯箱样式完全由用户控制,可自定义CSS样 式,不需 ...