我们知道Arm的架构设计中,timer这一块是有缺陷的:Timer的TVAL功能不能同时给EL3和S-EL1使用,这是硬件的设计。在ATF和TEE OS的代码中,只能有一处使用,并且也需要设计者实现提前约定好。
好在大多数的TEE OS 都不会去使用Timer TVAL功能,这也就避免了冲突。
在TEE OS中,一般情况下,只是使用counter和frequency值,计算出一个时间。并不会使用该timer的定时(TVAL)功能。 如下便是一个获取时间函数的底层接口。仅仅读conter和频率即可。
在optee os也提供了timer TVAL功能的使用接口,如果您想使用直接调用该接口即可。如下便是plat-synquacer平台的一个使用的参考示例。
(core/arch/arm/plat-synquacer/main.c)