Acceder a /dev/mem congela Ubuntu

Acceder a /dev/mem congela Ubuntu

Estoy usando la última versión de Ubuntu Linux con un kernel personalizado (4.2.0-36-generic), en el que deshabilité CONFIG_STRICT_DEVNEM, porque necesito volcar y buscar algunos términos en la memoria durante un proyecto.

Sin embargo, cuando se utiliza:

  • dd if=/dev/mempara imprimirlo en pantalla,
  • dd if=/dev/mem of=/home/user/Documents/file.dumppara guardarlo como un archivo, o
  • dd if=/dev/mem | hexdump -C | grep 'term'para encontrar directamente lo que estoy buscando,

el sistema se congela y se reinicia durante el proceso.

Lo he consultado df -hy mi disco tiene mucho espacio libre. Además, el proceso siempre se detiene después de escribir de 2,1 Gb a 2,5 Gb, de una RAM de 8 Gb y antes de llegar a direcciones que comienzan con 4 (si hay alguna diferencia). Además, comprueba /var/log/syslogy /var/log/kern.logno muestra nada relevante antes de la congelación.

Además, el uso de parámetros bs=1G count=2copia con éxito los primeros 2 GB de la memoria, pero luego, al intentar bs=1G count=2 skip=2obtener los siguientes 2 GB, el sistema se congela nuevamente.

¿Sugeriría alguna solución para que sea posible volcar la memoria completa o alguna otra forma de buscar términos directamente en la memoria?

Respuesta1

Creo que es posible que te encuentres con algún área de memoria utilizada por PCI/ACPI o algún tipo de hardware similar. Es posible que haya un dispositivo con memoria asignada al que no le gusta que se acceda a él. No puedo decir qué dirección exactamente causa el problema, pero es habitual que algunas áreas especiales estén ubicadas justo por debajo del límite de 4 GB.

En una máquina con 4 GB de memoria, el kernel imprime lo siguiente al arrancar:

BIOS-e820: 0000000000000000 - 000000000009e400 (usable)
BIOS-e820: 000000000009e400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf690000 (usable)
BIOS-e820: 00000000cf690000 - 00000000cf6e0000 (reserved)
BIOS-e820: 00000000cf6e0000 - 00000000cf6e3000 (ACPI NVS)
BIOS-e820: 00000000cf6e3000 - 00000000cf6f0000 (ACPI data)
BIOS-e820: 00000000cf6f0000 - 00000000cf700000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)

Parte de la memoria utilizable está por encima del límite de 4 GB en 0x100000000y parece haber huecos entre 0xcf700000y 0xfec00000.

También se muestran en , las áreas correspondientes a la memoria "utilizable" /proc/iomem, marcadas como "RAM del sistema". (El archivo también contiene información sobre las otras áreas de memoria). Es posible que esté más seguro simplemente leyendo desde esas áreas.

$ grep "System RAM" /proc/iomem 
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM

información relacionada