Linux 高精度事件计时器驱动¶
高精度事件计时器 (HPET) 硬件遵循 Intel 和 Microsoft 的规范,修订版 1。
每个 HPET 都有一个固定速率计数器(频率为 10+ MHz,因此称为“高精度”)和最多 32 个比较器。 通常提供三个或更多比较器,每个比较器都可以生成单次中断,并且至少其中一个具有额外的硬件来支持周期性中断。 比较器也称为“定时器”,这可能会产生误导,因为通常定时器是彼此独立的...这些定时器共享一个计数器,这使得重置变得复杂。
HPET 设备可以支持两种中断路由模式。在一种模式下,比较器是额外的中断源,没有特定的系统角色。许多 x86 BIOS 编写者根本不路由 HPET 中断,这阻止了该模式的使用。他们支持另一种“传统替代”模式,其中前两个比较器会阻止来自 8254 定时器和 RTC 的中断。
该驱动程序支持在调用驱动程序 module_init 例程之前检测 HPET 驱动程序的分配和 HPET 的初始化。这使得使用定时器 0 或 1 作为主定时器的平台代码能够拦截 HPET 初始化。 可以在 arch/x86/kernel/hpet.c 中找到此初始化的示例。
该驱动程序提供了一个用户空间 API,该 API 类似于 RTC 驱动程序框架中的 API。 在 file:samples/timers/hpet_example.c 中提供了一个用户空间程序示例。