高精度事件定时器(HPET:High Precision Event Timer)硬件遵循 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,类似于 RTC 驱动程序框架中的 API。在samples/timers/hpet_example.c 文件中提供了一个用户空间程序示例。
Src
https://www.kernel.org/doc/html/latest/timers/hpet.html