一般來說要讓整個linux系統跑起來,那麼一個必須的就是linux的時鐘,也就是時間子系統了,這裡正好工作需要,那麼就研究下linux下的時間子系統了。
linux內核必須完成兩種主要的定時測量。一個是計時,保存當前的時間和日期,以便能通過time(),gettimeofday()等系統調用,返回給用戶程序,另一個是定時,這種機制主要是告訴內核或者應用程序,某一時間間隔已經過去了,觸發回調函數,然後做一些事情。
對於硬件主要有實時時鐘RTC和CPU本地Timer,其中RTC是cpu外部的其他芯片,或者內部的模塊,不過都是需要外部單獨提供類似紐扣電池供電。Linux只用RTC來獲取時間和日期,關於RTC以後在rtc子系統裡面再詳細介紹。CPU本地Timer其實就是用的CPU內部的Timer模塊,一般是CPU的Timer模塊可以計數,當然這個是通過晶振再加上倍頻分頻等給主芯片的,然後主芯片內部根據跑的不同主頻來實現計數,這個計數只能遞增或者遞減,然後溢出後會有中斷,一般是可以設置這個溢出的值的。嵌入式系統要跑起來,都需要時鐘,具體的移植代碼主要在arch下,根據不同的體系做不通的移植。
linux具有Dynamic Ticks和High Resolution Timer, 詳細可以參考kernel/time/Kconfig下。
config TICK_ONESHOT bool config NO_HZ bool "Tickless System (Dynamic Ticks)" depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS select TICK_ONESHOT help This option enables a tickless system: timer interrupts will only trigger on an as-needed basis both when the system is busy and when the system is idle. config HIGH_RES_TIMERS bool "High Resolution Timer Support" depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS select TICK_ONESHOT help This option enables high resolution timer support. If your hardware is not capable then this option only increases the size of the kernel image.
其中CONFIG_NO_HZ用來控制Dynamic Ticks,CONFIG_HIGH_REST_TIMERS控制High Resolution Timer。
若是沒有選擇上述的高精度timer和動態tick的話,那麼就用linux系統的低精度timer了,簡單地介紹了下基礎知識,那麼接下去再來學習吧!