[source] base-files: sysfixtime: Keep RTC time in UTC timezone

LEDE Commits lede-commits at lists.infradead.org
Mon Oct 31 11:12:57 PDT 2016


blogic pushed a commit to source.git, branch master:
https://git.lede-project.org/9e8e8b7253e9b91c365a990009febec16fd99f0b

commit 9e8e8b7253e9b91c365a990009febec16fd99f0b
Author: Petr Štetiar <ynezz at true.cz>
AuthorDate: Mon Oct 31 11:50:09 2016 +0100

    base-files: sysfixtime: Keep RTC time in UTC timezone
    
    We need to tell hwclock with -u commandline option, that we would like
    to keep our RTC clock in UTC timezone. Linux kernel expects RTC in UTC
    timezone anyway.
    
    In current state of things, we don't tell hwclock to load/store time
    from/to RTC in UTC timezone so it uses the timezone from the system
    time. If it's set to different timezone then UTC, sysfixtime is going to
    screw the time in RTC.
    
    I've following in the setup script:
    
      uci set system. at system[0].timezone='CET-1CEST,M3.5.0,M10.5.0/3'
      uci set system. at system[0].zonename='Europe/Prague'
    
    I've this RTC setup (rtc1 is RTC on i.MX6 SoC, rtc0 is battery backed RTC mcp7941x):
    
      rtc-ds1307 3-006f: rtc core: registered mcp7941x as rtc0
      snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-r as rtc1
    
    Then we can experience following (current time is 10:15am):
    
    	$ date
    	Fri Oct 21 10:15:07 CEST 2016
    
    	$ hwclock -r -f /dev/rtc0
    	Fri Oct 21 08:14:46 2016  0.000000 seconds
    
    	$ hwclock -u -r -f /dev/rtc0
    	Fri Oct 21 10:14:46 2016  0.000000 seconds
    
    And after current broken sysfixtime:
    
    	$ /etc/init.d/sysfixtime stop
    
    	$ date
    	Fri Oct 21 10:15:25 CEST 2016
    
    	$ hwclock -r -f /dev/rtc0
    	Fri Oct 21 10:15:31 2016  0.000000 seconds
    
    Now we've time in our battery backed RTC in CEST timezone instead of
    UTC.  Then once again, but with this patch applied to sysfixtime, where
    hwclock is using correctly the -u parameter:
    
    	$ /etc/init.d/sysfixtime stop
    
    	$ date
    	Fri Oct 21 10:15:53 CEST 2016
    
    	$ hwclock -r -f /dev/rtc0
    	Fri Oct 21 08:15:55 2016  0.000000 seconds
    
    Signed-off-by: Petr Štetiar <ynezz at true.cz>
    Acked-by: Jo-Philipp Wich <jo at mein.io>
---
 package/base-files/files/etc/init.d/sysfixtime | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/base-files/files/etc/init.d/sysfixtime b/package/base-files/files/etc/init.d/sysfixtime
index 81d1c52..aab5b15 100755
--- a/package/base-files/files/etc/init.d/sysfixtime
+++ b/package/base-files/files/etc/init.d/sysfixtime
@@ -16,11 +16,11 @@ boot() {
 }
 
 start() {
-	[ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -s -f $RTC_DEV
+	[ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -s -u -f $RTC_DEV
 }
 
 stop() {
-	[ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -w -f $RTC_DEV && \
+	[ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -w -u -f $RTC_DEV && \
 		logger -t sysfixtime "saved '$(date)' to $RTC_DEV"
 }
 



More information about the lede-commits mailing list