¿Cómo puedo probar la RAM en busca de corrupción de datos en un sistema basado en ARM?

20

Tengo un dispositivo incrustado. Está basado en ARM, con Linux 2.6.31 y tiene 256 MB de RAM.

Quería obtener algunas ideas / consejos sobre cuál es la forma más efectiva de probar la RAM del dispositivo para detectar daños en los datos. ¿Hay alguna prueba / software que alguien pueda sugerir?

Nota:

Tengo memtester ahora. Lo obtuve después de la sugerencia de Ulrich Dangel (abajo).

También me he mtestconfigurado desde el uboot ahora.

¿Alguna otra prueba / enfoque que pueda usar?

Ankur Agarwal
fuente
2
Tenga en cuenta que esta es una CPU ARM, no una x86; desafortunadamente, Memtest86 + no funcionará en este caso.
Renan
Tengo memtester. ¿Alguna otra prueba / enfoque que pueda usar?
Ankur Agarwal
1
@abc ¿qué más quieres? Creo que tiene otros problemas si este método no produce el resultado que desea. mtestbásicamente hace lo mismo que memtest86 +. Básicamente tiene diferentes opciones, ejecute la prueba de memoria desde su sistema operativo como Linux (esto sería, memtesterpero puede tener problemas para probar toda la región física). También puede usar un mini sistema (uboot) para probar su memoria ( mtest)
Ulrich Dangel
¿El procesador es de Marvell? Tengo la misma pregunta sobre un procesador de red marvell, que es exactamente la misma configuración (ARM / 256MB RAM / Linux 2.6.31) que la suya.
Tim Wu
Aquí hay una pregunta similar de desbordamiento de pila . Todas las pruebas aquí pueden encontrar algunos problemas. No encontrarán todos los problemas y, de hecho, esto es muy difícil de hacer. Solo muy buenas herramientas y modelos de simulación de placa pueden verificar esto; No software. Si se hace esto, el único problema será un chip DDR (o posiblemente un controlador host) y Memtester y mtest pueden encontrarlos. Sin embargo, si dicen que todo está bien; No descarte al 100% un problema de DDR.
ruido sin sentido

Respuestas:

21

La solución general para probar la memoria es escribir un patrón específico como 0xFFFFFFFFen su memoria y luego leerlo y comparar el resultado. Por supuesto, puede y debe alterar el patrón para descubrir problemas. Algunas soluciones memtest86+también generan patrones aleatorios y cambian la dirección que usan para escribir en la memoria. Para obtener información más detallada sobre los algoritmos utilizados en memtest86, eche un vistazo a su página de tecnología . Todas las soluciones proporcionadas en esta publicación utilizan básicamente la misma idea subyacente.

Si desea ejecutar su prueba desde Linux (mencionó Linux en su publicación) eche un vistazo a memtester y al paquete de memtest, que ambos deberían funcionar con arm. Para comenzar, debe usar memtester, ya que básicamente hace exactamente lo que desea.

Probar su memoria desde Linux tiene algunas desventajas, ya que no puede probar toda su memoria física ya que el núcleo también necesita memoria. Para probar la memoria con uboot (es mucho más pequeño que el kernel de Linux) eche un vistazo al comando mtest integrado . Le permite especificar el rango de direcciones, el patrón y la iteración. Con mtest deberías poder hacer pruebas bastante extensas sin depender de un sistema operativo. Solo tiene que asegurarse de utilizar rangos de memoria válidos; de lo contrario, es posible que sobrescriba la ubootregión de memoria.

Si las pruebas proporcionadas por mtest no son suficientes, por supuesto, solo puede extender uboot e integrar características de prueba de memoria adicionales en uboot.

Ulrich Dangel
fuente
OK, tengo memtester. ¿Alguna otra prueba que pueda hacer?
Ankur Agarwal
1
¿Algún otro enfoque de prueba que pueda probar? Estoy pensando en probar RAM desde uboot.
Ankur Agarwal
@abc ok, agregué una nota sobre el comando uboots mtest
Ulrich Dangel
1
Comencé a usar comandos uboot y ahora veo que el comando uboot de visualización de memoria se atasca en el mediobist > md.w 0x00000023 10 00000023:
Ankur Agarwal
u-boot tiene soporte para dos mtest diferentes. Compile con CONFIG_SYS_ALT_MEMTEST para una prueba de memoria más extensa que la predeterminada.
m__