Linux内核2.6.18 spi驱动深度解析

需积分: 9 3 下载量 167 浏览量 更新于2024-07-22 收藏 164KB DOC 举报
"该文主要探讨了SPI驱动的分析,特别是针对2.6.18内核中的SPI子系统,适合嵌入式初学者和爱好者。文中提到了两个与SPI驱动相关的底层程序,并重点关注了针对S3C2410处理器的SPI驱动 spi_s3c24xx.c 的分析。文章通过从驱动的探测函数开始,详细阐述了SPI驱动的初始化过程。" 在嵌入式系统中,SPI(Serial Peripheral Interface)是一种常见的串行通信协议,用于连接微控制器和其他外围设备。2.6.18内核引入了完整的SPI子系统,使得对SPI设备的管理更为系统化和模块化。本文将从硬件层面到软件层面,上下两方面来分析SPI驱动。 首先,driver/spi目录下的spi_s3c24xx.c和spi_s3c24xx_gpio.c是两个关键的驱动程序。前者是针对S3C24XX系列芯片的SPI接口实现,后者则允许通过GPIO口模拟SPI总线,提供灵活性。在S3C2410芯片中,存在两个SPI接口,即SPI0和SPI1,而本文主要关注的是spi_s3c24xx.c。 驱动程序的初始化始于probe函数,即s3c24xx_spi_probe。该函数首先调用spi_alloc_master为平台设备分配内存,创建一个SPI主设备结构体。spi_master_get_devdata和spi_master_get分别用于获取存储在主设备数据区域的s3c24xx_spi结构体指针和spi_master结构体指针。这里,结构体s3c24xx_spi包含了与硬件相关的具体信息,如平台数据(pdata)等。 接下来,使用memset将分配的内存清零,然后填充s3c24xx_spi结构体,设置master指针指向刚创建的spi_master实例,并将平台设备的平台数据赋值给hw->pdata。硬件平台数据通常包含关于硬件配置的详细信息,例如引脚配置、时钟频率等。 在SPI驱动的初始化过程中,还会涉及到资源的分配、中断处理注册、设备的注册等步骤。例如,通过platform_device_add_resources和platform_device_add_data来设置SPI设备的资源,并将设备信息添加到SPI主设备的设备列表中。最后,通过调用spi_register_master完成SPI主设备的注册。 这篇内容深入解析了SPI驱动的初始化过程,包括SPI主设备的创建、硬件信息的填充以及与平台设备的关联,这对于理解和开发SPI驱动程序的读者来说非常有价值。对于嵌入式开发者和爱好者而言,了解这些细节有助于更好地掌控SPI通信的实现,从而有效地与各种SPI外设进行交互。