base-files: For sysfixtime use hwclock if RTC available
authorJohn Crispin <john@openwrt.org>
Mon, 8 Feb 2016 08:25:53 +0000 (08:25 +0000)
committerJohn Crispin <john@openwrt.org>
Mon, 8 Feb 2016 08:25:53 +0000 (08:25 +0000)
On systems that have an RTC prefer it to the file-based time fixup (i.e.
use hwclock when there is a permanent clock instead of the faked up time
logic that is needed when there is not RTC).

We can't rely on hctosys kernel feature either as we're usually using
RTC as kernel modules which are usually being loaded after hctosys was
run, leading in the following error:

  hctosys: unable to open rtc device (rtc0)

Signed-off-by: Daniel Dickinson <openwrt@daniel.thecshore.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
SVN-Revision: 48661

package/base-files/files/etc/init.d/sysfixtime

index 4010e06f936f99ee03f4dfc569451a36b55545c7..ab946f6518f6f6eb373313a897ca47c9682d5cca 100755 (executable)
@@ -2,10 +2,24 @@
 # Copyright (C) 2013-2014 OpenWrt.org
 
 START=00
+STOP=90
+
+RTC_DEV=/dev/rtc0
+HWCLOCK=/sbin/hwclock
 
 boot() {
+       start && exit 0
+
        local curtime="$(date +%s)"
        local maxtime="$(find /etc -type f -exec date -r {} +%s \; | sort -nr | head -n1)"
        [ $curtime -lt $maxtime ] && date -s @$maxtime
 }
 
+start() {
+       [ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -s -f $RTC_DEV
+}
+
+stop() {
+       [ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -w -f $RTC_DEV && \
+               logger -t sysfixtime "saved '$(date)' to $RTC_DEV"
+}