<pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在Linux内核有关时间的函数有2类:时钟函数以及jiffy。</span><span style="font-family: Arial, Helvetica, sans-serif;">时钟函数主要位于kernel/time/;</span>
本文通过对/kernel/printk.c文件中的vprintk函数进行分析,以系统调用的方式实现了获取内核的uptime。
代码如下
SYSCALL_DEFINE0(testuptime)
{
int this_cpu;
char tbuf[50];
unsigned long long t;
unsigned long nanosec_rem;
this_cpu = smp_processor_id();
t = cpu_clock(this_cpu);
nanosec_rem = do_div(t, 1000000000);
sprintf(tbuf, "[%5lu.%06lu] ",(unsigned long) t, nanosec_rem/ 1000);
printk(KERN_INFO "current cpu time is %s.\n",tbuf);
return 0;
}
测试结果如下
分析:系统调用中也是使用了printk函数进行输出,2个uptime一致的原因是vprintk在获取到cpu的时钟之后还在处理一些安全性的事务操作。