Linux 高精度事件定時器驅動

高精度事件定時器 (HPET) 硬體遵循英特爾和微軟的規範,修訂版 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。 在 file:samples/timers/hpet_example.c 中提供了一個使用者空間程式示例