Enviando sinal ao usuário de que um determinado driver está carregado

0

Estas são algumas das mensagens que chegam no console da placa Microzed (Cortex A9):

[Sat May 17 18:18:26.603 2014] DMA: preallocated 256 KiB pool for atomic coherent allocations
[Sat May 17 18:18:26.603 2014] xgpiops e000a000.ps7-gpio: gpio at 0xe000a000 mapped to 0xf004e000
[Sat May 17 18:18:26.603 2014] usbcore: registered new interface driver usbfs
[Sat May 17 18:18:26.624 2014] usbcore: registered new interface driver hub
[Sat May 17 18:18:26.624 2014] usbcore: registered new device driver usb
[Sat May 17 18:18:26.624 2014] Switching to clocksource xttcps_clocksource
[Sat May 17 18:18:26.624 2014] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82) is a xuartps
[Sat May 17 18:18:26.624 2014] console [ttyPS0] enabled
[Sat May 17 18:18:26.634 2014] xdevcfg f8007000.ps7-dev-cfg: ioremap f8007000 to f0052000 with size 100
[Sat May 17 18:18:26.662 2014] xqspips e000d000.ps7-qspi: master is unqueued, this is deprecated
[Sat May 17 18:18:26.662 2014] spi spi32766.0: setup: unsupported mode bits 3
[Sat May 17 18:18:26.662 2014] xqspips e000d000.ps7-qspi: can't setup spi32766.0, status -22
[Sat May 17 18:18:26.662 2014] spi_master spi32766: spi_device register error /amba@0/ps7-qspi@e000d000/ps7-qspi@0
[Sat May 17 18:18:26.662 2014] xqspips e000d000.ps7-qspi: at 0xE000D000 mapped to 0xF0054000, irq=51
[Sat May 17 18:18:26.671 2014] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[Sat May 17 18:18:26.680 2014] ULPI transceiver vendor/product ID 0x0424/0x0007

Após a linha:

[Sat May 17 18:18:26.624 2014] usbcore: registered new device driver usb

Eu quero verificar se o driver USB está realmente carregado. Uma maneira que pensei em ver isso seria acender um LED imediatamente após esta linha ser impressa no console.

Mas como faço isso? Existe alguma outra maneira melhor de fazer isso?

Meu principal requisito é medir o tempo desde a ativação até que o driver USB seja carregado. Isso pode ser feito se eu receber algum sinal na placa no momento em que o driver USB for carregado. Vou capturar este sinal junto com o power ON, e isso me dará informações precisas sobre o tempo em que o USB é carregado.

Essa precisão não pode ser alcançada observando os carimbos de data e hora no arquivo de log, pois as mensagens não vêm imediatamente e há um tempo considerável gasto antes que a mensagem seja iniciada.

    
por user2799508 17.05.2014 / 15:51

1 resposta

1

Primeiro, observe que o que você está tentando descobrir não é quando um driver é carregado - por exemplo, um driver embutido no kernel (em vez de carregado como um módulo) é carregado pelo bootloader. O que você está tentando descobrir é quando o driver executa sua inicialização, presumivelmente quando termina sua inicialização, para que os periféricos que usam esse driver sejam agora utilizáveis.

Se você quiser produzir algum tipo de sinal visível quando um driver terminar sua inicialização, você terá que corrigir o kernel. Não há um gancho de uso geral da terra do usuário.

Se você estiver interessado em um periférico em particular, em oposição a um driver de "camada inferior", como usbcore , você poderá executar as regras do udev. Isso só entra em jogo assim que o kernel terminar de inicializar e o userland (especificamente o udev) tiver iniciado.

Dito isto, o que você realmente quer é o tempo na mensagem de log. Para “medir o tempo desde o momento em que ligou ao driver USB carregado”, o registro de data e hora na mensagem de registro é exatamente a informação correta. O registro de data e hora na mensagem é a hora em que o evento acontece, não a hora em que a mensagem de log é exibida (o que pode acontecer muito mais tarde, especialmente se o dispositivo de registro ainda não tiver sido inicializado ou se você o comando dmesg ).

Para realizar sua medição, você precisará saber o tempo de ativação em relação ao relógio do dispositivo. Se o dispositivo não tiver bateria, de modo que seu relógio sempre comece em uma origem específica ao ligar, o tempo decorrido será simplesmente o registro de data e hora em que você está interessado menos a origem. Se o dispositivo tiver um relógio persistente, primeiro sincronize esse relógio com outro computador (por exemplo, com NTP) e, em seguida, meça o tempo do evento de inicialização com a maior precisão possível.

    
por 19.05.2014 / 04:31