IIC驱动详解:旧的Attach方式与平台总线驱动

需积分: 0 2 下载量 35 浏览量 更新于2024-08-20 收藏 304KB PPT 举报
"这篇资料主要介绍了IIC驱动程序的旧方法,特别是`attach`方式的实现,以及IIC硬件的工作原理和平台总线驱动的概念。" 在Linux内核中,IIC(Inter-Integrated Circuit)驱动是用于控制IIC总线上的设备。IIC驱动程序的开发通常涉及到对IIC协议的理解,包括串行数据线(SDA)和串行时钟线(SCL)的工作机制。在开始编写IIC驱动之前,理解硬件手册中关于IIC部分的描述至关重要,这有助于开发者理解数据传输格式和工作流程。 在提供的代码段中,可以看到`i2c_add_adapter`函数,这是将IIC适配器添加到系统中的过程。它首先尝试从全局ID资源管理器`i2c_adapter_idr`中分配一个ID,确保分配的ID大于或等于`__i2c_first_dynamic_bus_num`。如果分配失败,由于资源冲突,函数会重试。一旦ID被成功分配,它会更新适配器的编号`adapter->nr`,然后调用`i2c_register_adapter`完成注册。 `i2c_register_adapter`函数会遍历IIC总线类型上的所有驱动,对每个驱动调用`attach_adapter`接口。这个过程是通过`bus_for_each_drv`遍历驱动并执行相应的操作,实现了驱动与适配器的关联。 平台总线驱动(platform bus driver)是Linux设备模型的一部分,它为特定硬件提供了一个抽象层。`platform_device`结构体表示了一个平台设备,包含了设备的基本信息,如名称、ID、设备结构以及资源。资源结构体`struct resource`描述了设备使用的物理地址范围,例如硬件寄存器,以及其他属性,如资源类型(内存、I/O或中断)。 平台驱动`platform_driver`则包含处理平台设备的函数,比如`probe`函数,通常在这个函数中,驱动会通过`platform_get_resource`获取设备的资源,然后进行初始化和配置。在Linux内核2.6.38之后,这些资源的申请和管理方式有所变化,但基本理念保持一致。 IIC驱动程序涉及对IIC协议的理解、内核中设备模型的运用,以及平台总线驱动的实现。开发者需要对Linux内核的设备模型、IIC协议的细节以及资源管理有深入的了解,才能有效地编写和调试IIC驱动。