核心態常用獲取納秒的函式。u64是unsigned long long型別的資料型別,列印用%llu。
基本的基於時間的介面:
ktime_t ktime_get(void)// 用於可靠的時間戳和精確測量短時間間隔。在系統啟動時啟動,但在掛起期間停止
ktime_tktime_get_boottime
(void)//類似於ktime_get,但是但在掛起時不會停止例如,這可用於需要通過掛起操作與其他計算機同步的金鑰過期時間。
ktime_tktime_get_real
(void)//返回相對於2023年的時間,類似於使用者態的gettimeofday.這適用於需要在重新啟動期間保持的所有時間戳,如inode時間,但在內部使用時應避免使用,因為它可能由於從使用者空間執行的閏秒更新、ntp adjustment settimeofday()操作而向後跳轉
ktime_tktime_get_raw
(void)//類似於ktime_get,但執行速度與硬體時鐘源相同,而不需要(ntp)調整時鐘漂移。這在核心中也很少需要。
u64ktime_get_ns
(void)
u64ktime_get_boottime_ns
(void)
u64ktime_get_real_ns
(void)
u64ktime_get_clocktai_ns
(void)
u64ktime_get_raw_ns
(void)
time64_tktime_get_seconds
(void)
time64_tktime_get_boottime_seconds
(void)
time64_tktime_get_real_seconds
(void)
time64_tktime_get_clocktai_seconds
(void)
time64_tktime_get_raw_seconds
(void)
unsigned long old_tns, old_ts,now_ns, now_ts;
old_ns= ktime_get();
程式段}
now_ns= ktime_get();
時間差 diff = now_ns -old_ns;
另外還有乙個巨集做除法
比如需要列印時間戳時
old_ns= ktime_get();
old_ts = do_div(old_ns, 1000000000);//巨集做除法運算 old_ns 保留剩餘的ns ,ts秒數
printk("time [%05lu:%06lu]----------- \n",old_ts, (old_ns/1000));// (old_ns/1000) 是微秒 -----------》可以列印時間戳
注意:多核使用情況,如果你發現時間t1超前與t2,說明是多核影響的。
#include
#include
#include
/*新增到合適位置*/
struct timex txc;
struct rtc_time tm;
do_gettimeofday(&(txc.time));
rtc_time_to_tm(txc.time.tv_sec,&tm);
printk(「utc time :%d-%d-%d %d:%d:%d /n」,tm.tm_year+1900,tm.tm_mon, tm.tm_mday,tm.tm_hour,tm.tm_min,tm.tm_sec);
有不合適之處請指正
Linux kernel 關於keyboard部分
linux kernel 關於keyboard部分 keyboard.c 用於處理和鍵盤相關的input handler。其中包括後續的鍵碼轉換和輸出 atkbd.c 常用的鍵盤布局,用於獲得掃瞄碼,並將其傳送到input handler 鍊錶中 struct input handler kbd h...
Linux kernel併發處理
理解好併發處理,有幾個小概念是相關的。1.由於圖靈機本身是依賴side effect來工作,故同步互斥機制便有了必要性。角度來看,如果依賴了共享的變數,便意味著可能需要同步保護。如果是lamada演算的函式式程式設計,是不需要同步保護滴。2.死鎖dead lock的必要4條件。1.資源的獨占性 不可...
單步執行linux kernel
如果能給linux kernel打log,如果能單步執行,如果能像普通應用程式那樣,step by step的檢視程式跑 了.該多好?這是乙個夢想,但從未實現過 因為那是kernel,不是應用程式。kernel一閃而過,我有什麼能力讓它駐足停留,為自己看個夠?雖然,也知道kernel是人寫的 廢話 ...