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.


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]

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.


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 ...?


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?


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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.