一、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详解相关推荐

  1. linux驱动-platform详解

    platform详解 作者:程姚根,华清远见嵌入式学院讲师. 一.platform设备模型 从Linux 2.6起引入了一套新的驱动管理和注册机制,platform_device和platform_d ...

  2. 详解Linux2.6内核中基于platform机制的驱动模型

    原文地址:详解Linux2.6内核中基于platform机制的驱动模型 作者:nacichan [摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了P ...

  3. flutter图片点击跳转_Flutter系列之Platform Channel使用详解

    PS:逐渐体会到关键少数原则的重要性,接下来就是付诸实践了,另外科创50ETF明天开始限额销售,可以适当关注或入手一点. 前面几篇文章介绍了 Navigator 组件.Flex 布局.图片加载.Wid ...

  4. Linux设备驱动模型之platform(平台)总线详解

    /********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /*********** ...

  5. spring boot 实战 / 可执行war启动参数详解

    概述   上一篇文章<spring boot 实战 / mvn spring-boot:run 参数详解>主要讲解了spring boot 项目基于maven插件启动过程中借助profil ...

  6. ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route

    前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...

  7. Android进阶笔记:Messenger源码详解

    Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...

  8. 15.linux-LCD层次分析(详解)

    如果我们的系统要用GUI(图形界面接口),这时LCD设备驱动程序就应该编写成frambuffer接口,而不是像之前那样只编写操作底层的LCD控制器接口. 什么是frambuffer设备? frambu ...

  9. Java源码详解六:ConcurrentHashMap源码分析--openjdk java 11源码

    文章目录 注释 类的继承与实现 数据的存储 构造函数 哈希 put get 扩容 本系列是Java详解,专栏地址:Java源码分析 ConcurrentHashMap 官方文档:ConcurrentH ...

最新文章

  1. python【数据结构与算法】Queue,LifoQueue,PriorityQueue
  2. Lync Server 2010的部署系列(三) lync批量导入用户联系人
  3. 企业计算机管理制度论文,082208计算机信息管理制度毕业论文.doc
  4. python如何下载库_python中如何下载库
  5. PHP中的CURL函数库
  6. 浅谈Time Elastic Band
  7. 为什么选择Bootstrap
  8. SpringBoot-文件在线预览解决方案-基于OpenOffice及jacob
  9. 封装SIP和SOIC有什么区别
  10. Aliddns插件使用:小白超详细图文教程
  11. 零基础学UI设计好学不?
  12. 华硕ac66php服务器,华硕路由RT-AC66U B1简单试用
  13. 【vue3】ref获取v-for循环渲染的元素
  14. Veracrypt和Cryptomator的使用方式对比
  15. python实现数组的全组合以及全排列
  16. 图片尺寸px怎么转换成厘米?在线图片尺寸换算工具怎么用?
  17. 股市顶尖高手超短秘诀
  18. 细谈八种架构设计模式及其优缺点概述
  19. 私有DNS服务器有什么好处
  20. Base64与Bitmap转换

热门文章

  1. 复数基础——复数的基本运算_2
  2. NOIP-2014-J2-T3
  3. WEB请求处理二:Nginx请求反向代理
  4. DBeaver执行.sql脚本报错:ERROR 1064 (42000) at line 1
  5. Mysql 脚本创建触发器报错 1064 42000
  6. 结对项目:SudokuGame
  7. XML常见的两种解析方式总结
  8. 一种测试FPS的方法
  9. C++:有限差分法求解随时间变化 平流方程 ut = - c * ux 在一个空间维度上,与 恒定速度,使用Lax方法作为时间导数(附完整源码)
  10. 关于可达性分析算法的概述