platform详解
一、platform设备模型
从Linux 2.6起引入了一套新的驱动管理和注册机制,platform_device和platform_driver,Linux中大部分的设备驱动都可以使用这套机制。platform是一条虚拟总线。设备用platform_device表示,驱动用platform_driver进行注册,linux platform driver机制和传统的device driver机制(通过driver_register进行注册)相比,一个明显的优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动中使用这些资源时通过platform device提供的标准结构进行申请并使用。这样提高了驱动和资源的独立性,并且具有较好的可移植性和安全性(这些标准接口是安全的)。
Platform机制本身使用并不复杂,由两部分组成:platform_device和platform_driver。通过platform机制开发底层驱动的大致流程为:
定义platform_deviece -->注册platform_device -->定义platform_driver --> 注册platform_driver。
二、platform的初始化
首先系统启动的时候会调用platform_bus_init来初始化这个虚拟总线,然后向虚拟总线注册即将挂载这条总线上的设备。Platform_bus_type部分是内核为为我们实现好的,我们只关系platform_device与platform_driver就行了。
三、s3c2410中总线设备的注册
总线也是一种设备,所以首先注册总线设备,然后注册总线。
把设备挂到总线上:
四、platform中几个重要的结构体
许多人一看到内核中的结构体就很晕,是的谁都晕,我们可以先关注自己想要知道的一部分,不知道的遇到了再去查。
五、platform_device与platform_driver匹配的过程
下面我们来看一下__driver_attach这个函数,在这个函数里面分别调driver_match_device,driver_probe_device函数。如果匹配成功就调用probe函数,否则返回。
匹配的过程中调用了bus的match函数
看一下platform_match函数
通过最后一行我们可以知道,通过设备的名字和驱动的名字进行匹配,如果匹配成功最后调用probe函数。
六、我们来看一个实例
platform_device.c
platform_driver.c
这个驱动只是个测试程序,我在platform_driver的probe函数里面点亮了fs2410板子上得LED灯,编译好后,insmod模块后就可以看到效果。
platform详解相关推荐
- linux驱动-platform详解
platform详解 作者:程姚根,华清远见嵌入式学院讲师. 一.platform设备模型 从Linux 2.6起引入了一套新的驱动管理和注册机制,platform_device和platform_d ...
- 详解Linux2.6内核中基于platform机制的驱动模型
原文地址:详解Linux2.6内核中基于platform机制的驱动模型 作者:nacichan [摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了P ...
- flutter图片点击跳转_Flutter系列之Platform Channel使用详解
PS:逐渐体会到关键少数原则的重要性,接下来就是付诸实践了,另外科创50ETF明天开始限额销售,可以适当关注或入手一点. 前面几篇文章介绍了 Navigator 组件.Flex 布局.图片加载.Wid ...
- Linux设备驱动模型之platform(平台)总线详解
/********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /*********** ...
- spring boot 实战 / 可执行war启动参数详解
概述 上一篇文章<spring boot 实战 / mvn spring-boot:run 参数详解>主要讲解了spring boot 项目基于maven插件启动过程中借助profil ...
- ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route
前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...
- Android进阶笔记:Messenger源码详解
Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...
- 15.linux-LCD层次分析(详解)
如果我们的系统要用GUI(图形界面接口),这时LCD设备驱动程序就应该编写成frambuffer接口,而不是像之前那样只编写操作底层的LCD控制器接口. 什么是frambuffer设备? frambu ...
- Java源码详解六:ConcurrentHashMap源码分析--openjdk java 11源码
文章目录 注释 类的继承与实现 数据的存储 构造函数 哈希 put get 扩容 本系列是Java详解,专栏地址:Java源码分析 ConcurrentHashMap 官方文档:ConcurrentH ...
最新文章
- python【数据结构与算法】Queue,LifoQueue,PriorityQueue
- Lync Server 2010的部署系列(三) lync批量导入用户联系人
- 企业计算机管理制度论文,082208计算机信息管理制度毕业论文.doc
- python如何下载库_python中如何下载库
- PHP中的CURL函数库
- 浅谈Time Elastic Band
- 为什么选择Bootstrap
- SpringBoot-文件在线预览解决方案-基于OpenOffice及jacob
- 封装SIP和SOIC有什么区别
- Aliddns插件使用:小白超详细图文教程
- 零基础学UI设计好学不?
- 华硕ac66php服务器,华硕路由RT-AC66U B1简单试用
- 【vue3】ref获取v-for循环渲染的元素
- Veracrypt和Cryptomator的使用方式对比
- python实现数组的全组合以及全排列
- 图片尺寸px怎么转换成厘米?在线图片尺寸换算工具怎么用?
- 股市顶尖高手超短秘诀
- 细谈八种架构设计模式及其优缺点概述
- 私有DNS服务器有什么好处
- Base64与Bitmap转换
热门文章
- 复数基础——复数的基本运算_2
- NOIP-2014-J2-T3
- WEB请求处理二:Nginx请求反向代理
- DBeaver执行.sql脚本报错:ERROR 1064 (42000) at line 1
- Mysql 脚本创建触发器报错 1064 42000
- 结对项目:SudokuGame
- XML常见的两种解析方式总结
- 一种测试FPS的方法
- C++:有限差分法求解随时间变化 平流方程 ut = - c * ux 在一个空间维度上,与 恒定速度,使用Lax方法作为时间导数(附完整源码)
- 关于可达性分析算法的概述