Pasar el sistema de archivos raíz por etiqueta al kernel de Linux

Pasar el sistema de archivos raíz por etiqueta al kernel de Linux

¿Cómo puedo iniciar Linux rootfs desde u-boot pasando la partición rootfs por etiqueta?

Estoy usando u-boot como gestor de arranque y la tarjeta es RedPitaya. Linux es un Linux personalizado basado en la imagen estable de Ubuntu disponible para la tarjeta.

U-boot se actualiza en la primera partición de la tarjeta SD con el kernel de Linux y el árbol de dispositivos. Estoy intentando iniciar el sistema de archivos raíz en un disco duro USB externo.

Preciso que puedo arrancar el HDD si uso la convención de nomenclatura "clásica" /dev/sdxn.


Ya lo intenté con los siguientes parámetros pero ambos fallaron:

console=ttyPS0,115200 root=/dev/disk/by-label/ROOTFS rw rootfstype=ext4 earlyprintk rootwait isolcpus=1

console=ttyPS0,115200 root=LABEL=ROOTFS rw rootfstype=ext4 earlyprintk rootwait isolcpus=1

Por lo que entendí al realizar investigaciones, /dev/disk/by-label está poblado por udev, por lo que no está disponible en u-boot al pasar los argumentos de arranque al kernel de Linux.

También descubrí que la funcionalidad para arrancar desde la etiqueta no está integrada al kernel de Linux como se puede ver en este archivo.do_mounts.cjusto antes de dev_t name_to_dev_t(const char *name)la definición de la función.

Entonces, a partir de ahora me gustaría encontrar una manera de iniciar la partición etiquetada como ROOTFSen el disco duro USB externo.


Veo dos soluciones diferentes allí:

1 - Integre la funcionalidad de arranque por etiqueta en el kernel de Linux agregando algo como

if (strncmp(name, "LABEL=", 6) == 0) {
        name += 6;
        res = devt_from_label(name);
        if (!res)
            goto fail;
        goto done;
}

en do_mounts.ce implementar la función devt_from_label.

2 - Utilice un pequeño rootfs en la segunda partición de la tarjeta SD para resolver el nombre del dispositivo a partir de su etiqueta y reinicie el arranque del kernel con el nombre del dispositivo reemplazado.

Qué piensa usted al respecto ? ¿Cuál sería el "más sencillo" de implementar?

Quizás me estoy olvidando de algo importante o alguien ya logró hacer lo mismo.

De todos modos, me encantaría recibir ayuda para lograrlo.

Respuesta1

El problema es que el manejo de LABEL y UUID no lo realiza el kernel de Linux, sino a través de initramfs, que usted también deberá proporcionar. Si desea evitar eso, necesita usar PARTUUID, que es algo que a través del comando part, U-Boot puede determinar por usted y transmitirlo.

información relacionada