¿Comando de Shell para leer registros de dispositivos?

18

En una computadora de placa única con Linux, ¿hay alguna manera de leer el contenido de los registros de configuración del dispositivo que controlan el hardware? Creo que sería una envoltura para inw().

Estoy buscando algo equivalente al mdcomando U-boot memory dump ( ), para usar en el contexto de la depuración del controlador.

pingswept
fuente
2
Esto puede ayudar, pero asegúrese de leer el hilo completo: lists.arm.linux.org.uk/lurker/message/…
Gilles 'SO- deja de ser malvado'
¿Alguna actualización sobre esto?
Sen
@Sen: Negativo. Todavía estoy perplejo. Leí el hilo vinculado, que sugiere que inw () no hace lo que pensaba: "inb () y los amigos son solo para emular el espacio de direcciones PCI e ISA IO". He estado usando un osciloscopio y leyendo una gran cantidad de código del controlador del kernel como mis siguientes mejores opciones.
pingswept

Respuestas:

14

Si conoce la dirección física del dispositivo, puede usar devmem2.

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

No sé si puedes hacerlo directamente con un núcleo de vainilla.

Pero debería ser bastante sencillo escribir un controlador simple que use un "archivo" en / proc para exportar el contenido de la memoria que le gustaría ver.

Luego puede leer su "archivo" con un script simple y tener acceso a esa memoria.

Johan
fuente
1

Podría estar completamente equivocado sobre esto, y perdóname si lo estoy, pero si el comando md de uboot solo está leyendo direcciones de memoria asignadas a registros de dispositivos y devolviéndote el contenido, ¿no podrías leer esas mismas ubicaciones de memoria con un uso inteligente? de dd if=/dev/mem ...?

LawrenceC
fuente
Creo que esta ruta tiene potencial, pero parece que hay un problema. Este comando ejecutado como root: "dd if = / dev / mem bs = 1 skip = 10000 count = 512" da este error: "dd: / dev / mem: Bad address" No estoy seguro de lo que eso significa. Google me dice que tiene algo que ver con los cambios introducidos en el kernel 2.6, pero todavía no entiendo lo suficiente como para solucionarlo.
pingswept
1
Tal vez intente usar el controlador mtdblock. Mira esto: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Pero en lugar de apuntarlo a la RAM de tu tarjeta gráfica, tal vez intente apuntarlo a los registros del dispositivo.
LawrenceC
0

¿La configuración del dispositivo PCI está en / sys / bus / pci / devices / * / config de alguna ayuda?

usuario3487
fuente
2
Esto es realmente un comentario, no una respuesta a la pregunta. Utilice "agregar comentario" para dejar comentarios para el autor.
Renan
@Renan "Esto es realmente un comentario" Probablemente no intencional, pero divertido, independientemente. +1 por alegrar mi día con la tautología. editar: Acabo de darme cuenta de que esto podría parecer sarcástico. No lo digo de esa manera.
root
0

busybox devmem

busybox devmemes mi versión preferida de la devmem2cual se mencionó en: /unix//a/134661/32558

devmem2vino en muchas versiones diferentes de varias fuentes, especialmente Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Pero una utilidad Busybox es más canónica, ampliamente disponible y mantenida.

Por ejemplo, devmem2fue rechazado de Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (sin embargo, se creó un paquete de Ubuntu).

Puedes obtenerlo en Ubuntu con:

sudo apt-get install busybox

Uso: leer 4 bytes de la dirección física 0x12345678:

sudo busybox devmem 0x12345678

Escribe 0x9abcdef0a esa dirección:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Aquí hay algunas maneras geniales de probar devmem: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente