ARM Linux y UBoot - ¿Puedo hacer que se pueda escribir un MTD de solo lectura?

4

Tengo varios dispositivos Linux integrados instalados en los sitios de los clientes. Tenemos un kernel de Linux actualizado que estamos preparados para implementar en estos dispositivos. El problema es que en estos dispositivos, los argumentos de U-Boot se especifican de modo que:


bootargs = {....} mtdparts=atmel_nand:16M(kernel)ro,240M(rootfs)

Por lo tanto, no puedo usar flash_erase para nandwrite el kernel o U-Boot a través de SSH porque MTD0 es de solo lectura. No puedo ajustar los argumentos de U-Boot sin acceso en serie. Para muchos de los clientes, descolgar todos los dispositivos y conectarlos en serie e interrumpir U-Boot para llegar a los bootargs sería extremadamente incómodo. ¿Hay alguna forma de cambiar MTD0 de ro a rw desde el kernel una vez que se haya cargado?

    
pregunta trycatch

3 respuestas

7

¿Ha considerado crear un módulo de kernel simple que pueda insertar para hacer que las particiones MTD sean grabables? Tuve el mismo problema y pude resolverlo al escribir un módulo del kernel. Para simplificar, simplemente seguí adelante e hice que todos los dispositivos MTD puedan escribirse. Básicamente, el módulo tiene que hacer algo como esto en su función de inicio:

struct mtd_info *mtd;
int x;
bool keep_going = true;

for (x = 0; keep_going; x++) {
    mtd = get_mtd_device(NULL, x);
    if (!IS_ERR(mtd)) {
        mtd->flags |= MTD_WRITEABLE;
        put_mtd_device(mtd);
    } else {
        keep_going = false;
    }
}

Después de insertar este módulo, pude usar flash_erase y nandwrite con éxito mientras arrancaba el kernel, mientras que antes, flash_erase me decía: "error 13 (permiso denegado)"

    
respondido por el dougg3
0

Otra opción es usar la utilidad fw_setenv (construida con u-boot) para modificar las variables de entorno guardadas de u-boot desde Linux. Eso requeriría un reinicio para ejecutarse con el nuevo bootargs , a diferencia de cargar un módulo del kernel, pero es mucho menos trabajo que usar un cable serial. También es una herramienta útil para otras situaciones.

La documentación está aquí: enlace

Lo principal que hay que saber es que fw_setenv y fw_printenv usan un archivo de configuración para saber dónde almacena u-boot su entorno en un almacenamiento no volátil, y tiene que coincidir con lo que se compiló u-boot.

    
respondido por el remicles2
-1

La solución habitual es

mount / -o remount,rw
    
respondido por el pjc50

Lea otras preguntas en las etiquetas