#1 platform设备驱动模型数据结构
一般总线驱动设备数据结构
驱动 总线 设备
device_driver bus_type device
一般总线驱动设备数据结构
驱动 总线 设备
platform_driver platform_bus_type platform_device
#2 platform总线注册
platform_bus_init
bus_register(&platform_bus_type);//注册之前要先构造platform总线数据结构,如下:

struct bus_type platform_bus_type = {.name      = "platform",.dev_groups = platform_dev_groups,.match       = platform_match,.uevent       = platform_uevent,.pm      = &platform_dev_pm_ops,
};

#3 platform驱动
数据结构如下:

struct platform_driver
{int (*probe)(struct platform_device *);int (*remove)(struct platform_device *);void (*shutdown)(struct platform_device *);int (*suspend)(struct platform_device *, pm_message_t state);int (*resume)(struct platform_device *);struct device_driver driver;const struct platform_device_id *id_table;bool prevent_deferred_probe;
};

使用platform驱动时需要向内核注册,流程如下:

platform_driver_register__platform_driver_register设置driver的probe为platform_drv_prob;driver_register

向内核注册驱动的时候,如果驱动和设备匹配成功,就会执行platform_drv_prob函数;
#4 platform设备
数据结构如下:

struct platform_device {const char   *name;int       id;bool     id_auto;struct device   dev;u32     num_resources;struct resource   *resource;const struct platform_device_id   *id_entry;char *driver_override; /* Driver name to force a match *//* MFD cell pointer */struct mfd_cell *mfd_cell;/* arch specific additions */struct pdev_archdata    archdata;};

总结:
1.无设备树时,此时需要驱动工程师编写设备注册文件,使用platform_device_register向内核注册设备;
2.有设备树时,修改设备树的设备节点即可,内核会解析设备会,并将设备树还原成设备;
当设备与platform的驱动匹配以后,就会执行platform_driver结构中的probe函数;
#5 platform匹配过程

platform_matchof_driver_match_device //使用设备树时acpi_driver_match_deviceplatform_match_id   //根据platform_driver->id_tablestrcmp(pdev->name, drv->name) //比较platform_device->name和platform_driver->name//无设备树时使用

匹配过程优先使用设备树方式,使用设备树时的匹配流程如下:

of_driver_match_deviceof_match_device(const struct of_device_id *matches,const struct device *dev)   //of_match_table保存了驱动支持的设备信息of_match_node__of_match_node__of_device_is_compatible__of_find_property(device, "compatible", NULL);//取出属性值

Linux驱动-platform设备驱动相关推荐

  1. Linux之Platform设备驱动

    目录 一.Linux 设备驱动分层和分离 1.设备驱动的分层思想 2.主机驱动和外设驱动分离思想 二.Platform 平台驱动模型 1.platform 设备 2.platform 驱动 3.pla ...

  2. Linux驱动——platform设备驱动实验

    文章目录 1. 驱动的分离和分层 1.1 驱动的分离 1.3 驱动的分层 2. 实验程序编写 2.1 leddevice.c编写 2.2 leddriver.c编写 3. 测试 4. 总结 1. 驱动 ...

  3. Linux 设备驱动开发 —— platform 设备驱动

    一.platform总线.设备与驱动         在Linux 2.6 的设备驱动模型中,关心总线.设备和驱动3个实体,总线将设备和驱动绑定.在系统每注册一个设备的时候,会寻找与之匹配的驱动:相反 ...

  4. Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用

    关与设备树的概念,我们在Exynos4412 内核移植(六)-- 设备树解析 里面已经学习过,下面看一下设备树在设备驱动开发中起到的作用 Device Tree是一种描述硬件的数据结构,设备树源(De ...

  5. Linux驱动之platform设备驱动

    当我们在一块开发板上写好了驱动,但换一块不同芯片的开发板,我们就需要重新写一个驱动.其中主要是硬件连接也就是接口发生了改变,而软件框架几乎不用通用的.所以为了更加方便地移植,能够仅修改很小的内容就达到 ...

  6. 嵌入式linux platform设备驱动

    对于linux这样一个成熟,庞大,复杂的操作系统,代码的重用性非常重要,否则的话会在linux内核中存在大量无意义的重复代码.尤其是驱动程序,因为驱动程序占用了 Linux内核代码量的大头,如果不对驱 ...

  7. Linux platform 设备驱动实验-基于正点原子IMX6ULL开发板

    我们以前的设备驱动都非常的简单,都是对IO进行最简单的读写操作.像I2C. SPI.LCD 这些复杂外设的驱动就不能这么去写了,Linux 系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的 ...

  8. linux设备驱动归纳总结(九):1.platform设备驱动

    http://blog.chinaunix.net/uid-25014876-id-111745.html 这一节可以理解是第八章的延伸,从这节开始介绍platform设备驱动. 一.什么是paltf ...

  9. Linux 设备驱动开发 —— platform设备驱动应用实例解析

    前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 -- platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platfor ...

最新文章

  1. php fread读行,如何使fread阻塞和读取直到结束?
  2. 使用Windbg解析dump文件
  3. python数据分析pandas_Python数据分析之 pandas汇总和计算描述统计
  4. 关于Ocelot 网关结合Consul实现服务转发的坑爹问题
  5. 平安人寿福利BUFF重磅推介 | 北京研发中心职位速递
  6. 查看Servlet 3.0的新增功能
  7. Android官方开发文档Training系列课程中文版:动画视图之场景创建
  8. Qt工作笔记-对qmake的认识【两篇转载结合】
  9. [专栏精选]UnityWebRequest详解
  10. ELK下Kibana的使用
  11. (转)嘉信理财再度全面降佣,它会否成为投资界的Amazon?
  12. <C语言>数据文件自动生成(多模块进阶)
  13. python爬取凤凰新闻_Python爬虫实践(9)--爬取凤凰网汽车资讯
  14. CAD的.net开发
  15. C语言——超市商品管理系统
  16. 可微信打印的共享服务器哪好,基于微信的图片打印分享平台
  17. 进化计算(七)——MOEA/D算法详解
  18. 刚入行的软件测试工程师如何自学软件测试?
  19. macOS免费串口工具coolTerm/Minicom/Comtool/Volt+(伏特加)/友善串口调试助手/screen/picocom
  20. 万维钢解读,从数学上解释为什么绝大多数投资者都会输给市场?最可能值,远远小于平均值...

热门文章

  1. 云计算、社交网络和移动互联网------转自月光博客
  2. 如何编写一个程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
  3. 幻数java题_java – ConcurrentModificationException的幻数
  4. 【杰神说说】物联大师2.0版本预告
  5. Flex Frameworks
  6. 对合成大西瓜修改图片的实践
  7. JavaScript中e.keycode详解
  8. 报错-vue.runtime.esm.js?2b0e:619 [Vue warn]: Unknown custom element: <el-dialog> - did you register th
  9. R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型、使用rms包的Predict函数计算指定连续变量在不同分组变量下和风险比HR值的关系、使用ggplot2可视化变量与风险值HR的关系
  10. JAVA算法(四平方和)