您好,我遇到一个系统时间跳变问题,AM335X Linux在启动时,使用了hwlock -s命令,使系统时间和RTC时间一致,但是经过一段时间后,发现系统时间和RTC的时间不一致,系统本地时间比RTC时间快,第一次快大概32个小时, 后面又会恢复保持一致,但隔一段时间后,系统时间又快大约30多个小时,这样一直反复....。用的是外部RTC,请问为什么系统时间会调变?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,我遇到一个系统时间跳变问题,AM335X Linux在启动时,使用了hwlock -s命令,使系统时间和RTC时间一致,但是经过一段时间后,发现系统时间和RTC的时间不一致,系统本地时间比RTC时间快,第一次快大概32个小时, 后面又会恢复保持一致,但隔一段时间后,系统时间又快大约30多个小时,这样一直反复....。用的是外部RTC,请问为什么系统时间会调变?
你所说的后面又会恢复保持一致的原因,是因为软件上面主动去读外部RTC的时间而更新到自己的系统RTC时钟吗?
之前有遇到过类似的时间跳变问题,根源在于OSC0和OSC1的地没有和DGND供地。在你的办卡设计中,是否有注意到这三个地必须共地的设计?
是共地设计的,请看附件OSC0、OSC1和DGND原理图。不过我现在用的是外部RTC,不是am335x的RTC。目前我通过修改代码改了下,但不知道是否能从根本上解决问题,修改代码如下:
$(KERNEL_DIR)/arch/arm/mach-omap2/timer.c
459 -OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, AM33XX_RTC32K_SOURCE)
460 +OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, OMAP4_MPU_SOURCE)
是共地设计的,请看附件OSC0、OSC1和DGND原理图设计。我用的是外部RTC,不是AM335X内部RTC。目前修改了下代码,但不知道是否能够从根本上解决问题,修改代码如下:
$(KERNEL_DIR)/arch/arm/mach-omap2/timer.c
459 -OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, AM33XX_RTC32K_SOURCE)
460 +OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, OMAP4_MPU_SOURCE)
了解,如果供地设计了,硬件上应该是没问题的。但是针对于你这个问题的本身,我还是有些不明白的地方:
1. 你用了外部的RTC这点我知道;但对于AM335x的RTC部分设计,你在板子上做了吗?还是按照check list的要求,做成了disable的设计?
2. 你现在说道的系统时间跳变,具体的操作流程是怎样?是指系统刚启动的时候,会读取外部的RTC时间,然后存在了AM335x的RTC时间里,然后这个部分是会发生跳变的?然后过一段时间,这个时间就又好了?
3. 你改的代码是基于SDK 6.0的吧?这里的设置是改变对时钟源的设置,这个改后会对问题有帮助?
开机读取rtc时间后设置为系统时间: 这个在Linux操作命令?
然后过一会系统时间会突然增加个30小时: 这个的操作log?
但rtc的时间这个时候还是正确的: 这个是指读外面的RTC?
能不能把log信息发一下,这样我能清楚你每一步都是针对哪个的。
1.开机读取rtc时间后设置为系统时间:这个是文件系统脚本里执行的,/etc/init.d/hwclock.sh,这个流程应该是没错的。
2.然后我用date命令查看系统时间和用hwclock -r打印的时间是一致的,rtc的话是用外部rtc,内部rtc在menuconfig里关了。
3.过一段时间后,我再次用date查看系统时间,系统时间有时候就不对了,会比正常时间快30多个小时,这个时候用hwclock -r查看rtc时间是对的。
这个是我内核的打印信息,这个OMAP clocksource用的是 32768 Hz,但是我内核CONFIG_OMAP_32K_TIMER没有打开,这个会有影响吗。
我现在将
OMAP_SYS_TIMER_INIT(3_am33xx, 2, OMAP4_MPU_SOURCE, 1, AM33XX_RTC32K_SOURCE)
改为
OMAP_SYS_TIMER_INIT(3_am33xx, 2, OMAP4_MPU_SOURCE, 1, OMAP4_MPU_SOURCE)
跑了几个小时没出现这种情况了。但是我们之前的板子就没遇到这个问题,很奇怪。
改之前:
[ 0.000000] OMAP clockevent source: GPTIMER2 at 25000000 Hz
[ 0.000000] OMAP clocksource: GPTIMER1 at 32768 Hz
[ 0.000000] sched_clock: 32 bits at 32kHz, resolution 30517ns, wraps every 131071999ms
[ 0.183654] Switching to clocksource gp timer
[ 10.363037] clock: disabling unused clocks to save power
[ 10.395996] rtc-isl1208 1-006f: setting system clock to 2016-12-19 11:40:34 UTC (1482147634)
改之后:
[ 0.000000] OMAP clockevent source: GPTIMER2 at 25000000 Hz
[ 0.000000] OMAP clocksource: GPTIMER1 at 25000000 Hz
[ 0.000000] sched_clock: 32 bits at 25MHz, resolution 40ns, wraps every 171798ms
[ 0.183599] Switching to clocksource gp timer
[ 10.372085] clock: disabling unused clocks to save power
[ 10.411999] rtc-isl1208 1-006f: setting system clock to 2016-12-20 15:04:59 UTC (1482246299)
这样改对系统会有影响吗?
您好,Steven Liu ,如果用外部RTC,那么OSC1的32.768K是否还需要焊接?