Wie kann ich das Linux-RootFS von U-Boot aus booten, indem ich die RootFS-Partition nach Label übergebe?
Ich verwende u-boot als Bootloader und die Karte ist eine RedPitaya. Das Linux ist ein angepasstes Linux, das auf dem für die Karte verfügbaren stabilen Ubuntu-Image basiert.
U-Boot wird in der ersten Partition der SD-Karte mit dem Linux-Kernel und dem Gerätebaum geflasht. Ich versuche, das Root-Dateisystem auf einer externen USB-Festplatte zu booten
Ich gebe an, dass ich die Festplatte booten kann, wenn ich die „klassische“ /dev/sdxn-Namenskonvention verwende.
Ich habe es bereits mit den folgenden Parametern versucht, aber beide sind fehlgeschlagen:
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
So wie ich es bei meinen Recherchen verstanden habe, wird /dev/disk/by-label von udev ausgefüllt und ist daher beim Übergeben der Boot-Argumente an den Linux-Kernel in u-boot nicht verfügbar.
Außerdem habe ich herausgefunden, dass die Funktionalität zum Booten vom Label nicht in den Linux-Kernel integriert ist, wie Sie in dieser Datei sehen könnendo_mounts.cdirekt vor dev_t name_to_dev_t(const char *name)
der Funktionsdefinition.
Von nun an möchte ich eine Möglichkeit finden, die als „ ROOTFS
auf der externen USB-Festplatte“ gekennzeichnete Partition zu booten.
Ich sehe da zwei unterschiedliche Lösungen:
1 - Integrieren Sie die By-Label-Boot-Funktionalität in den Linux-Kernel, indem Sie etwas wie
if (strncmp(name, "LABEL=", 6) == 0) {
name += 6;
res = devt_from_label(name);
if (!res)
goto fail;
goto done;
}
in do_mounts.c
und implementieren Sie die Funktion devt_from_label
.
2 – Verwenden Sie ein kleines Root-Dateisystem auf der zweiten Partition der SD-Karte, um den Gerätenamen anhand der Bezeichnung aufzulösen und den Kernel-Boot mit dem ersetzten Gerätenamen neu zu starten.
Was denken Sie darüber? Welches wäre am „einfachsten“ umzusetzen?
Vielleicht vergesse ich etwas Wichtiges oder jemand anderem ist das Gleiche bereits gelungen.
Wie dem auch sei, ich wäre froh, etwas Hilfe zu bekommen, um es zu erreichen
Antwort1
Das Problem ist, dass die LABEL- und UUID-Verarbeitung nicht vom Linux-Kernel, sondern über ein initramfs erfolgt, das Sie ebenfalls bereitstellen müssen. Wenn Sie das umgehen möchten, müssen Sie PARTUUID verwenden, was U-Boot über den part-Befehl für Sie ermitteln und weitergeben kann.