从Linux2.6内核起,引入一套新的驱动管理和注册机制:platform_device 和 platform_driver 。Linux 中大部分的设备驱动,都可以使用这套机制,设备用 platform_device 表示;驱动用 platform_driver 进行注册。
Linux platform driver 机制和传统的device driver机制(即:通过 driver_register 函数进行注册)相比,一个十分明显的优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中用使用这些资源时,通过platform device提供的标准接口进行申请并使用。
platform 是一个虚拟的地址总线,相比 PCI、USB,它主要用于描述SOC上的片上资源。platform 所描述的资源有一个共同点:在CPU 的总线上直接取址。平台设备会分到一个名称(用在驱动绑定中)以及一系列诸如地址和中断请求号(IRQ)之类的资源。
platform 总线下驱动的开发步骤是:
1、 设备
需要实现的结构体是:platform_device 。
1)初始化 resource 结构变量
2)初始化 platform_device 结构变量
3)向系统注册设备:platform_device_register。
以上三步,必须在设备驱动加载前完成,即执行platform_driver_register()之前,原因是驱动注册时需要匹配内核中所有已注册的设备名。platform_driver_register()中添加device到内核最终还是调用的device_add函数。Platform_device_add和device_add最主要的区别是多了一步insert_resource(p, r),即将platform资源(resource)添加进内核,由内核统一管理。
2、驱动
驱动注册中,需要实现的结构体是:platform_driver 。
在驱动程序的初始化函数中,调用了platform_driver_register()注册 platform_driver 。需要注意的是:platform_driver 和 platform_device 中的 name 变量的值必须是相同的 。这样在 platform_driver_register() 注册时,会将当前注册的 platform_driver 中的 name 变量的值和已注册的所有 platform_device 中的 name 变量的值进行比较,只有找到具有相同名称的 platform_device 才能注册成功。当注册成功时,会调用 platform_driver 结构元素 probe 函数指针。
platform_driver_register()的注册过程:
1 platform_driver_register(&s3c2410fb_driver)
2 driver_register(&drv->driver)
3 bus_add_driver(drv)
4 driver_attach(drv)
5 bus_for_each_dev(drv->bus, NULL, drv, __driver_attach)
6 __driver_attach(struct device * dev, void * data)
7 driver_probe_device(drv, dev)
8 really_probe(dev, drv)
在really_probe()中:为设备指派管理该设备的驱动:dev->driver = drv, 调用probe()函数初始化设备:drv->probe(dev)
分享到:
相关推荐
在Linux操作系统中,Platform驱动是一种特殊的设备驱动程序,主要用于与SoC(System on Chip)相关的硬件交互。平台驱动是Linux内核中一个重要的组件,它为各种非标准接口的硬件设备提供支持,如处理器、GPIO、中断...
本文深入探讨了Linux中platform设备驱动的设计与实现,特别针对Linux 2.6版本进行了透彻的分析,强调了平台总线、平台设备和平台驱动在设备驱动模型中的作用和相互关系。 首先,Linux的设备驱动模型是围绕总线、...
本文将深入探讨“platform平台设备”的工作流程,解析关键函数,并结合“railroadzts”和“q”这两个概念,来进一步理解在Linux驱动开发中的应用。 首先,平台设备驱动涉及到的主要流程包括设备注册、设备探测、...
Platform驱动设计与应用是嵌入式Linux系统开发中的重要环节,它简化了非标准总线设备的驱动开发和管理。通过理解平台总线架构,可以更高效地开发和维护设备驱动,提升系统性能和稳定性。在实际项目中,开发者需要...
Platform 驱动在 Linux 内核中,用 platform_driver 结构体表示。该结构体定义了平台设备驱动注册函数和平台设备驱动注销函数。platform_driver 结构体定义在文件 include/linux/platform_device.h 中。 Platform ...
在Linux系统中,平台驱动(Platform Driver)是用于与特定硬件设备交互的一种内核模块,主要服务于嵌入式系统。平台驱动模型是Linux内核为了简化...理解并熟练掌握这一机制,对于Linux驱动程序的开发和维护至关重要。
平台驱动(Platform Driver)是Linux内核中一种特殊的设备驱动,主要用于处理SoC(System on Chip)系统中的各种片上外围设备。本资源提供的"Linux设备驱动+platform驱动框架示例代码"旨在帮助开发者理解和学习如何...
Linux驱动模型包括设备模型和总线模型。设备模型负责组织和管理所有设备,而总线模型则定义了设备如何与总线通信。平台总线是其中一种总线模型,它不依赖于传统的PCI、ISA等物理总线。 3. **平台驱动结构** 平台...
Linux驱动开发是操作系统核心与硬件设备之间的重要桥梁,它使得硬件功能得以在Linux系统中有效利用。本资源“Linux驱动开发中文版(超值)”提供了深入浅出的讲解,帮助开发者理解并掌握Linux驱动程序的编写技巧。...
标题和描述均提到了“Linux驱动修炼之道-platform”,这表明文章的主题聚焦于Linux平台驱动的开发,特别是关于如何理解和操作Linux内核中的platform子系统。平台(Platform)模型是Linux内核用于处理嵌入式系统中...
在Linux内核中注册驱动程序通常需要调用`platform_driver_register()`函数,它会将驱动添加到平台设备驱动列表中。同时,为了使驱动能够找到对应的设备,需要在设备树配置文件中声明这个设备。设备树是描述硬件结构...
Linux驱动程序开发是嵌入式系统和服务器领域中不可或缺的一部分,它涉及到操作系统内核与硬件设备之间的交互。《Linux驱动程序开发实例2》是一本专为想要深入理解Linux驱动编程的开发者编写的书籍,提供了丰富的实践...
本文将详细讲解Linux驱动程序中的platform总线及其相关概念。 平台总线(platform bus)主要服务于那些不依赖于如PCI、USB、I2C或SPI等传统物理总线的设备,例如SoC系统中集成的独立外设控制器,如I2C控制器、LCD...
Linux驱动修炼之道-platform.pdf Linux驱动修炼之道-LCD背光与gpio控制.pdf Linux驱动修炼之道-INPUT子系统(下).pdf Linux驱动修炼之道-INPUT子系统(上).pdf Linux驱动修炼之道-framebuffer(中).pdf ...
Linux驱动开发是操作系统与硬件设备之间的桥梁,对于深入理解Linux系统和进行系统级优化至关重要。本文将基于"Linux驱动开发入门"这一主题,为初学者...在实践中不断探索和积累,才能逐步深入理解Linux驱动开发的精髓。
在Linux操作系统中,平台驱动程序(Platform Driver)是一种特殊的设备驱动,主要负责与系统中的片上系统(SoC,...通过理解和利用这个模版,开发者可以更好地理解Linux驱动的工作机制,提升软件和硬件的协同效率。
根据源码分析整理的linux platfom driver与device driver的关系,对初学者有较大的帮助
平台(Platform)机制的驱动模型是Linux内核中处理设备驱动的一种方式,尤其在Linux 2.6版本之后被广泛采用。这种机制主要用于管理CPU的片上资源,如GPIO、I2C控制器、UART等,具有良好的可移植性。 1. **什么是...
在IT行业中,Linux驱动开发是嵌入式系统领域的一个重要组成部分。这个领域的专家们负责创建、维护和优化设备驱动程序,这些程序使得操作系统能够与硬件设备进行通信,从而发挥硬件的功能。"Linux驱动开发.zip"可能...