Comando Shell per leggere i registri dei dispositivi?


18

Su un computer a scheda singola che esegue Linux, c'è un modo per leggere il contenuto dei registri di configurazione del dispositivo che controllano l'hardware? Penso che sarebbe un involucro per inw().

Sto cercando qualcosa di equivalente al mdcomando U-boot memory dump ( ), da utilizzare nel contesto del debug del driver.


2
Questo può aiutare, ma assicurati di leggere l'intero thread: lists.arm.linux.org.uk/lurker/message/…
Gilles

Eventuali aggiornamenti su questo ??
Sen

@Sen: Negativo. Sono ancora perplesso. Ho letto il thread collegato, il che suggerisce che inw () non fa quello che pensavo: "inb () e gli amici sono solo per l'emulazione dello spazio degli indirizzi PCI e ISA IO." Ho usato un oscilloscopio e ho letto molto codice driver del kernel come le mie migliori opzioni successive.
spazzato il

Risposte:


14

Se si conosce l'indirizzo fisico del dispositivo, è possibile utilizzare devmem2.

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

3

Non so se puoi farlo direttamente con un kernel vanilla.

Ma dovrebbe essere abbastanza stretto scrivere un semplice driver che usi un "file" in / proc per esportare il contenuto di memoria che vorresti vedere.

Quindi puoi leggere il tuo "file" con un semplice script e avere accesso a quella memoria.


1

Potrei sbagliarmi completamente e totalmente su questo, e perdonami se lo sono, ma se il comando md di uboot è solo leggere gli indirizzi di memoria mappati sui registri dei dispositivi e restituirti i contenuti, non potresti leggere quelle stesse posizioni di memoria con un uso intelligente di dd if=/dev/mem ...?


Penso che questa strada abbia un potenziale, ma sembra che ci sia un problema. Questo comando eseguito come root: "dd if = / dev / mem bs = 1 skip = 10000 count = 512" restituisce questo errore: "dd: / dev / mem: indirizzo errato" Non sono sicuro di cosa significhi. Google mi dice che ha a che fare con le modifiche introdotte nel kernel 2.6, ma non ho ancora capito abbastanza su come aggirare il problema.
pregò il

1
Forse prova a usare il driver mtdblock. Dai un'occhiata: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Ma invece di puntarlo sulla RAM della tua scheda grafica, forse prova a indicarlo sui registri del dispositivo.
LawrenceC,

0

La configurazione del dispositivo PCI in / sys / bus / pci / devices / * / config è di qualche aiuto?


2
Questo è davvero un commento, non una risposta alla domanda. Si prega di utilizzare "Aggiungi commento" per lasciare un feedback per l'autore.
Renan,

@Renan "Questo è davvero un commento" Probabilmente non intenzionale, ma divertente, a prescindere. +1 per illuminare la mia giornata con la tautologia. modifica: ho appena realizzato che questo potrebbe sembrare sarcastico. Non intendo in questo modo.
root

0

busybox devmem

busybox devmemè la mia versione preferita di devmem2cui è stato menzionato: /unix//a/134661/32558

devmem2è venuto in molte versioni diverse da diversi upstream, in particolare Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Ma un'utilità Busybox è più canonica, ampiamente disponibile e mantenuta.

Ad esempio, è devmem2stato rifiutato da Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (ma un pacchetto Ubuntu è stato comunque creato).

Puoi scaricarlo su Ubuntu con:

sudo apt-get install busybox

Utilizzo: leggere 4 byte dall'indirizzo fisico 0x12345678:

sudo busybox devmem 0x12345678

Scrivi 0x9abcdef0a quell'indirizzo:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Ecco alcuni modi interessanti per testare devmem: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.