平台设备/驱动程序与I2C设备/驱动程序

3

由于我是新手,对嵌入式领域还不太了解,因此在理解i2c设备/驱动程序和平台设备/驱动程序之间的明显区别方面遇到了困难。

我阅读了这个链接:

What is the difference between Platform driver and normal device driver..?

其中说,平台设备/驱动程序用于非可发现设备,例如连接在i2c总线上的设备,平台设备通过名称匹配与驱动程序绑定。

我看过一个板文件,在该文件中,连接在i2c总线上的音频编解码器(非可发现设备)使用i2c API(i2c_register_board_info,omap_i2c_add_bus等)进行注册,因此我的问题是:

  1. i2c设备/驱动程序和平台设备/驱动程序有何区别?
  2. 注册内核中的设备/驱动程序时何时使用i2c相关API,何时使用平台相关API(platform_driver_register,platform_device_register),或者如果我们可以使用i2c相关API来注册非可发现设备(连接在i2c上),那么我们何时需要用平台设备注册?
3个回答

6
每个SOC(芯片上集成电路)或微控制器都将拥有一个I2C控制器,这提供了一种连接和与I2C设备(如摄像头传感器、PMIC、温度传感器等)通信的方式。用于配置和使用此I2C控制器的驱动程序称为平台驱动程序。这个I2C控制器被称为平台设备。大多数平台设备将成为SOC的一部分。使用平台驱动程序来编程I2C控制器的寄存器。这些寄存器位于ARM内存映射中,并将在SOC的TRM上提供。
现在,所有可以通过I2C控制器连接到SOC或微控制器的I2C设备(如相机传感器、PMIC、温度传感器等)都需要驱动程序来控制它们。此驱动程序称为设备驱动程序。这些设备的寄存器不是SOC的内存映射的一部分。需要I2C设备的数据手册(例如OV5640相机传感器)以编程寄存器。发送I2C数据以编程寄存器并访问数据。

1

平台驱动程序的官方链接在这里可以找到LWN

平台设备本质上是不可发现的,即硬件无法向软件发送“嘿!我在这里!”的信号。典型的例子是i2c设备,内核/文档/i2c/instantiating-devices状态:与PCI或USB设备不同,I2C设备在硬件级别(运行时)不被枚举。相反,软件必须知道(在编译时)每个I2C总线段上连接了哪些设备。因此USB和PCI不是平台设备。

  1. 通过匹配名称将平台设备绑定到驱动程序中,
  2. 平台设备应该在系统启动期间非常早地进行注册。因为它们通常对整个系统(平台)及其驱动程序至关重要。

因此,基本上,“它是平台设备还是标准设备?”这个问题更多的是关于它使用的总线。要使用特定的平台设备,您必须:

  1. 注册一个将管理此设备的平台驱动程序。它应该定义一个唯一的名称,
  2. 注册您的平台设备,定义与驱动程序相同的名称。

平台驱动程序是针对芯片上的设备吗? 理论上不是(但实践中是)。i2c设备不在芯片上,但是它们是平台设备,因为它们不可发现。此外,我们可以考虑普通设备作为芯片上的设备。例如:现代x86处理器上的集成PCI GPU芯片。它是可发现的,因此不是平台设备。

普通设备驱动程序是针对连接到处理器芯片的设备吗?在遇到i2c驱动程序之前? 不是真的。许多普通设备与处理器相连,但不通过i2c总线。例如:USB鼠标。


I²C不是可发现总线,那么它有什么不同呢? - 0andriy
软件必须在编译时知道每个I2C总线段上连接了哪些设备。USB和PCI主机使用I2C设备与CPU通信。您可以参考探测函数以更好地了解其工作原理。 - VamsiKrishna Neelam
I²C 设备驱动程序不是平台驱动程序。您的回答中似乎混淆了两个(软件级别)总线。 - 0andriy

0
i2c设备/驱动和平台设备/驱动有什么区别?
i2c设备驱动API用于从i2c客户端驱动程序(如音频编解码器)控制i2c外设
平台设备驱动API由不可发现的设备使用,例如音频编解码器,通过设备树或板文件获取硬件相关配置

I²C不是可发现总线,那么它有什么不同呢? - 0andriy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接