Configuração do RTC - Jetson Orin Nano
ll /dev/rtc*
Para alterar o valor de ATTR{hctosys}
de 1
para 0
no arquivo de regras do udev, você pode usar o comando sudo sed
. Aqui está um exemplo de como fazer isso:
Localize o 50-udev-default.rules
, que pode está em lugares diferentes de acordo com a versão do sistema.
ls /etc/udev/rules.d/50-udev*
OU
ls /usr/lib/udev/rules.d/50-udev*
Warning
Talvez o arquivo esteja em /usr/lib/udev/rules.d/
sudo sed -i 's/ATTR{hctosys}=="1"/ATTR{hctosys}=="0"/' /etc/udev/rules.d/50-udev-default.rules
Este comando usa o sed
para substituir todas as ocorrências de ATTR{hctosys}=="1"
por ATTR{hctosys}=="0"
no arquivo /etc/udev/rules.d/50-udev-default.rules
.
Após executar este comando, você pode reiniciar o sistema ou recarregar as regras do udev para aplicar as alterações.
sudo reboot
Certifique-se de verificar se as alterações funcionaram conforme esperado.
ll /dev/rtc*
Antes de tudo verifique o horário atual do sistema.
timedatectl status
Observe o horário Local time
, RTC time
.
Para gravar a data e hora vamos fazer isso com este comando:
sudo date --set="2024-03-06 18:23:00"
timedatectl status
Com esses comandos configuramos o tempo rtc.
Grava a hora do Sistema no RTC
sudo hwclock -w -f /dev/rtc0
Se quiser conferir a data e hora do RTC
sudo hwclock -r -f /dev/rtc0
O comando, sudo hwclock --hctosys
, é usado para sincronizar o relógio do hardware (hwclock
) com o sistema (system clock
). E para garantir que o relógio do hardware seja sincronizado corretamente com o relógio do sistema a cada inicialização, criaremos um serviço.
- Crie um arquivo de serviço. Por exemplo, você pode usar o comando
sudo nano
para editar um arquivo chamadosync-hwclock.service
:
sudo nano /etc/systemd/system/sync-hwclock.service
- Adicione o seguinte conteúdo ao arquivo:
[Unit]
Description=Sync Hardware Clock with System Clock
[Service]
Type=oneshot
ExecStart=/sbin/hwclock --hctosys
[Install]
WantedBy=default.target
-
Salve o arquivo e feche o editor.
-
Recarregue os serviços do systemd para que ele reconheça o novo serviço:
sudo systemctl daemon-reload
- Ative o serviço para que ele seja iniciado durante a inicialização:
sudo systemctl enable sync-hwclock.service
- Agora, você pode iniciar o serviço manualmente:
sudo systemctl start sync-hwclock.service
O serviço será automaticamente iniciado durante a próxima inicialização do sistema.
sudo reboot
Temos como configurar o rtc
padrão desativando o ntp
, esse processo atualiza a data e hora do sistema e do rtc definido.
Para configurar o RTC, devemos fechar a sincronização NTP. Vamos desativá-lo com estes comandos:
sudo timedatectl set-local-rtc 0
sudo timedatectl set-ntp 0
Agora, vamos alterar a hora do sistema para verificar o funcionamento do RTC.
sudo timedatectl set-time "2024-03-06 18:23:00"
Se quiser restaurar todas as alterações, você pode habilitar o NTP.
sudo timedatectl set-ntp 1
Primeiro defina a data e hora com este comando:
sudo date --set="2024-03-06 18:23:00"
timedatectl status
Agora execute os passos:
sudo sed -i 's/ATTR{hctosys}=="1"/ATTR{hctosys}=="0"/' /etc/udev/rules.d/50-udev-default.rules
sudo hwclock -w -f /dev/rtc0
touch sync-hwclock.service
echo "[Unit]" >> sync-hwclock.service
echo "Description=Sync Hardware Clock with System Clock" >> sync-hwclock.service
echo "" >> sync-hwclock.service
echo "[Service]" >> sync-hwclock.service
echo "Type=oneshot" >> sync-hwclock.service
echo "ExecStart=/sbin/hwclock --hctosys" >> sync-hwclock.service
echo "" >> sync-hwclock.service
echo "[Install]" >> sync-hwclock.service
echo "WantedBy=default.target" >> sync-hwclock.service
sudo mv sync-hwclock.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable sync-hwclock.service
sudo systemctl start sync-hwclock.service
Reinicie o sistema:
sudo reboot
Após a reinicio do sistema verifique a hora
timedatectl status
Reinstalar o sincronizador ntp:
sudo apt install --reinstall systemd-timesyncd
O serviço systemd-timesyncd
é projetado principalmente para sincronizar o relógio do sistema com a hora fornecida por servidores NTP. No entanto, ele não sincroniza automaticamente o relógio do RTC (Real Time Clock) no hardware. Para criar um serviço que será executado quando o NTP
sincronizar, faça isso:
Vamos criar o script /usr/local/bin/update-rtc.sh
para quando o sistema for iniciado ou reiniciado com sucesso ele seja executado:
- Crie um arquivo novo:
sudo nano /usr/local/bin/update-rtc.sh
- Copie e Cole no arquivo:
#!/bin/bash
# Verifica se o NTP está sincronizado
if timedatectl status | grep -q "System clock synchronized: yes"; then
# Atualiza o RTC
hwclock -w -u
# Cancela o timer
systemctl stop my-ntp-sync-timer.timer
fi
-
Salve e feche.
-
Dê permissão para executar
sudo chmod +x /usr/local/bin/update-rtc.sh
- Crie um novo arquivo de serviço. Execute o seguinte comando:
sudo nano /etc/systemd/system/sync-rtc-on-system.service
- Adicione o seguinte conteúdo ao arquivo:
[Unit]
Description=Serviço para atualização do RTC
# Dependências do timer
After=network-online.target
[Service]
Type=simple
# Caminho do script que será executado
ExecStart=/usr/local/bin/update-rtc.sh
- Salve e feche o arquivo.
- Crie um novo arquivo de timer. Execute o seguinte comando:
sudo nano /etc/systemd/system/sync-rtc-on-system.timer
- Adicione o seguinte conteúdo ao arquivo:
[Unit]
Description=Timer para Atualização do RTC
[Timer]
# A cada minuto
OnCalendar=*-*-* *:*:*
Unit=sync-rtc-on-system.service
[Install]
WantedBy=timers.target
- Salve e feche o arquivo.
- Recarregue o systemd para ler as alterações:
sudo systemctl daemon-reload
- Ative o novo timer para que ele seja iniciado automaticamente:
sudo systemctl enable sync-rtc-on-system.timer
A partir de agora, sempre que o sistema for iniciado, o timer sync-rtc-on-system
será executado automaticamente para sincronizar o RTC com a hora do sistema. Certifique-se de testar isso e ajustar conforme necessário com base nas necessidades do seu sistema.
Para testar esse serviço
Para realizar o teste, vamos desativar o ntp
e o serviço que criamos e alterar a data para uma que não seja atual
sudo timedatectl set-ntp 0
sudo timedatectl set-time "2024-03-06 18:23:00"
Após vamos ver o horário do sistema:
timedatectl status
Ative o ntp
e veja que a hora do sistema é atualizada, mas não a do RTC
:
sudo timedatectl set-ntp 1
timedatectl status
Reinicie e veja a hora depois:
sudo reboot
timedatectl status