Linux-Kernel
如何驗證系統中的時鐘源?
根據核心程式碼,計時會將時鐘源初始化為 jiffies。
/* * timekeeping_init - Initializes the clocksource and common timekeeping values */ void __init timekeeping_init(void) { ... clock = clocksource_default_clock(); ... } struct clocksource * __init __weak clocksource_default_clock(void) { return &clocksource_jiffies; }
但它也表示,一旦檢測到新的時鐘源,計時將取代它。
/** * timekeeping_notify - Install a new clock source * @clock: pointer to the clock source * * This function is called from clocksource.c after a new, better clock * source has been registered. The caller holds the clocksource_mutex. */
現在我知道當我輸入命令“date”時,它最終會從時鐘源獲取系統時間。我想知道我當時使用的是哪個時鐘源,是 jiffies 嗎?
我找到了。
時鐘源可以在以下路徑中找到:
/sys/devices/system/clocksource/clocksource0
如圖所示:
-r--r--r--. 1 root root 4096 Jul 30 16:24 available_clocksource -rw-r--r--. 1 root root 4096 Jul 30 16:32 current_clocksource drwxr-xr-x. 2 root root 0 Jul 30 16:24 power lrwxrwxrwx. 1 root root 0 Jul 28 11:40 subsystem -> ../../../../bus/clocksource -rw-r--r--. 1 root root 4096 Jul 28 11:40 uevent --w-------. 1 root root 4096 Jul 30 16:24 unbind_clocksource
available_clocksource
顯示所有可用的時鐘源。
current_clocksource
顯示目前正在使用的時鐘源系統。使用
echo xxx > current_clocksource
可以更改目前時鐘源(jiffies
是預設時鐘源,不在available_clocksource
,但無法設置。系統似乎不允許設置非高解析度時鐘源)。