| Submitter | Lauri Hintsala |
|---|---|
| Date | Dec. 13, 2011, 6:58 a.m. |
| Message ID | <1323759539-23945-1-git-send-email-lauri.hintsala@bluegiga.com> |
| Download | mbox | patch |
| Permalink | /patch/16775/ |
| State | New |
| Headers | show |
Comments
Op 13 dec. 2011 om 07:58 heeft Lauri Hintsala <lauri.hintsala@bluegiga.com> het volgende geschreven: > Timestamp checking has been broken by the commit > 2078af333d704fd894a2dedbc19cef5775cdadbb. Fix timestamp checking > and clean the code. > > cc: sgw@linux.intel.com > cc: gary@mlbassoc.com > > Signed-off-by: Lauri Hintsala <lauri.hintsala@bluegiga.com> > --- > .../initscripts/initscripts-1.0/bootmisc.sh | 12 ++++++------ > 1 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh > index 03fd67c..6d68b35 100755 > --- a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh > +++ b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh > @@ -62,16 +62,16 @@ then > fi > > # Set the system clock from hardware clock > -# If the timestamp is 1 day or more recent than the current time, > +# If the timestamp is more recent than the current time, > # use the timestamp instead. > /etc/init.d/hwclock.sh start > if test -e /etc/timestamp > then > - SYSTEMDATE=`date -u +%2m%2d%2H%2M%4Y` > - read TIMESTAMP < /etc/timestamp > - NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE + 10000 \)` > - if [ $NEEDUPDATE -eq 1 ]; then > - date -u $TIMESTAMP > + SYSTEMDATE=`date -u +%4Y%2m%2d` > + TIMESTAMP=`cat /etc/timestamp | awk '{ print substr($0,9,4) substr($0,1,4); }'` > + NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE \)` > + if [ $NEEDUPDATE -eq 1 ]; then > + date -u `cat /etc/timestamp` > /etc/init.d/hwclock.sh stop > fi > fi This changes the format of timestamp, which breaks the code in image.bbclass. Have a look at http://git.angstrom-distribution.org/cgi-bin/cgit.cgi/meta-angstrom/commit/?id=e003be8cba3d387f44a502fdbebf58e774afd677 for backwards compatible Logic > -- > 1.7.4.1 > > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
On 12/13/2011 09:45 AM, Koen Kooi wrote: > > > Op 13 dec. 2011 om 07:58 heeft Lauri > Hintsala<lauri.hintsala@bluegiga.com> het volgende geschreven: > >> Timestamp checking has been broken by the commit >> 2078af333d704fd894a2dedbc19cef5775cdadbb. Fix timestamp checking >> and clean the code. >> >> cc: sgw@linux.intel.com cc: gary@mlbassoc.com >> >> Signed-off-by: Lauri Hintsala<lauri.hintsala@bluegiga.com> --- >> .../initscripts/initscripts-1.0/bootmisc.sh | 12 >> ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) >> >> diff --git >> a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh >> b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh index >> 03fd67c..6d68b35 100755 --- >> a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh +++ >> b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh @@ >> -62,16 +62,16 @@ then fi >> >> # Set the system clock from hardware clock -# If the timestamp is 1 >> day or more recent than the current time, +# If the timestamp is >> more recent than the current time, # use the timestamp instead. >> /etc/init.d/hwclock.sh start if test -e /etc/timestamp then - >> SYSTEMDATE=`date -u +%2m%2d%2H%2M%4Y` - read TIMESTAMP< >> /etc/timestamp - NEEDUPDATE=`expr \( $TIMESTAMP \> >> $SYSTEMDATE + 10000 \)` - if [ $NEEDUPDATE -eq 1 ]; then - >> date -u $TIMESTAMP + SYSTEMDATE=`date -u +%4Y%2m%2d` + >> TIMESTAMP=`cat /etc/timestamp | awk '{ print substr($0,9,4) >> substr($0,1,4); }'` + NEEDUPDATE=`expr \( $TIMESTAMP \> >> $SYSTEMDATE \)` + if [ $NEEDUPDATE -eq 1 ]; then + date >> -u `cat /etc/timestamp` /etc/init.d/hwclock.sh stop fi fi > > This changes the format of timestamp, which breaks the code in > image.bbclass. No. Patch doesn't change the format of timestamp file. Format "+%4Y%2m%2d" is used only for comparing system date and timestamp file. > Have a look at > http://git.angstrom-distribution.org/cgi-bin/cgit.cgi/meta-angstrom/commit/?id=e003be8cba3d387f44a502fdbebf58e774afd677 > for backwards compatible Logic Timestamp file is still saved by save-rtc.sh script and it is untouched. Lauri Hintsala
On Tue, 2011-12-13 at 08:58 +0200, Lauri Hintsala wrote: > Timestamp checking has been broken by the commit > 2078af333d704fd894a2dedbc19cef5775cdadbb. Fix timestamp checking > and clean the code. > > cc: sgw@linux.intel.com > cc: gary@mlbassoc.com > > Signed-off-by: Lauri Hintsala <lauri.hintsala@bluegiga.com> > --- > .../initscripts/initscripts-1.0/bootmisc.sh | 12 ++++++------ > 1 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh > index 03fd67c..6d68b35 100755 > --- a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh > +++ b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh > @@ -62,16 +62,16 @@ then > fi > > # Set the system clock from hardware clock > -# If the timestamp is 1 day or more recent than the current time, > +# If the timestamp is more recent than the current time, > # use the timestamp instead. > /etc/init.d/hwclock.sh start > if test -e /etc/timestamp > then > - SYSTEMDATE=`date -u +%2m%2d%2H%2M%4Y` > - read TIMESTAMP < /etc/timestamp > - NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE + 10000 \)` > - if [ $NEEDUPDATE -eq 1 ]; then > - date -u $TIMESTAMP > + SYSTEMDATE=`date -u +%4Y%2m%2d` > + TIMESTAMP=`cat /etc/timestamp | awk '{ print substr($0,9,4) substr($0,1,4); }'` > + NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE \)` > + if [ $NEEDUPDATE -eq 1 ]; then > + date -u `cat /etc/timestamp` > /etc/init.d/hwclock.sh stop > fi > fi For reference, the code in the boot process is trying not to cause fork/exec calls. This is why it does: read TIMESTAMP < /etc/timestamp since this is faster than forking to run cat. Could we fix this in a different way to avoid the fork/execs? I appreciate this is a small detail but over the whole boot process it mounts up! Cheers, Richard
On Tue, 2011-12-13 at 12:26 +0000, Richard Purdie wrote: > On Tue, 2011-12-13 at 08:58 +0200, Lauri Hintsala wrote: > > # Set the system clock from hardware clock > > -# If the timestamp is 1 day or more recent than the current time, > > +# If the timestamp is more recent than the current time, > > # use the timestamp instead. > > /etc/init.d/hwclock.sh start > > if test -e /etc/timestamp > > then > > - SYSTEMDATE=`date -u +%2m%2d%2H%2M%4Y` > > - read TIMESTAMP < /etc/timestamp > > - NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE + 10000 \)` > > - if [ $NEEDUPDATE -eq 1 ]; then > > - date -u $TIMESTAMP > > + SYSTEMDATE=`date -u +%4Y%2m%2d` > > + TIMESTAMP=`cat /etc/timestamp | awk '{ print substr($0,9,4) substr($0,1,4); }'` > > + NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE \)` > > + if [ $NEEDUPDATE -eq 1 ]; then > > + date -u `cat /etc/timestamp` > > /etc/init.d/hwclock.sh stop > > fi > > fi > > > For reference, the code in the boot process is trying not to cause > fork/exec calls. This is why it does: > > read TIMESTAMP < /etc/timestamp > > since this is faster than forking to run cat. Could we fix this in a > different way to avoid the fork/execs? For the same reason it would probably be nice to replace that call to "expr" (which was in the old version too) with a shell expansion. p.
On 12/13/2011 02:36 PM, Phil Blundell wrote: > On Tue, 2011-12-13 at 12:26 +0000, Richard Purdie wrote: >> On Tue, 2011-12-13 at 08:58 +0200, Lauri Hintsala wrote: >>> # Set the system clock from hardware clock >>> -# If the timestamp is 1 day or more recent than the current time, >>> +# If the timestamp is more recent than the current time, >>> # use the timestamp instead. >>> /etc/init.d/hwclock.sh start >>> if test -e /etc/timestamp >>> then >>> - SYSTEMDATE=`date -u +%2m%2d%2H%2M%4Y` >>> - read TIMESTAMP< /etc/timestamp >>> - NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE + 10000 \)` >>> - if [ $NEEDUPDATE -eq 1 ]; then >>> - date -u $TIMESTAMP >>> + SYSTEMDATE=`date -u +%4Y%2m%2d` >>> + TIMESTAMP=`cat /etc/timestamp | awk '{ print substr($0,9,4) substr($0,1,4); }'` >>> + NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE \)` >>> + if [ $NEEDUPDATE -eq 1 ]; then >>> + date -u `cat /etc/timestamp` >>> /etc/init.d/hwclock.sh stop >>> fi >>> fi >> >> >> For reference, the code in the boot process is trying not to cause >> fork/exec calls. This is why it does: >> >> read TIMESTAMP< /etc/timestamp >> >> since this is faster than forking to run cat. Could we fix this in a >> different way to avoid the fork/execs? > > For the same reason it would probably be nice to replace that call to > "expr" (which was in the old version too) with a shell expansion. SYSTEMDATE=`date -u +%4Y%2m%2d` TIMESTAMP=`awk '{ print substr($0,9,4) substr($0,1,4); }' < /etc/timestamp` if [ $TIMESTAMP -gt $SYSTEMDATE ]; then read TIMESTAMP < /etc/timestamp date -u $TIMESTAMP /etc/init.d/hwclock.sh stop fi How about this? Lauri
On Tue, 2011-12-13 at 14:58 +0200, Lauri Hintsala wrote: > SYSTEMDATE=`date -u +%4Y%2m%2d` > TIMESTAMP=`awk '{ print substr($0,9,4) substr($0,1,4); }' < /etc/timestamp` > if [ $TIMESTAMP -gt $SYSTEMDATE ]; then > read TIMESTAMP < /etc/timestamp > date -u $TIMESTAMP > /etc/init.d/hwclock.sh stop > fi > > How about this? You could lose the call to "awk" as well: read RAWTIMESTAMP < /etc/timestamp TIMESTAMP=${RAWTIMESTAMP#????????}${RAWTIMESTAMP%????????} Or, er, something like that. You might need to tweak the patterns a bit depending on what exactly the format of /etc/timestamp actually is, but I guess you get the idea. p.
On 12/13/2011 03:07 PM, Phil Blundell wrote: > On Tue, 2011-12-13 at 14:58 +0200, Lauri Hintsala wrote: >> SYSTEMDATE=`date -u +%4Y%2m%2d` >> TIMESTAMP=`awk '{ print substr($0,9,4) substr($0,1,4); }'< /etc/timestamp` >> if [ $TIMESTAMP -gt $SYSTEMDATE ]; then >> read TIMESTAMP< /etc/timestamp >> date -u $TIMESTAMP >> /etc/init.d/hwclock.sh stop >> fi >> >> How about this? > > You could lose the call to "awk" as well: > > read RAWTIMESTAMP< /etc/timestamp > TIMESTAMP=${RAWTIMESTAMP#????????}${RAWTIMESTAMP%????????} > > Or, er, something like that. You might need to tweak the patterns a bit > depending on what exactly the format of /etc/timestamp actually is, but > I guess you get the idea. Yes I got your idea and it seems to work. Thanks for your tips! Second try: SYSTEMDATE=`date -u +%4Y%2m%2d` read TIMESTAMP < /etc/timestamp if [ ${TIMESTAMP:8:4}${TIMESTAMP:0:4} -gt $SYSTEMDATE ]; then date -u $TIMESTAMP /etc/init.d/hwclock.sh stop fi Is this okay? Should I generate patch? Lauri
On Tue, 2011-12-13 at 15:18 +0200, Lauri Hintsala wrote: > On 12/13/2011 03:07 PM, Phil Blundell wrote: > > read RAWTIMESTAMP< /etc/timestamp > > TIMESTAMP=${RAWTIMESTAMP#????????}${RAWTIMESTAMP%????????} > > Yes I got your idea and it seems to work. Thanks for your tips! > > Second try: > > SYSTEMDATE=`date -u +%4Y%2m%2d` > read TIMESTAMP < /etc/timestamp > if [ ${TIMESTAMP:8:4}${TIMESTAMP:0:4} -gt $SYSTEMDATE ]; then > date -u $TIMESTAMP > /etc/init.d/hwclock.sh stop > fi > > Is this okay? Should I generate patch? Is the "${var:X:Y}" substring notation part of POSIX? I have a feeling that it might be a GNU extension, and it didn't seem to work in dash when I tried it just now. p.
On 12/13/2011 03:24 PM, Phil Blundell wrote: > Is the "${var:X:Y}" substring notation part of POSIX? I have a feeling > that it might be a GNU extension, and it didn't seem to work in dash > when I tried it just now. I tested it in ash of busybox. I see it doesn't work in dash. So your suggestion is the best I know. Hopefully final version :) SYSTEMDATE=`date -u +%4Y%2m%2d` read TIMESTAMP < /etc/timestamp if [ ${TIMESTAMP#????????}${TIMESTAMP%????????} -gt $SYSTEMDATE ]; then date -u $TIMESTAMP /etc/init.d/hwclock.sh stop fi Lauri
Patch
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh index 03fd67c..6d68b35 100755 --- a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh +++ b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh @@ -62,16 +62,16 @@ then fi # Set the system clock from hardware clock -# If the timestamp is 1 day or more recent than the current time, +# If the timestamp is more recent than the current time, # use the timestamp instead. /etc/init.d/hwclock.sh start if test -e /etc/timestamp then - SYSTEMDATE=`date -u +%2m%2d%2H%2M%4Y` - read TIMESTAMP < /etc/timestamp - NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE + 10000 \)` - if [ $NEEDUPDATE -eq 1 ]; then - date -u $TIMESTAMP + SYSTEMDATE=`date -u +%4Y%2m%2d` + TIMESTAMP=`cat /etc/timestamp | awk '{ print substr($0,9,4) substr($0,1,4); }'` + NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE \)` + if [ $NEEDUPDATE -eq 1 ]; then + date -u `cat /etc/timestamp` /etc/init.d/hwclock.sh stop fi fi
Timestamp checking has been broken by the commit 2078af333d704fd894a2dedbc19cef5775cdadbb. Fix timestamp checking and clean the code. cc: sgw@linux.intel.com cc: gary@mlbassoc.com Signed-off-by: Lauri Hintsala <lauri.hintsala@bluegiga.com> --- .../initscripts/initscripts-1.0/bootmisc.sh | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)