探究linux设备驱动模型之——platform虚拟总线(一)
说在前面的话 : 设备驱动模型系列的文章主要依据的内核版本是2.6.32的,因为我装的Linux系统差不多就是这个版本的(实际上我用的fedora 14的内核版本是2.6.35.13的。)
今天是今年的第256天,换句话来说,每年的第256天被定为——程序员节。本来我懒得再写东西的了,但是今天好歹是个节日,所以在这时写点东西是有些意义的。
linux设备驱动模型本身就极具复杂性,所以第一次接触这个东西的伙伴们千万不要惊呆、不要气馁。这方面的资料网上还是有很多的,但是真正写的明白的其实很少,因为很多文章的作者自己也是对这个东西理不妥的。所以我们只能在这成堆的资料里面耐心地去寻找正确的指路灯。
还有我打算开始写我的第四本小说了(前三本都太监了),小说的男主决定名为:林纳斯(linux)。仅以此名向我心爱的Linux致敬。这名字虽然听起来比较别扭,不过内涵还是很丰富的(呵呵)。书名初步定为《仙妖记事》。书名随便起的,看着顺眼就行。
言归正传。platform是内核的一个虚拟总线,它不像usb总线、PCI总线那样真实存在的,platform总线完全是虚拟出来的。我们先看看内核是如何定义这个虚拟总线的:
struct bus_type platform_bus_type = {
.name = "platform",
.dev_attrs = platform_dev_attrs,
.match = platform_match,
.uevent = platform_uevent,
.pm = &platform_dev_pm_ops,
};
bus_type是内核的总线结构体,内核所有的总线都是由这个结构体定义的。 我们只关注name和match这两个成员变量,其中name被赋值为"platform",毋庸置疑,这表示定义了一个名为“platform”的总线。match方法在总线、驱动、设备这三者中扮演着十分重要的角色。
在这里我简单说一下match方法何时被调用(理解这一点对于理解整个设备驱动模型起到一定的帮助)。当一个驱动挂接到该总线的时候,该总线的match方法被调用,在这里,platform总线的match方法被赋值为platform_match,也就是说platform_match将被调用,platform_match将会帮驱动找到匹配的设备。同样的,当一个设备挂接到该总线时,platform_match也会被调用,platform_match也会帮该设备找到匹配的驱动。用一句话来说就是,platform_match既帮驱动找对象,也帮设备找对象。当驱动和对象匹配上了,platform_match可是会收两家的媒婆钱,黑心的很。
那么对于platform总线来说,驱动和设备如何挂接到该总线上呢。platform总线分别提供了两个函数给驱动和设备使用。如下所示:
int platform_driver_register(struct platform_driver *drv)
int platform_device_register(struct platform_device *pdev)
很显然platform_driver_register 是给驱动使用的,platform_device_register 是给设备用的。
明天师妹们就来了,可是明天哥居然要去补考专业外语,坑爹啊。
最后再给全世界的程序员们说一句:程序员辛苦了,节日快乐!
待续....
探究linux设备驱动模型之——platform虚拟总线(一)的更多相关文章
- 探究linux设备驱动模型之——platform虚拟总线(三)最终章
这篇是最终章了,结束这一章后,对于platform平台总线驱动的使用方法应该是能够无压力掌握.但是这一章涉及的内容会比前面两章多一些. 我们会一步一步地来完善上一章的例子.完善的目的是能够在应用层去控 ...
- 探究linux设备驱动模型之——platform虚拟总线(二)
上回说到,platform_match是驱动和设备之间的媒人婆,那么platform_match是如何匹配驱动和设备的呢?platform总线定义的匹配条件很简单,主要就是查看驱动结构体和设备结构体的 ...
- Linux设备驱动模型之platform(平台)总线详解
/********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /*********** ...
- linux设备驱动模型之Kobject、kobj_type、kset【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74838165 版权声明:本文为博主原创文章,转载请注明http://blog.c ...
- Linux设备驱动模型简述(源码剖析)
1. Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写.Linux设备驱动模型包含设备(device).总线(bus).类(class)和 ...
- Linux设备驱动模型底层架构及组织方式
1.什么是设备驱动模型? 设备驱动模型,说实话这个概念真的不好解释,他是一个比较抽象的概念,我在网上也是没有找到关于设备驱动模型的一个定义,那么今天就我所学.所了解 到的,我对设备驱动模型的一个理解: ...
- LINUX设备驱动模型之class
转自 https://blog.csdn.net/qq_20678703/article/details/52754661 1.LINUX设备驱动模型中的bus.device.driver,.其中bu ...
- Linux 设备驱动模型
Linux系统将设备和驱动归一到设备驱动模型中了来管理 设备驱动程序功能: 1,对硬件设备初始化和释放 2,对设备进行管理,包括实参设置,以及提供对设备的统一操作接口 3,读取应用程序传递给设备文件的 ...
- linux设备驱动模型
尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备驱动模型的学习非常重要. Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统 ...
随机推荐
- 4.12 Spark环境更新
addJar方法是做什么的呢?它用于将Jar文件添加到Driver的RPC环境中. 通过addJar和addFile可以将各种任务执行所依赖的文件添加到Driver的RPC环境中, •小结 伴生对象是 ...
- Redis(四)持久化
本文转载自编程迷思,原文链接 深入学习Redis(2):持久化 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化.复制(及读写分离).哨 ...
- javaEE中错误提示 Exception starting filter BackServletFilter java.lang.ClassNotFoundException: tmall.filter.BackServletFilter提示这个错误啊
最近在学习javaEE的部署,不借助eclipse中的部署方式,而是通过修改server.xml文件的方式部署 添加Context路径 <Context path="/tm" ...
- 分布式架构学习-Consul集群配置
简介 之前公司用的是Consul进行服务发现以及服务管理,自己一直以来只是用一下,但是没有具体的深入,觉得学习不可以这样,所以稍微研究了一下. 网上有很多关于Consul的介绍和对比,我这里也不献丑了 ...
- 学习Java的知识体系路线(详细完整版,附图加目录)
将网上的Java学习路线图进行归纳囊括,方便以后学习时弥补自身所欠缺的知识点,也算是给自己一个明确的学习方向.至于第一阶段,即JavaSE的基础,这里不给出. 第二阶段 技术名称 技术内容 数据库技术 ...
- #leetcode刷题之路25- k个一组翻转链表
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表.k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 :给定这个链表:1- ...
- es6 入坑笔记(四)---异步处理
promise 用于js的异步处理 形式: 1.申明一个promise的对象 let p = new Promise(function(成功时的参数,失败时的参数){ if(....){ 成功时的参数 ...
- js动态获取浏览器或页面等容器的宽高
首先说一下js动态获取浏览器或页面等容器的宽高的方法大体有哪些: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHei ...
- CentOS6安装各种大数据软件 第一章:各个软件版本介绍
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- 09-if判断语句
https://www.liaoxuefeng.com/ 廖雪峰的官方网站 hm_01_判断年龄.py 1 #!/usr/bin/env python3 # coding=utf-8 def mai ...