Configurando o relógio HW com upstart

1

Eu tenho uma pequena placa embutida (Jetson TX1) que roda o Ubuntu 14.04. A placa de suporte do chip é montada para não ter provisões para uma bateria de reserva ou supercap para que o relógio perca tempo sempre que estiver desconectado (e normalmente não haverá conexão à internet para configurá-lo dessa maneira). Eu tenho um módulo de relógio I2C alimentado por bateria que eu usei antes. O relógio requer um módulo do kernel que eu compilei e instalei com sucesso (adaptei as instruções encontradas em aqui para o TX1.) Depois que o sistema é totalmente inicializado, posso definir o relógio do sistema via:

$> echo ds3231 0x68 | sudo tee /sys/class/i2c-dev/i2c-1/device/new_device
$> sudo hwclock -s -f /dev/rtc2

que funciona muito bem. Eu gostaria de ter isso feito automaticamente na inicialização e parece upstart é a ferramenta certa. Na verdade, já existe uma tarefa /etc/init/hwclock.conf para fazer isso com o RTC embutido (ou seja, aquele que perde seu tempo, porque não tem bateria), então acho que posso apenas seqüestrá-lo. Seus conteúdos são:

# hwclock - adjust system clock and timezone
#
# The hwclock task adjusts the system clock when the hardware clock is
# set to localtime (e.g. when dual-booting with Windows), and also
# ensures that the system timezone is set so that timestamps are written
# to FAT devices.

description "adjust system clock and timezone"

start on starting mountall

task

script
    . /etc/default/rcS
    [ "$UTC" = "yes" ] && tz="--utc" || tz="--localtime"
    [ "$BADYEAR" = "yes" ] && badyear="--badyear"
    exec hwclock --systz $tz --noadjfile $badyear
end script

Eu mudei para:

start on starting mountall

task

script
    /bin/echo "ds3231 0x68" > /sys/class/i2c-dev/i2c-1/device/new_device
    /sbin/hwclock -sf /dev/rtc2
end script

mas ao reiniciar, a hora do sistema não está definida e se eu olhar em /var/logs/upstart/hwclock.log esta mensagem é dada:

hwclock: Cannot access the Hardware Clock via any known method
hwclock: Use the --debug option tosee the details of our search for an access method.

que para mim parece que está executando a tarefa antes que o módulo do kernel seja carregado. Eu tentei outros eventos como start on filesystem e start on runlevel [2345] sem sucesso. no entanto, após o arranque do sistema, posso escrever apenas sudo hwclock -sf /dev/rtc2 e funciona.

ATUALIZAÇÃO: Eu apenas tentei o evento start on runlevel [23456] e isso realmente parece funcionar. Não sei por que adicionar o 6 aos runlevels faz com que funcione, já que pensei que o nível 6 fosse para reinicializar? Este é o melhor evento ou há um melhor para garantir que o relógio seja ajustado de forma confiável?

    
por schrödinbug 09.02.2017 / 15:41

0 respostas