这是个系统调用,kernel/time.c。他的实现精度,依赖宏CONFIG_GENERIC_TIME.
do_gettimeofday()具体获取时间,这个函数实际上有两个文件定义:
1) arch/arm/kernel/time.c
CONFIG_GENERIC_TIME没有定义。
xtime是精确到ns的,而这个函数返回精度是usec,如果在这里定义,那么usec部分是system_timer->offset获取,其返回0.
2) kernle/time/timekeepting.c
定义宏时跑到这里。gettimeofday()返回ns精度时间timespec.有意思的是,此api的实现,也依赖宏。
宏定义:
getnstimeofday()-->xtime+timekeeping_get_ns(time/timekeeping.c)
未定义:
getnstimeofday()->do_gettimeofday(){kernel/time.c}-->okay
上面如果没有留意宏的话,会饶晕的,因为getnstimeofday()也会调用do_gettimeofday()...
当然,timekeeping.c里面的实现,会与hardware clock source交互。其中ns部分数据,由timekeeping_get_ns()实现,读取cycle数值,转换到ns.
阅读(3990) | 评论(1) | 转发(0) |