Não é possível usar a implementação do busybox do hwclock

3

Eu tenho um kernel gerado pelo buildroot (3.6.11) e um sistema de arquivos raiz rodando em um dispositivo x86. Ele usa o busybox e estou tentando definir o relógio de hardware do BIOS usando hwclock . Eu recebo este erro sempre que invoco hwclock :

can't open '/dev/misc/rtc': No such file or directory

Eu entendo isso, pois só tenho um arquivo de dispositivo /dev/rtc presente no meu sistema. No entanto, usando strace , vejo que hwclock já tentou abrir /dev/rtc e falha com a mensagem

open("/dev/rtc",O_READONLY|O_LARGEFILE) = -1 ENODEV (No such device)

Após inspecionar a configuração do kernel do Real Time Clock na seção Drivers de Dispositivos da configuração do kernel, vejo que ativei a opção para /dev/rtcN (dispositivos de caractere) e /proc/driver/rtc (procfs para rtc0). Eu também só tenho o driver RTC de plataforma 'CMOS' estilo PC selecionado. No entanto, sob a seção de ajuda aqui, eu li o seguinte:

Say "yes" here to get direct support for the real time clock found in every PC or ACPI-based system, and some other boards. Specifically the original MC146818, compatibles like those in PC south bridges, the DS12887 or M48T86, some multifunction or LPC bus chips, and so on.

Your system will need to define the platform device used by this driver, otherwise it won't be accessible

Estou muito confuso sobre porque não consigo abrir o arquivo '/ dev / rtc'. Está presente e recebo saída quando invoco

cat /proc/driver/rtc

Há mais alguma coisa que eu preciso fazer para registrar o dispositivo? Eu estava pensando em talvez mudar o driver para se tornar um módulo e fazer um insmod após o boot, mas eu não sei se é uma boa idéia ou não. Alguém pode sugerir como posso consertar isso ou obter mais detalhes sobre o que deu errado?

EDITAR Da leitura on-line, executei dmesg | grep -i rtc e obtive a seguinte saída:

[ ... ] RTC time: 16:01:07, date 09/24/13
[ ... ] rtc_cmos 00:02: RTC can wake from S4
[ ... ] rtc_cmos 00:02: rtc core: registered rtc_cmos as rtc0
[ ... ] rtc0: alarms up to one year, y3k, 114 bytes nvram

O que me faz pensar por que não tenho /dev/rtc0 . Estou usando uma tabela de dispositivos estáticos em buildroot , então é possível que eu precise alterar isso para fornecer um nó de dispositivo /dev/rtc0 , pois não estou usando udev ?

    
por mathematician1975 24.09.2013 / 16:07

1 resposta

2

Eu posso explicar alguns dos sintomas, mas não dizer como fazer com que hwclock funcione.

Muitas vezes há alguma confusão sobre o significado da palavra dispositivo em um contexto unix. Pode significar:

  • Uma entrada do sistema de arquivos do tipo dispositivo de caractere ou dispositivo de bloco.
  • A entidade do kernel por trás desse nó do sistema de arquivos.
  • A entidade lógica conectada a um barramento de hardware.
  • Um componente de hardware fisicamente separado.

Na mensagem “no such device”, a palavra device refere-se à entidade do kernel. Parece não haver nenhuma entidade do kernel que tenha registrado o dispositivo /dev/rtc . Dada a saída do dmesg, o driver CMOS RTC está presente no kernel e encontrou um RTC e o número 0.

Os dispositivos (mais uma vez, no sentido da entidade do kernel) são acessados por meio de arquivos de dispositivos (primeiro sentido acima) que são identificados por seu tipo (caractere ou dispositivo), seu número principal e seu número menor. O nome é irrelevante para o kernel, portanto, /dev/rtc vs /dev/rtc0 não é um problema, contanto que hwclock encontre o arquivo correto. Verifique se /dev/rtc tem o número correto do dispositivo:

crw------- 1 root root 254, 0 Sep 24 13:29 /dev/rtc

Se /dev/rtc for um link simbólico, ele deve ser um link para rtc0 , que deve ter o número do dispositivo (254,0) como acima.

    
por 25.09.2013 / 01:09