linux内核 - 获取内核日志时间戳的方法
一:概述
在linux内核中,sched_clock 是Linux内核提供的高精度计时器,返回的是纳秒级别的时间戳。与内核日志时间戳对应,多用于内核调试,但是在某些架构中,seched_clock 在线程抢占时可能不安全。所以在使用 sched_clock获取时间戳时,要禁止线程被抢占。
二:代码
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/preempt.h>
#include <linux/ktime.h>
#include "img_types.h" // 定义 IMG_UINT64/* 内核安全获取时间戳函数 */
static inline IMG_UINT64 Clockns64(void)
{IMG_UINT64 timenow;preempt_disable(); // 禁止抢占timenow = sched_clock(); // 获取纳秒时间戳preempt_enable(); // 恢复抢占return timenow;
}/* 模块加载函数 */
static int __init mymodule_init(void)
{IMG_UINT64 ts;printk(KERN_INFO "MyModule: Loaded\n");ts = Clockns64(); // 获取时间戳printk(KERN_INFO "MyModule: Current time (ns) = %llu\n", ts);return 0;
}/* 模块卸载函数 */
static void __exit mymodule_exit(void)
{printk(KERN_INFO "MyModule: Unloaded\n");
}module_init(mymodule_init);
module_exit(mymodule_exit);MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("Kernel module example using Clockns64()");