Section: Maintenance Commands (8)
Updated: 2 Marzo 1998
Index Return to Main
Contents
hwclock - interroga y pone en hora el Reloj del Hardware (RTC)
otras opciones:
--utc --directisa --test --debug
Las abreviaciones mínimas de todas las opciones son aceptables, si no hay ambigüedad.
También se aceptan las opciones equivalentes -r, -w, -s, -a, -v, -u y -D, por compatibilidad con el programa "clock".
es una herramienta para acceder al Reloj del Hardware. Ud. puede mostrar la hora actual, poner el Reloj del Hardware a una hora especificada, poner el Reloj del Hardware a la Hora del Sistema, y poner el Tiempo del Sistema desde el Reloj del Hardware.
Ud. también puede ejecutar hwclock periódicamente para insertar o quitar tiempo del Reloj del Hardware para compensar desviaciones sistemáticas (en las que el reloj gana o pierde tiempo consistentemente a una cierta velocidad si se deja solo).
Ud. necesita exactamente una de las siguientes opciones para decirle a hwclock qué función realizar:
Este valor de la época se emplea cada vez que hwclock lee o pone el Reloj del Hardware.
Si Ud. especifica la opción --set, necesita la opción
siguiente. Si no, no es tenida en consideración.
hwclock --set --date=9/22/96 16:45:05
Por ejemplo,
hwclock --setepoch --epoch=1952
Las opciones siguientes se aplican a la mayoría de las funciones.
Si no especifica --utc cuando debiera, o viceversa, el poner y preguntar la hora del reloj del hardware acabarán funcionando mal.
El controlador de dispositivo rtc fue introducido en Linux versión 2.
Hay dos relojes principales en un sistema Linux:
El Reloj del Hardware: Esto es un reloj que corre independientemente de cualquier programa de control ejecutándose en la CPU e incluso cuando la máquina está apagada.
En un sistema ISA, este reloj está especificado como parte del estándar ISA. El programa de control puede leer o poner este reloj a un segundo entero, pero el programa de control también puede detectar los límites de los pulsos del reloj de 1 segundo, así que el reloj realmente tiene una precisión virtualmente infinita.
Este reloj se llama comúnmente el Reloj del Hardware, el reloj de tiempo real, el RTC, el reloj de la BIOS, y el reloj CMOS. El Reloj del Hardware, en esta forma con las iniciales en mayúsculas, se acuñó para el uso en hwclock porque todos los otros nombres son inapropiados hasta el punto de llevar a confusión.
El Tiempo del Sistema: Esto es el tiempo mantenido por un reloj de dentro del núcleo Linux y controlado por un interruptor de temporización. (En una máquina ISA, el interruptor de temporización es parte del estándar ISA.) Sólo tiene sentido mientras Linux está ejecutándose en la máquina. El Tiempo del Sistema es el número de segundos desde las 00:00:00 horas del 1 de Enero de 1970, UTC (o más sucintamente, el número de segundos desde 1969). El Tiempo del Sistema no es un entero, sin embargo. Tiene precisión virtualmente infinita.
El Tiempo del Sistema es el que tiene importancia. El propósito básico del Reloj del Hardware en un sistema Linux es mantener la hora mientras que Linux no está ejecutándose. Ud. inicia el Tiempo del Sistema al tiempo del Reloj del Hardware cuando Linux arranca, y ya no utiliza nunca más el Reloj del Hardware. Observe que en DOS, para quien se diseñó ISA, el Reloj del Hardware es el único reloj de tiempo real.
Es importante que el Tiempo del Sistema no tenga discontinuidades como las que podrían ocurrir si Ud. empleara el programa date(1) para ponerlo en hora mientras el sistema esté en ejecución. Sin embargo, Ud. puede hacer lo que quiera con el Reloj del Hardware mientras el sistema esté ejecutándose, y la siguiente vez que Linux arrancara, lo haría con la nueva hora ajustada del Reloj del Hardware. También puede emplear el programa adjtimex(8) para ajustar suavemente el Tiempo del Sistema mientras que el sistema está ejecutándose.
hwclock utiliza muchas formas diferentes de obtener y poner valores en el Reloj del Hardware. La forma más normal es hacer E/S en el fichero especial de dispositivo /dev/rtc, que se supone controlado por el controlador del dispositivo rtc. Sin embargo, este método no está siempre disponible. Por una cosa: el controlador rtc es una adición relativamente reciente a Linux. Sistemas más antiguos no lo tienen.
En sistemas más viejos, el método de acceder al Reloj del Hardware depende del hardware del sistema.
En un sistema ISA, hwclock puede acceder directamente a los registros de la "memoria CMOS" que constituye el reloj, haciendo E/S a los puertos 0x70 y 0x71. Esto sólo lo puede hacer si se ejecuta con el UID efectivo 0 (esto es, con privilegios de súper-usuario).
Esto es realmente un pobre método de acceder al reloj, por la razón de que los programas en el espacio de usuario se supone generalmente que no deben hacer E/S directa y deshabilitar interrupciones. Hwclock lo proporciona porque es el único método disponible con núcleos Linux más antiguos para máquinas ISA.
En un sistema m68k (68000 de Motorola), hwclock puede acceder al reloj a través del controlador de consola, mediante el fichero especial de dispositivo /dev/tty1.
En un Alpha, de DEC, /dev/rtc es la única posibilidad.
Hay o había algunos sistemas Linux en Alpha que no tienen /dev/rtc y hay o había programas que accedían al reloj a través de E/S casi directa usando /dev/port. Sin embargo, esto no es un método tan bueno como el de /dev/rtc y tales programas no fueron tan ampliamente empleados como para que hwclock tuviera ninguna necesidad de ser compatible hacia atrás con ellos. Así que hwclock no proporciona el método de /dev/port y consecuentemente no funcionará en un Alpha que no tenga /dev/rtc.
hwclock intenta emplear /dev/rtc. Si se ha compilado para un núcleo que no tiene esa función o es incapaz de abrir /dev/rtc, hwclock intentará otro método, si hay alguno disponible. En una máquina ISA, Ud. puede forzar a hwclock a usar la manipulación directa de los registros de la CMOS sin ni siquiera intentar /dev/rtc especificando la opción --directisa.
El Reloj del Hardware no es usualmente muy preciso. Sin embargo, mucha de su imprecisión es completamente predecible; gana o pierde la misma cantidad de tiempo cada día. Esto se llama desviación sistemática. La función de "ajuste" de hwclock le permite hacer correcciones sistemáticas para corregir la desviación sistemática.
Funciona así: Hwclock mantiene un fichero, /etc/adjtime, que mantiene alguna información histórica. Este fichero se llama el fichero adjtime.
Suponga que Ud. empieza sin fichero adjtime. Ud. da una orden hwclock --set para poner el Reloj del Hardware a la hora verdadera actual. Hwclock crea el fichero adjtime y graba en él la hora actual como la última vez que el reloj se calibró. 5 días más tarde, el reloj ha ganado 10 segundos, así que Ud. da otra orden hwclock --set para ponerlo con 10 segundos menos. Hwclock ajusta el fichero adjtime para mostrar la hora actual como la última vez que el reloj se calibró, y graba dos segundos por día como la velocidad de desviación sistemática. Pasan 24 horas, y entonces Ud. da una orden hwclock --adjust. Hwclock consulta el fichero adjtime y ve que el reloj gana 2 segundos por día cuando se le deja solo, y que se le ha dejado solo exactamente un día. Así que sustrae 2 segundos del Reloj del Hardware. Entonces graba la hora actual como la última vez que se ajustó el reloj. Otras 24 horas pasan y Ud. da otra orden hwclock --adjust. Hwclock hace lo mismo: sustrae 2 segundos y actualiza el fichero adjtime con la hora actual como la última vez que el reloj se ajustó.
Cada vez que Ud. calibra (pone en hora) el reloj, hwclock recalcula la velocidad de desviación sistemática basado en cuánto tiempo ha pasado desde la última calibración, cuánto tiempo ha pasado desde el último ajuste, qué velocidad de desviación se suponía en cualesquiera ajustes intervinientes, y la cantidad que el reloj está desviado actualmente de la hora verdadera.
Se arrastra una pequeña cantidad de error en cualquier momento en que hwclock pone el reloj en hora, de forma que rehúsa hacer un ajuste que vaya a ser de menos de 1 segundo. Más tarde, cuando Ud. pida un ajuste de nuevo, la desviación acumulada será de más de un segundo y hwclock hará el ajuste entonces.
Es bueno hacer un hwclock --adjust justo antes del hwclock --hctosys en la hora del arranque del sistema, y quizás periódicamente mientras que el sistema está ejecutándose, mediante cron.
El formato del fichero adjtime es:
Línea 1: 3 números: 1) velocidad de desviación sistemática en segundos por día, número en base diez en coma flotante; 2) número resultante de segundos desde 1969 UTC del más reciente ajuste o calibración, entero en base diez; 3) cero (por compatibilidad con clock ).
Línea 2: 1 número: El número resultante de segundos desde 1969 UTC de la calibración más reciente.
Ud. puede emplear con hwclock un fichero adjtime que fuera usado previamente con el programa clock.
(8), date(1), gettimeofday(2), settimeofday(2), crontab(1)
Escrito por Bryan Henderson, en Septiembre de 1996 (bryanh@giraffe-data.com), basándose en el trabajo hecho en el programa clock de Charles Hedrick, Rob Hooft y Harald König. Mire el código fuente para la historia completa y los créditos.
This document was created by man2html, using
the manual pages.
Time: 20:28:08 GMT, January 21, 2005