早些时候,我假设:

  • 平台驱动程序适用于芯片上的设备.
  • 普通设备驱动程序适用于与处理器芯片接口的驱动程序.

在遇到i2c驱动之前...

请谁来解释一下.

推荐答案

你的推荐信很好,但缺乏what is a platform device的定义.LWN比1.我们可以从这一页学到什么:

  1. 平台设备是inherently not discoverable,也就是说,硬件不能对软件说"Hey! I'm present!".典型的例子是i2c设备,kernel/Documentation/i2c/instantiating-devices种状态:

    与PCI或USB设备不同,I2C设备不会在硬件级别枚举(在运行时). 相反,软件必须(在编译时)知道每个I2C总线段上连接了哪些器件. 因此,USB和PCI是not个平台设备.

  2. 平台设备绑定到驱动程序by matching names

  3. 在系统 bootstrap 期间,平台设备应为registered very early.因为它们通常对系统的其他部分(平台)及其驱动程序至关重要.

所以基本上,问题"is it a platform device or a standard device?"是more a question of which bus it uses.要使用特定平台设备,您必须:

  1. register a platform driver将管理此设备.它应该定义一个unique的名字,
  2. register your platform device,定义与驱动程序相同的名称.

平台驱动程序适用于那些芯片上的设备.

不是真的(在理论上是正确的,但在实践中是正确的).I2C设备不是片上设备,而是平台设备,因为它们是不可发现的.我们还可以想到片上设备,它有normal个设备.示例:现代x86处理器上的集成PCI GPU芯片.它是可发现的,因此不是平台设备.

普通设备驱动程序适用于与处理器芯片接口的驱动程序.在遇到一个i2c驱动器之前.

不是真的.许多normal个设备与处理器连接,但不是通过i2c总线.示例:USB鼠标.

[EDIT]在您的情况下,看看drivers/usb/host/ohci-pnx4008.c,这是一个USB主机控制器平台设备(这里USB主机控制器是不可发现的,而将连接到它的USB设备是可发现的).它是由board file(arch/arm/mach-pnx4008/core.c:pnx4008_init)注册的平台设备.在探测器功能中,它将i2c设备注册到总线i2c_register_driver.我们可以推断,USB主机控制器芯片组talks to通过i2c总线连接CPU.

为什么是那种建筑?因为一方面,这个设备可以被认为是一个裸i2c设备,为系统提供了一些功能.另一方面,它是一款支持USB主机的设备.它需要注册到USB堆栈(usb_create_hcd).所以只探测i2c是不够的.看看Documentation/i2c/instantiating-devices.

C++相关问答推荐

getchar读css + z还是返回css?

在C中使用动态内存分配找到最小的负数

如何在IF语句中正确使用0.0

在C++中头文件中声明外部 struct

模拟shell并运行.sh文件

如何知道我是否从非阻塞套接字读取所有内容

双指针指向常量双指针的指针类型赋值不兼容

如何在C中使printf不刷新标准输出?

GTK3按钮信号错误

在句子中转换单词的问题

为什么我从CSV文件中进行排序和搜索的代码没有显示数据的所有结果?

如何在C-函数中混合使用C代码和ASM?

递归打印二维数组(C编程)

try 判断长整数是否为素数

如何编写postgresql支持函数

将不同类型的指针传递给函数(C)

C循环条件内的函数

如何用用户输入的多个字符串填充数组?

C 语言中霍尔分区的快速排序算法

为什么 C 字符串并不总是等同于字符数组?