更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_vdso_sys.c 文件参考

浏览源代码.

函数

STATIC INT32 VdsoGetRealtimeCoarse (struct timespec *ts, const VdsoDataPage *usrVdsoDataPage)
 通过vdso获取大致的实时时间 更多...
 
STATIC INT32 VdsoGetMonotimeCoarse (struct timespec *ts, const VdsoDataPage *usrVdsoDataPage)
 通过vdso获取大致的运行时间 更多...
 
STATIC size_t LocVdsoStart (size_t vdsoStart, const CHAR *elfHead, const size_t len)
 开始vdso 更多...
 
INT32 VdsoClockGettime (clockid_t clk, struct timespec *ts)
 

函数说明

◆ LocVdsoStart()

STATIC size_t LocVdsoStart ( size_t  vdsoStart,
const CHAR elfHead,
const size_t  len 
)

开始vdso

在文件 los_vdso_sys.c60 行定义.

61{
62 CHAR *head = NULL;
63 INT32 i;
64 INT32 loop;
65
66 for (i = 1; i <= MAX_PAGES; i++) {
67 head = (CHAR *)((UINTPTR)vdsoStart);
68 for (loop = len; loop >= 1; loop--) {
69 if (*head++ != *(elfHead + len - loop)) {
70 break;
71 }
72 }
73 if (loop) {
74 vdsoStart -= PAGE_SIZE;
75 } else {
76 break;
77 }
78 }
79
80 if (i > MAX_PAGES) {
81 return 0;
82 }
83 return (vdsoStart - PAGE_SIZE);
84}
signed int INT32
Definition: los_typedef.h:60
unsigned long UINTPTR
Definition: los_typedef.h:68
char CHAR
Definition: los_typedef.h:63
这是这个函数的调用关系图:

◆ VdsoClockGettime()

INT32 VdsoClockGettime ( clockid_t  clk,
struct timespec *  ts 
)

在文件 los_vdso_sys.c86 行定义.

87{
88 INT32 ret;
89 size_t vdsoStart;
90
91 __asm__ __volatile__("mov %0, pc" : "=r"(vdsoStart));
92 vdsoStart = vdsoStart - (vdsoStart & (PAGE_SIZE - 1));
93 vdsoStart = LocVdsoStart(vdsoStart, ELF_HEAD, ELF_HEAD_LEN);
94 if (vdsoStart == 0) {
95 return -1;
96 }
97
98 VdsoDataPage *usrVdsoDataPage = (VdsoDataPage *)(UINTPTR)vdsoStart;
99
100 switch (clk) {
101 case CLOCK_REALTIME_COARSE:
102 ret = VdsoGetRealtimeCoarse(ts, usrVdsoDataPage);
103 break;
104 case CLOCK_MONOTONIC_COARSE:
105 ret = VdsoGetMonotimeCoarse(ts, usrVdsoDataPage);
106 break;
107 default:
108 ret = -1;
109 break;
110 }
111
112 return ret;
113}
STATIC INT32 VdsoGetMonotimeCoarse(struct timespec *ts, const VdsoDataPage *usrVdsoDataPage)
通过vdso获取大致的运行时间
Definition: los_vdso_sys.c:49
STATIC size_t LocVdsoStart(size_t vdsoStart, const CHAR *elfHead, const size_t len)
开始vdso
Definition: los_vdso_sys.c:60
STATIC INT32 VdsoGetRealtimeCoarse(struct timespec *ts, const VdsoDataPage *usrVdsoDataPage)
通过vdso获取大致的实时时间
Definition: los_vdso_sys.c:38
函数调用图:

◆ VdsoGetMonotimeCoarse()

STATIC INT32 VdsoGetMonotimeCoarse ( struct timespec *  ts,
const VdsoDataPage usrVdsoDataPage 
)

通过vdso获取大致的运行时间

在文件 los_vdso_sys.c49 行定义.

50{
51 do {
52 if (!usrVdsoDataPage->lockCount) {
53 ts->tv_sec = usrVdsoDataPage->monoTimeSec;
54 ts->tv_nsec = usrVdsoDataPage->monoTimeNsec;
55 return 0;
56 }
57 } while (1);
58}
INT64 monoTimeSec
系统运行时间,从系统启动时开始计时,速度更快精度更低,系统休眠时不再计时
UINT64 lockCount
数据页被锁数量
这是这个函数的调用关系图:

◆ VdsoGetRealtimeCoarse()

STATIC INT32 VdsoGetRealtimeCoarse ( struct timespec *  ts,
const VdsoDataPage usrVdsoDataPage 
)

通过vdso获取大致的实时时间

在文件 los_vdso_sys.c38 行定义.

39{
40 do {
41 if (!usrVdsoDataPage->lockCount) {
42 ts->tv_sec = usrVdsoDataPage->realTimeSec;
43 ts->tv_nsec = usrVdsoDataPage->realTimeNsec;
44 return 0;
45 }
46 } while (1);
47}
INT64 realTimeNsec
单位纳秒: 系统实时时间
INT64 realTimeSec
单位秒: 系统实时时间
这是这个函数的调用关系图: