Linux设备模型探析:platform_device与平台驱动

需积分: 4 10 下载量 138 浏览量 更新于2024-11-22 收藏 214KB PDF 举报
"这篇文章除了探讨Linux设备模型中的设备部分,主要聚焦于Linux内核源码解析,特别是platform设备驱动模型。作者强调结合理论和内核代码阅读能更好地理解Linux设备模型,并以platform_bus_type为例,分析了平台设备(platform_device)的注册过程。文章以S3C2410RTC设备为实例,详细阐述了其在arch/arm/plat-s3c24xx/devs.c中的定义,并提到了相关的资源结构体,包括内存区域和中断资源。" 在Linux驱动模型中,设备驱动与硬件设备之间的交互通过设备模型来组织和管理。Linux设备模型为不同的硬件设备提供了一个统一的抽象层,使得内核可以独立于具体的硬件平台进行开发。"platform"模型是其中一种常见的设备模型,适用于系统级芯片(SoC)上的设备,如S3C2410。在这个模型中,platform_device代表硬件设备,而platform_driver则是操作这些设备的驱动程序。 文章中提到的`platform_device`和`platform_driver`通常与`platform_bus_type`关联,这是一个总线类型,用于连接SoC上的设备和驱动。`platform_device`的注册涉及向内核注册设备的信息,包括名称、资源(如I/O地址和中断)以及设备的ID。例如,在S3C2410RTC的案例中,设备的资源包括内存映射的RTC地址范围和两个中断(IRQ_RTC和IRQ_TICK)。 `struct resources`定义了设备的物理资源,如I/O地址和中断号,每个资源都有起始地址、结束地址和标志,如`IORESOURCE_MEM`表示内存资源,`IORESOURCE_IRQ`表示中断资源。`struct platform_device`则包含了设备的名称、ID和资源数组的引用。 在设备注册过程中,`platform_device`的实例会被添加到对应的`platform_bus`上,同时,`platform_driver`会通过匹配机制查找并连接到相应的`platform_device`。这个过程是通过内核的总线框架自动完成的,大大简化了驱动的编写和设备的管理。 通过阅读LDD3(Linux Device Drivers, Third Edition)第14章以及本文提供的平台设备驱动实例,读者可以深入了解Linux设备模型的工作原理,尤其是`platform_device`如何在内核中注册和操作。同时,文章中提供的图表可以辅助理解设备模型的层次结构和设备与驱动之间的关系。