linux核心時間操作

2021-06-18 05:38:07 字數 1489 閱讀 5363

linux核心是通過定時器中斷來跟蹤時間流;使用"hz"巨集表示1秒的時鐘中斷次數,並使用"jiffies"及"jiffies_64"變數來記錄時鐘中斷次數,在系統引導時計數器初始化為 0

1 核心時間比較api, 比較jiffies計數器

#include int time_after(unsigned long a, unsigned b);

int time_before(unsigned long a, unsigned b);

int time_after_eq(unsigned long a, unsigned b);

int time_before_eq(unsigned long a, unsigned b);

2 核心表述方法(jiffies)與時間表述方法的轉換

時間表述方法可用的資料結構有"struct timeval"和"struct timespec"。其中"struct timeval"為老式的數但較為流行,它使用秒和毫秒值;而"struct timespec"為新式的,它使用的是秒與納秒值。

#include unsigned long timespec_to_jiffies(struct timespec *value);

void jiffies_to_timespec(unsigned jiffies, struct timespec *value);

unsigned long timeval_to_jiffies(struct timeval *val);

void jiffies_to_timeval(unsigned long jiffies, struct timeval *value);

3 獲取jiffies_64值

#include u64 get_jiffies_64(void);
4 獲取cpu時鐘週期數值

使用jiffies值測量時間差間隔在大部分情況下已經足夠,但如果測量更短的時間差,則可以使用處理器特定暫存器, rdtsc巨集是與體系結構相關,而get_cycles則與體系結構無關。

#include rdtsc(low32, high32);

rdtscl(low32);

rdtscsll(var64);

#include cycles_t get_cycles(void);

5 獲取當前時間

#include unsigned long mktime(unsigned int year, unsigned int mon,

unsigned int day, unsigned int hour,

unsigned int min, unsigned int sec);

void do_gettimeofday(struct timeval *tv);

struct timespec current_kernel_time(void)

linux的核心時間

jiffies在核心中是乙個全域性變數,它用來統計系統啟動以來系統中產生的總節拍數,這個變數定義在include linux jiffies.h中,定義形式如下。unsigned long volatile jiffies 想要理解jiffies的含義,我們需要首先理解時鐘 節拍率 節拍的概念。核心...

Linux核心操作 核心編譯

本文基於ubuntu14.04系統進行操作的。本文會後續更新,這裡給出乙個簡單的流程。本人屬於初學者,等進一步深入的時候會進行細節描寫。方法一 sudo apt get install linux source使用該辦法可以一鍵獲取核心。在我的系統環境下,獲取的是 linux source 3.13...

Linux時間操作

在嵌入式開發平台中,經常會用到linux時間函式的一些操作,包括時間戳的讀取 時間格式的轉換等,以下是linux時間操作中重要的函式及結構體的說明。重要結構體 struct tm 相關函式 time 獲取時間戳 函式原型 time t time time t t 說明 返回從1970年1 月1日0 ...