最近在调试Inter平台core i7 基于X86架构的工控产品 在移植驱动的过程中 发现GPIO和I2C的device ID添加到pnp驱动框架后无法进入probe函数 后面找了下原因 因为pnp遵循的是ACPI规范 是由于如下Hardware ID字段是需要从BIOS中进行描述的 而目前的驱动匹配不到对应的字段 自然就不可能注册成功了。
PNP是什么东西 不是三极管的那个PNP啦 这个PNP表示的是 Plug-and-Play 译文为即插即用。
PnP的作用是自动配置底层计算机中的板卡和其他设备 然后告诉对应设备都做了什么。PnP的任务是把物理设备和软件设备驱动程序相配合 并操作设备 在每个设备和它的驱动程序之间建立通信信道。然后 PnP分配下列资源给设备和硬件 I/O地址、IRQ、DMA通道和内存段。即插即用设备配置的控制权将从系统BIOS传递到系统
软件 所以驱动中一定会有代码进行描述 到时可以跟一下这部分的代码深入了解一下。由于PNP遵循ACPI的规范 那么既然是规范 那肯定要照着做了 规范怎么说 那就怎么做。
以下是关于ACPI Spec中对Hardware ID的描述 描述如下
有关ASL语言可以参考ACPI SPEC手册的ACPI Source Language (ASL)Reference章节。
如上 关于Hardware ID手册中的意思大致如下
该对象用于向OSPM提供设备的PNP ID或ACPI ID。 在描述平台时 任何_HID对象的使用都是可选的。但是 _HID对象必须是用于描述将由OSPM枚举的任何设备。 当总线枚举器不能检测到设备ID时 OSPM只枚举一个设备。当总线枚举器不能检测到设备ID时。例如 ISA总线上的设备是由OSPM列举。除了OSPM使用_ADR对象来描述总线枚举器枚举的设备。
其中OPSM是 OSPM(OS-directed Power Management) OSPM 操作系统支持 ACPI 的一个部分 操作系统 OS 可以从操作系统下驱动程序的角度控制 ACPI 子模块 同时支持 ACPI 包括 SCI 中断 设备事件 系统事件模式 这些事件模式可以充分支持 Hot-plug 方式。
所以解决驱动匹配不上的问题 只要在BIOS中的ASL工程中对应Hardware描述的部分添加一个字段描述 确保驱动中的字段和BIOS中的字段一致 这样就可以匹配成功了。
OSPM
操作系统支持
ACPI
的一个部分 操作系统
OS
可以从操作系统下驱动程
序的角度控制
ACPI
子模块
同时支持
ACPI
包括
SCI
中断
设备事件
系统事件模式
这些事件模式可以充分支持
Hot-pl
ug
方式。
以下是ACPI中关于PNP ID和ACPI ID的规范信息
网址 http://www.uefi.org/PNP_ACPI_Registry
PNP ID AND ACPI ID REGISTRY本文链接: http://apci.immuno-online.com/view-742357.html