platform_device,device,pci_device三者关系与区别
特性devicepci_dev层级基类派生类(虚拟总线设备)派生类(PCI总线设备)总线依赖无虚拟平台总线(PCI总线典型用途所有设备的公共属性SoC外设、嵌入式设备PCI接口硬件资源管理通用属性(名称、电源等)内存/IRQ资源(resourcePCI配置空间、BAR资源匹配方式无名称或设备树兼容字符串。
在Linux设备驱动模型中,platform_device、device 和 pci_device 是三个关键数据结构,它们之间存在层级关系和不同用途。以下是它们的区别与联系:
1. struct device (基础设备)
-
定位:所有设备的基类,位于设备模型的最顶层(定义在
include/linux/device.h)。 -
功能:
-
提供设备的通用属性(如名称、ID、电源管理、父子关系等)。
-
实现设备模型的核心功能(如sysfs接口、设备生命周期管理等)。
-
-
特点:
-
不涉及具体总线或硬件细节,是一个抽象结构。
-
其他具体设备(如PCI、Platform设备)均继承自
device(通过结构体嵌入)。
-
2. struct platform_device (平台设备)
-
定位:用于描述不依赖于传统总线(如PCI、USB)的SoC外设或嵌入式设备(如GPIO、I2C控制器等)。
-
与
device的关系:-
内嵌一个
struct device成员(通过.dev字段),继承其通用属性。 -
扩展了平台设备特有的资源(如内存地址、IRQ等)。
-
-
关键字段:
struct platform_device { const char *name; // 设备名称 int id; // 实例ID struct device dev; // 内嵌的基类设备 struct resource *resource; // 设备资源(内存、IRQ等) // ... }; -
使用场景:
-
非枚举设备(如直接焊接在板上的设备)。
-
通过
platform_bus_type虚拟总线与platform_driver匹配。
-
3. struct pci_dev (PCI设备)
-
定位:描述PCI总线上的设备(如网卡、显卡等)。
-
与
device的关系:-
内嵌一个
struct device成员(通过.dev字段),继承通用属性。 -
扩展了PCI特有的配置(如BAR空间、Vendor/Device ID等)。
-
-
关键字段:
struct pci_dev { // ... struct device dev; // 内嵌的基类设备 unsigned short vendor; // 厂商ID unsigned short device; // 设备ID struct resource resource[PCI_NUM_RESOURCES]; // PCI资源 // ... }; -
使用场景:
-
通过PCI总线枚举的硬件设备。
-
由PCI子系统自动探测并管理。
-
三者的关系总结
| 特性 | device |
platform_device |
pci_dev |
|---|---|---|---|
| 层级 | 基类 | 派生类(虚拟总线设备) | 派生类(PCI总线设备) |
| 总线依赖 | 无 | 虚拟平台总线(platform_bus) |
PCI总线 |
| 典型用途 | 所有设备的公共属性 | SoC外设、嵌入式设备 | PCI接口硬件 |
| 资源管理 | 通用属性(名称、电源等) | 内存/IRQ资源(resource) |
PCI配置空间、BAR资源 |
| 匹配方式 | 无 | 名称或设备树兼容字符串 | Vendor/Device ID |
代码结构示例
// 继承关系示意
struct device { /* 通用字段 */ };
struct platform_device {
struct device dev; // 内嵌device
// 平台特有字段
};
struct pci_dev {
struct device dev; // 内嵌device
// PCI特有字段
};
关键区别
-
总线类型:
-
pci_dev依赖PCI总线,由硬件枚举。 -
platform_device用于无总线或虚拟总线设备,通常需手动注册。
-
-
资源分配:
-
PCI设备资源由BIOS/固件分配(如BAR空间)。
-
平台设备资源常通过设备树或硬编码指定。
-
-
驱动匹配:
-
PCI驱动通过Vendor/Device ID匹配。
-
平台驱动通过名称或设备树兼容性匹配。
-
理解这些结构有助于编写不同总线类型的驱动,并合理管理设备资源。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)