Em um computador de placa única executando Linux, existe uma maneira de ler o conteúdo dos registros de configuração de dispositivos que controlam o hardware? Eu acho que seria um invólucro para inw()
.
Estou procurando por algo equivalente ao comando U-boot memory dump (md
), para ser usado no contexto de depuração do driver.
Se você souber o endereço físico do dispositivo, poderá usar o devmem2.
devmem2 <physical address> <size (b/h/w)> [value]
Não sei se você pode fazê-lo diretamente com um kernel Vanilla.
Mas deve ser bastante complicado escrever um driver simples que use um "arquivo" em/proc para exportar o conteúdo da memória que você gostaria de ver.
Então você pode ler seu "arquivo" com um script simples e ter acesso a essa memória.
Eu posso estar completamente e totalmente errado sobre isso, e me perdoe se estiver, mas se o comando md do uboot estiver apenas lendo endereços de memória mapeados para registros de dispositivos e devolvendo o conteúdo para você, você não poderia ler esses mesmos locais de memória com uso inteligente? do dd if=/dev/mem ...
?
busybox devmem
busybox devmem
é minha versão preferida de devmem2
mencionado em: https://unix.stackexchange.com/a/134661/32558
devmem2
veio em várias versões diferentes de vários upstreams, principalmente o Buildroot http://free-electrons.com/pub/mirror/devmem2.c
Mas um utilitário Busybox é mais canônico, amplamente disponível e mantido.
Por exemplo,devmem2
foi rejeitado pelo Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (mas um pacote Ubuntu foi criado, mesmo assim).
Você pode obtê-lo no Ubuntu com:
Sudo apt-get install busybox
Uso: leia 4 bytes do endereço físico 0x12345678
:
Sudo busybox devmem 0x12345678
Escrever 0x9abcdef0
para esse endereço:
Sudo busybox devmem 0x12345678 w 0x9abcdef0
Aqui estão algumas maneiras legais de testar a saída de devmem
: https://stackoverflow.com/questions/12040303/accessing-physical-address-from-user-space/45127890#4512789
A configuração do dispositivo PCI está em/sys/bus/pci/devices/*/config de alguma ajuda?
Existe um utilitário chamado pcimem ( https://github.com/billfarrow/pcimem )
Você pode usá-lo para leitura e gravação de/para dispositivos pci.