早些时候,我假设:
- 平台驱动程序适用于芯片上的设备.
- 普通设备驱动程序适用于与处理器芯片接口的驱动程序.
在遇到i2c驱动之前...
请谁来解释一下.
早些时候,我假设:
在遇到i2c驱动之前...
请谁来解释一下.
你的推荐信很好,但缺乏what is a platform device的定义.LWN比1.我们可以从这一页学到什么:
平台设备是inherently not discoverable,也就是说,硬件不能对软件说"Hey! I'm present!".典型的例子是i2c设备,kernel/Documentation/i2c/instantiating-devices
种状态:
与PCI或USB设备不同,I2C设备不会在硬件级别枚举(在运行时). 相反,软件必须(在编译时)知道每个I2C总线段上连接了哪些器件. 因此,USB和PCI是not个平台设备.
平台设备绑定到驱动程序by matching names,
所以基本上,问题"is it a platform device or a standard device?"是more a question of which bus it uses.要使用特定平台设备,您必须:
平台驱动程序适用于那些芯片上的设备.
不是真的(在理论上是正确的,但在实践中是正确的).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
.