Comando Shell para ler registros de dispositivos?

18

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 algo equivalente ao mdcomando dump ( ) da memória U-boot , para ser usado no contexto da depuração do driver.

pingswept
fonte
2
Isso pode ajudar, mas não deixe de ler o tópico inteiro: lists.arm.linux.org.uk/lurker/message/…
Gilles 'SO- stop
Alguma atualização sobre isso ??
Sen
@ Sen: Negativo. Eu ainda estou perplexo. Eu li o encadeamento vinculado, o que sugere que inw () não faz o que eu pensava: "inb () e amigos são apenas para emulação do espaço de endereço PCI e ISA IO". Eu tenho usado um osciloscópio e lido muitos códigos de driver do kernel como minhas próximas melhores opções.
pingswept

Respostas:

14

Se você souber o endereço físico do dispositivo, poderá usar o devmem2.

devmem2 <physical address> <size (b/h/w)> [value]
Eric
fonte
3

Não sei se você pode fazê-lo diretamente com um kernel de baunilha.

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.

Johan
fonte
1

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? de dd if=/dev/mem ...?

LawrenceC
fonte
Eu acho que essa rota tem potencial, mas parece que há um problema. Este comando executado como root: "dd se = / dev / mem bs = 1 pular = 10000 count = 512" fornece este erro: "dd: / dev / mem: endereço incorreto" Não sei o que isso significa. O Google me diz que tem algo a ver com as alterações introduzidas no kernel 2.6, mas ainda não entendi o suficiente sobre isso para contornar isso.
pingswept
11
Talvez tente usar o driver mtdblock. Verifique isto: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Mas, em vez de apontá-lo para a RAM da sua placa gráfica, talvez tente apontá-lo para os registros do dispositivo.
LawrenceC
0

A configuração do dispositivo PCI está em / sys / bus / pci / devices / * / config de alguma ajuda?

user3487
fonte
2
Este é realmente um comentário, não uma resposta para a pergunta. Por favor, use "adicionar comentário" para deixar um feedback para o autor.
Renan
@ Renan "Este é realmente um comentário" Provavelmente não intencional, mas engraçado, independentemente. +1 por alegrar meu dia com tautologia. edit: Acabei de perceber que isso pode parecer sarcástico. Não falo assim.
root
0

busybox devmem

busybox devmemé minha versão preferida devmem2mencionada em: /unix//a/134661/32558

devmem2veio em várias versões diferentes de vários upstreams, principalmente no Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Mas um utilitário Busybox é mais canônico, amplamente disponível e mantido.

Por exemplo, devmem2foi 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

Escreva 0x9abcdef0para esse endereço:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Aqui estão algumas maneiras legais de testar devmem: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890

Ciro Santilli adicionou uma nova foto
fonte
0

Existe um utilitário chamado pcimem ( https://github.com/billfarrow/pcimem )

Você pode usá-lo para ler e gravar em / de dispositivos pci.

simba
fonte