/etc/sysconfig/clock
date –R
busybox的ntpd
ntpd -p ntp_server_addr -qNn
hwclock –w
ntpd vs ntpdate
ntpdate直接调整时间到指定server。
ntpd一方面将自己作为server响应下级请求,另一方面逐步调整本机时间以对齐上级服务器时间,因此ntpd既是client又是server。
另有一个ntpclient程序可作为轻量级的ntp client使用。
jiffies变量:unsigned long 型变量,要么与jiffies_64相同,要么取其低32位。
比较缓存值与当前值:
#include<linux/jiffies.h>
int time_after(unsigned long a,unsigned long b);
int time_before(unsigned long a,unsigned long b);
int time_after_eq(unsigned long a,unsigned long b);
int time _before_eq(unsigned long a,unsigned long b);
如果需要精度很高的计时:
x86上可以使用TSC:
<asm/msr.h>
// Architecture dependent
rdtsc(low32,high32);
rdtscl(low32);
rdtscll(var64);
一个与体系结构无关的函数:
<linux/timex.h>
cycles_t get_cycles(void);
在不支持的平台上返回0。
除了do_gettimeofday,还有一个函数可以获取绝对时间:
struct timespec current_kernel_time(void);
(?区别?)
以上两个函数在ARM平台都是通过 xtime 变量得到数据的。
adjtimex
一般情况下,linux仅在启动时读下RTC,然后就用system ticks跑时钟了。
氮素,RTC和用system ticks跑出来的时钟之间肯定是有偏差的,adjtimex可以计算出这个偏差是多少,并告诉内核该用怎样的参数去调整。
有两个man page和adjtimex相关:
man 2 adjtimex # 这个是syscall 的adjtimex
man 8 adjtimex # 这个是sys util的adjtimex
注意一下timex::freq的设置:
if(timex::mode == ADJ_FREQUENCY) { // 当前时钟频率低,需要提高:freq为正 // 当前时钟频率高,需要降低:freq为负 }