初探linux子系統集之timer子系統 三

2021-09-08 04:46:11 字數 1725 閱讀 3445

從上圖能夠得知,首先最底層是cpu的本地timer模組了,什麼都得依賴於這個最底層硬體。然後是時鐘源clock source模組,時鐘事件clock event模組了,這兩個是乙個抽象,能提供時鐘的都是時鐘源,能觸發one-shot或者週期性中斷的裝置就是時鐘事件裝置了。hrtimer就是高精度timer了。timekeeping/gtod是核心時間管理的乙個核心部分,沒有timerkeeping如其名。就是維持心跳,gtod主要用來實現設定系統時間,gettimeofday或者改動系統時間settimeofday等。timer wheel是老的架構下的timer子系統,低精度。

periodic ticks就是周期性地tick。所以dynamic就是動態的tick了,tick事實上翻譯為中文就是時鐘的滴答聲,所以這個也非常好理解了。之後再細細解說這些模組吧。

既然簡單了解了整個timer的框架,那麼接下去,我們來看看核心**中關於timer子系統的源**路徑了。

在linux/kernel/time/下

obj-y += timekeeping.o ntp.o clocksource.o jiffies.o timer_list.o timecompare.o

obj-y += timeconv.o posix-clock.o #alarmtimer.o

obj-$(config_generic_clockevents_build) += clockevents.o

obj-$(config_generic_clockevents) += tick-common.o

obj-$(config_generic_clockevents_broadcast) += tick-broadcast.o

obj-$(config_tick_oneshot) += tick-oneshot.o

obj-$(config_tick_oneshot) += tick-sched.o

obj-$(config_timer_stats) += timer_stats.o

有一些**不在time資料夾下,而是直接在kernel資料夾下,hrtimer.c、posix-timers.c等。

網上關於**的介紹非常具體,這裡就直接貼個圖了:

寫得非常好非常具體,只是自己還是得記錄下。了解了timer子系統的框架。跟模組的簡介,源**的一些介紹,知識點貌似有點多啊。那麼接下去還是先看看timer的系統啟動流程,然後再分析各個模組的功能吧。

系統起來後會呼叫start_kernel,然後接著呼叫呼叫tick_init。init_timers,hrtimer_init。timekeeping_init,time_init,詳細例如以下圖所看到的。

當中init_timers相當於time wheel低精度timer。hrtime_init相當於hrtimer高精度timer。以及timekeeping_init就是gtod了和而time_init就是我們所要適配的和平台相關的timer的移植了。

既然已經了解了主要的功能和**,也知道了系統啟動流程。那麼接下去就乙個乙個來學習了。

linux驅動子系統之輸入子系統 5

5.總結 5.1 事件資訊的上報過程分析 l 上報的大致過程 裝置驅動層 核心層 事件處理層 應用層 l 具體呼叫的函式 以evdev為例 input event input handle event input pass event handle handler event handle,type...

linux驅動之輸入子系統

輸入子系統框架,把核心開啟 搜尋input.c 輸入子系統的 在 driver input目錄下面 最上一層,我們稱它為核心層 要看乙個驅動程式我們應該從他的入口函式開始看 有一行 err register chrdev region mkdev input major,0 input max ch...

LInux 子系統 之 SPI 一

1.主機驅動與外設驅動分離 linux中的spi子系統利用了典型的把主機驅動和外設驅動分離的想法,讓主機端只負責產生匯流排上的傳輸波形,而外設端只是通過標準的api來讓主機端以適當的波形訪問自身。這裡面涉及到了4個軟體模組。1 主機端驅動 根據控制器的硬體手冊,操作spi控制器,產生匯流排的傳輸波形...