Commande shell pour lire les registres de périphériques?


18

Sur un ordinateur à carte unique exécutant Linux, existe-t-il un moyen de lire le contenu des registres de configuration de périphérique qui contrôlent le matériel? Je pense que ce serait un emballage pour inw().

Je cherche quelque chose d'équivalent à la commande U-boot memory dump ( md), à utiliser dans le contexte du débogage des pilotes.


2
Cela peut aider, mais assurez-vous de lire l'intégralité du fil de discussion: lists.arm.linux.org.uk/lurker/message/…
Gilles 'SO- arrête d'être méchant'

Des mises à jour à ce sujet ??
Sen

@Sen: négatif. Je suis toujours perplexe. J'ai lu le fil lié, ce qui suggère que inw () ne fait pas ce que je pensais: "inb () et ses amis ne sont que pour l'émulation de l'espace d'adressage PCI et ISA IO." J'ai utilisé un oscilloscope et lu beaucoup de code de pilote de noyau comme mes prochaines meilleures options.
pingswept

Réponses:


14

Si vous connaissez l'adresse physique de l'appareil, vous pouvez utiliser devmem2.

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

3

Je ne sais pas si vous pouvez le faire directement avec un noyau vanille.

Mais il devrait être assez simple d'écrire un pilote simple qui utilise un "fichier" dans / proc pour exporter le contenu de la mémoire que vous aimeriez voir.

Ensuite, vous pouvez lire votre "fichier" avec un simple script et avoir accès à cette mémoire.


1

Je pourrais être complètement et totalement faux à ce sujet, et pardonnez-moi si je le suis, mais si la commande md d'uboot ne fait que lire les adresses mémoire mappées aux registres de l'appareil et vous renvoyer le contenu, ne pourriez-vous pas lire ces mêmes emplacements de mémoire avec une utilisation intelligente de dd if=/dev/mem ...?


Je pense que cette voie a du potentiel, mais il semble qu'il y ait un problème. Cette commande exécutée en tant que root: "dd if = / dev / mem bs = 1 skip = 10000 count = 512" donne cette erreur: "dd: / dev / mem: Bad address" Je ne suis pas sûr de ce que cela signifie. Google me dit que c'est quelque chose à voir avec les changements introduits dans le noyau 2.6, mais je ne comprends pas encore assez à ce sujet pour contourner ce problème.
pingswept

1
Essayez peut-être d'utiliser le pilote mtdblock. Vérifiez ceci: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Mais au lieu de le pointer vers la RAM de votre carte graphique, essayez peut-être de le pointer vers les registres de l'appareil.
LawrenceC

0

La configuration du périphérique PCI dans / sys / bus / pci / devices / * / config est-elle utile?


2
C'est vraiment un commentaire, pas une réponse à la question. Veuillez utiliser "ajouter un commentaire" pour laisser des commentaires à l'auteur.
Renan

@Renan "C'est vraiment un commentaire" Probablement involontaire, mais drôle, malgré tout. +1 pour égayer ma journée avec la tautologie. edit: Je viens de réaliser que cela pourrait sembler sarcastique. Je ne le pense pas de cette façon.
root

0

busybox devmem

busybox devmemest ma version préférée devmem2qui a été mentionnée à: /unix//a/134661/32558

devmem2est venu dans de nombreuses versions différentes de plusieurs amonts, notamment Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Mais un utilitaire Busybox est plus canonique, largement disponible et maintenu.

Par exemple, a devmem2été rejeté de Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (mais un paquet Ubuntu a néanmoins été créé).

Vous pouvez l'obtenir dans Ubuntu avec:

sudo apt-get install busybox

Utilisation: lire 4 octets à partir de l'adresse physique 0x12345678:

sudo busybox devmem 0x12345678

Écrivez 0x9abcdef0à cette adresse:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Voici quelques façons intéressantes de tester devmem: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.