summaryrefslogtreecommitdiff
path: root/recipes-support/ntp/files/ntpd-init.patch
blob: 136edacf1fc9c52d76c8009eca5e76b1553d681b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
diff -Naur old/ntpd new/ntpd
--- old/ntpd	2017-01-17 16:26:47.427368196 -0600
+++ new/ntpd	2017-01-17 16:32:15.366116859 -0600
@@ -1,6 +1,8 @@
-#! /bin/sh
+#! /bin/bash
 #
+. /etc/default/ntpd
 PATH=/sbin:/bin:/usr/bin:/usr/sbin
+GNSSRST=/sys/devices/platform/mts-io/gnss-reset
 
 # ntpd	init.d script for ntpdc from ntp.isc.org
 test -x /usr/sbin/ntpd -a -r /etc/ntp.conf || exit 0
@@ -18,13 +20,32 @@
 	}
 }
 startdaemon(){
-	# The -g option allows ntpd to step the time to correct it just
-	# once.  The daemon will exit if the clock drifts too much after
-	# this.  If ntpd seems to disappear after a while assume TICKADJ
-	# above is set to a totally incorrect value.
-	echo -n "Starting ntpd: "
-	start-stop-daemon --start -x /usr/sbin/ntpd -- -u ntp:ntp -p /var/run/ntp.pid "$@"
-	echo "done"
+	/usr/sbin/start-stop-daemon -N -20 --start -x /usr/sbin/ntpd --test -- -u ntp:ntp -p /var/run/ntp.pid "$@" \
+	  || return 1
+	if ((GPSD_REQUIRED == 1)) && [[ -L /dev/gps0 ]] && [[ -f "${GNSSRST}" ]]; then
+		. /etc/default/gpsd
+		# Could not get ntpd -gq to work with the GPS. 
+		# So read the GPS time directly and set the system
+		# clock.
+		if ((SET_SYSTEM_CLOCK == 1)) && /usr/sbin/gpsd_ubx_settime ; then
+		   # System time set by the GPS.
+		   /usr/sbin/start-stop-daemon -N -20 --start -x /usr/sbin/ntpd -- -u ntp:ntp -p /var/run/ntp.pid "$@"
+		else
+		  # Need a GPS fix before startint ntp.
+		  /usr/sbin/start-stop-daemon -b -n z1e9d3qb -N -20 --start -x /bin/bash -- -c "sleep $GPSD_WAIT_TIME;/etc/init.d/ntpd start"
+		fi
+	else
+	  if ((SET_SYSTEM_CLOCK == 1)) ; then
+	    ntpd -gq
+	    shift
+	  fi
+
+	  # The -g option allows ntpd to step the time to correct it just
+	  # once.  The daemon will exit if the clock drifts too much after
+	  # this.  If ntpd seems to disappear after a while assume TICKADJ
+	  # above is set to a totally incorrect value.
+	  /usr/sbin/start-stop-daemon -N -20 --start -x /usr/sbin/ntpd -- -u ntp:ntp -p /var/run/ntp.pid "$@"
+	fi
 }
 stopdaemon(){
 	echo -n "Stopping ntpd: "
@@ -34,6 +55,9 @@
 
 case "$1" in
   start)
+    if ((NTPD_ENABLED != 1)) ; then
+      exit 0
+    fi
   	settick
 	startdaemon -g
 	;;