Discussion:
[yocto] Busybox hwclock.sh initscript issues
Craig McQueen
2015-09-18 05:28:24 UTC
Permalink
I'm using Yocto dizzy. I've found a couple of issues with the Busybox hwclock.sh initscript.

1) The script checks that /sbin/hwclock exists at the start. But after that it runs hwclock without an explicit /sbin/hwclock path. So it only works if /sbin/ is in the PATH. Thus it doesn't run properly when called from e.g. cronie which doesn't run with /sbin/ in the PATH.

2) The bootmisc.sh initscript uses the time from /etc/timestamp if the hwclock time is older. That's good. But then by default, hwclock.sh runs after bootmisc.sh, and unconditionally overwrites the system time from the hwclock. So on a system without a functional hwclock, the /etc/timestamp feature basically doesn't work. One solution is modify INITSCRIPT_PARAMS_${PN}-hwclock so it doesn't run at start-up (I am doing that in a busybox bbappend).
--
Craig McQueen

--
Gary Thomas
2015-09-18 11:30:39 UTC
Permalink
Post by Craig McQueen
I'm using Yocto dizzy. I've found a couple of issues with the Busybox hwclock.sh initscript.
1) The script checks that /sbin/hwclock exists at the start. But after that it runs hwclock without an explicit /sbin/hwclock path. So it only works if /sbin/ is in the PATH. Thus it doesn't run properly when called from e.g. cronie which doesn't run with /sbin/ in the PATH.
2) The bootmisc.sh initscript uses the time from /etc/timestamp if the hwclock time is older. That's good. But then by default, hwclock.sh runs after bootmisc.sh, and unconditionally overwrites the system time from the hwclock. So on a system without a functional hwclock, the /etc/timestamp feature basically doesn't work. One solution is modify INITSCRIPT_PARAMS_${PN}-hwclock so it doesn't run at start-up (I am doing that in a busybox bbappend).
Why do you think it doesn't work? On a system without a
functioning hardware clock, at least the time stamp moves
forward on every boot/shutdown.
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
--
Craig McQueen
2015-09-21 00:19:44 UTC
Permalink
Post by Craig McQueen
Post by Craig McQueen
I'm using Yocto dizzy. I've found a couple of issues with the Busybox
hwclock.sh initscript.
Post by Craig McQueen
1) The script checks that /sbin/hwclock exists at the start. But after that it
runs hwclock without an explicit /sbin/hwclock path. So it only works if /sbin/
is in the PATH. Thus it doesn't run properly when called from e.g. cronie
which doesn't run with /sbin/ in the PATH.
Post by Craig McQueen
2) The bootmisc.sh initscript uses the time from /etc/timestamp if the
hwclock time is older. That's good. But then by default, hwclock.sh runs after
bootmisc.sh, and unconditionally overwrites the system time from the
hwclock. So on a system without a functional hwclock, the /etc/timestamp
feature basically doesn't work. One solution is modify
INITSCRIPT_PARAMS_${PN}-hwclock so it doesn't run at start-up (I am doing
that in a busybox bbappend).
Why do you think it doesn't work? On a system without a functioning
hardware clock, at least the time stamp moves forward on every
boot/shutdown.
It doesn't work because after the bootmisc.sh runs, which sets the time according to /etc/timestamp, then hwclock.sh runs and sets the time to that of the non-functional hwclock (2000-01-01 00:00 in my case).

To fix it, I've made a busybox bbappend file with the following:

INITSCRIPT_PARAMS_${PN}-hwclock = "stop 20 0 1 6 ."

That means hwclock.sh isn't run at start-up (but actually bootmisc.sh runs it as part of its handling of /etc/timestamp). That makes it work the way I want, and how I suspect the bootmisc.sh author intended it.
--
Craig McQueen

--
Loading...