淺談 Linux 下的 Timer 框架
前言
看著圖中的計時器,想一想現實中我們是如何計時的?想一想如果計劃用 20 分鐘來煮一鍋粥都有哪些步驟?
- 在心里記下時鐘上 20 分鐘的位置。
- 開始煮粥,并按下計時器。
- 重復拿當前時間和 20 分鐘比較。如果還沒到,繼續煮粥。
- 當當前時間到達目標時間 20 分鐘后,告訴自己,粥好了可以吃了。
從上面的例子,我們能得到什么?如果抽象并構建一個時鐘模型,我們需要哪些東西呢?我想大概是這樣:
- 一個單調遞增的計數器 counter
- 一個可設置的比較器 comparer
- 當 counter 中的數字增加到等于 comparer 的時候觸發中斷,告訴你,“粥”好了可以吃了
Linux 下的 Timer 框架
Linux 下的 Timer 框架和上面的例子大致相似,它把一個 Timer 拆分成兩部分:Clocksource 和 Clock_event_device。Clocksource 主要包括 counter 等時鐘源信息,Clock_event_device 主要包括:設置 comparer,觸發中斷,中斷處理等任務。
Clocksource
Clocksource 最重要的接口是 read counter func,通過此接口,內核可以讀取 counter 中的值。完整的 Clocksource 接口定義見 include/linux/clocksource.h。
Clock_event_device
Clock_event_device 部分需要實現如下接口
- 通過 set_next_event 來設置下次時鐘中斷觸發的條件。
- 通過 irq && irq_action 來設置時鐘中斷觸發后要做的事情。
完整的 Clock_event_device 接口定義見 include/linux/clockchips.h
來自:http://www.tinylab.org/take-a-look-at-the-linux-timer-framework/
本文由用戶 n6xb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!