LINUX.ORG.RU

Текущее время без команды `date'


0

1

Нужно написать некоторый shell-сценарий, который будет выполняться в среде без команды `date' (debian/rescue: busybox-1.17.1), и который, помимо прочего, должен сообщать в отчёте о времени своего запуска.

Как действовать в этом случае, не прибегая к средствам лежащим за пределами shell? Может быть, где-то в /proc или /sys можно найти информацию о текущем времени?

★★

Последнее исправление: dumka (всего исправлений: 1)
Ответ на: комментарий от qwazer

man hwclock:

...
How hwclock Accesses the Hardware Clock
       hwclock  uses many different ways to get and set Hardware Clock values.
       The most normal way is to do I/O to the device special  file  /dev/rtc,
       which is presumed to be driven by the rtc device driver.  However, this
       method is not always available.  For one thing, the  rtc  driver  is  a
       relatively  recent  addition  to  Linux.   Older systems don't have it.
       Also, though there are versions of the rtc  driver  that  work  on  DEC
       Alphas,  there  appear  to  be plenty of Alphas on which the rtc driver
       does not work (a common symptom is hwclock hanging).  Moreover,  recent
       Linux  systems  have  more  generic support for RTCs, even systems that
       have more than one, so you might need to override the default by speci‐
       fying /dev/rtc0 or /dev/rtc1 instead.

       On older systems, the method of accessing the Hardware Clock depends on
       the system hardware.

       On an ISA system, hwclock can directly access the "CMOS memory"  regis‐
       ters  that  constitute  the clock, by doing I/O to Ports 0x70 and 0x71.
       It does this with actual I/O instructions and consequently can only  do
       it  if  running  with  superuser  effective  userid.  (In the case of a
       Jensen Alpha, there is no way for hwclock to execute those I/O instruc‐
       tions,  and so it uses instead the /dev/port device special file, which
       provides almost as low-level an interface to the I/O subsystem).

       This is a really poor method of accessing the clock, for all  the  rea‐
       sons  that  user space programs are generally not supposed to do direct
       I/O and disable interrupts.  Hwclock provides it because it is the only
       method  available on ISA and Alpha systems which don't have working rtc
       device drivers available.

       On an m68k system, hwclock can access the clock via the console driver,
       via the device special file /dev/tty1.

       hwclock  tries  to  use  /dev/rtc.  If it is compiled for a kernel that
       doesn't have that function or it is unable to  open  /dev/rtc  (or  the
       alternative  special  file  you've defined on the command line) hwclock
       will fall back to another method, if available.  On  an  ISA  or  Alpha
       machine,  you  can  force hwclock to use the direct manipulation of the
       CMOS registers without even trying /dev/rtc by specifying the  --direc‐
       tisa option.
...
qwazer
()
Ответ на: комментарий от qwazer

hwclock в данном случае так же реализуется средствами busybox.

kostik87 ★★★★★
()
Ответ на: комментарий от qwazer

Как я понимаю, одними только средствами shell для работы с /dev/rtc (/dev/rtc0) я не обойдусь, так?

dumka ★★
() автор топика

А что вообще доступно в busybox'е? Можно попробовать время брать из /proc/driver/rtc если он есть (но это _не_ системное время). Либо брать время относительно момента старта системы в секундах из /proc/uptime. Или постоянно делать touch /tmp/file (либо echo >/tmp/file) и брать время изменения этого файла при помощи ls или stat. Но это всё страшные костыли. Лучше или пересобрать busybox или переписать скрипт на C...

Deleted
()
Ответ на: комментарий от dumka

Значит busybox собран без поддержки date и hwclock либо пересоберите busybox с поддержкой этих утилит, либо разбирайте вывод ls либо stat.

Ну и запустите busybox без параметров, что бы увидеть поддержка каких утилит есть.

kostik87 ★★★★★
()
Ответ на: комментарий от Deleted

На всякий случай повторю: это _не_ системное время.

Во всяком случае, оно на него похоже достаточно для достижения моих целей.

Правильно ли я понимаю, что это не время ОС, а время «железки»?

When Linux developers talk about a «Real Time Clock», they usually mean something that tracks wall clock time and is battery backed so that it works even with system power off. Such clocks will normally not track the local time zone or daylight savings time...

/proc/driver/rtc ... the system clock RTC may expose itself using a procfs interface. If there is no RTC for the system clock, rtc0 is used by default. More information is (currently) shown here than through sysfs.

https://www.kernel.org/doc/Documentation/rtc.txt

dumka ★★
() автор топика
Последнее исправление: dumka (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.