Ramdisk vom USB-Stick einhängen unmöglich!

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Joe58

Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 22.06.2019 13:25:55

Guten Tag,

ich habe folgende Kernel Befehlszeile:

Code: Alles auswählen

[    0.000000@0] Kernel command line: init=/init console=ttyS0,115200n8 hlt no_console_suspend vmalloc=256m mem=1024m logo=osd1,loaded,panel,debug hdmitx=vdacoff,powermode1,unplug_powerdown a9_clk_max=800000000 root=/dev/sda1 rootwait rootdelay=5 rootfstype=ext2
Nun schmiert der Kernel ab:

Code: Alles auswählen

[   11.573959@0] VFS: Cannot open root device "sda1" or unknown-block(8,1)
[   11.575016@0] Please append a correct "root=" boot option; here are the available partitions:
[   11.583537@0] fd00        15611904 cardblksd  driver: cardblk
[   11.589262@0]   fd01         3855600 cardblksd1 00000000-0000-0000-0000-000000000cardblksd1
[   11.597591@0]   fd02         2097152 cardblksd2 00000000-0000-0000-0000-000000000cardblksd2
[   11.605923@0] 0800          984064 sda  driver: sd
[   11.610697@0]   0801          983040 sda1 00000000-0000-0000-0000-000000000sda1
[   11.617983@0] ** enable watchdog
[   11.621201@0] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)
Wer findet den Fehler? :(

Viele Grüße,

Joe

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Tintom » 23.06.2019 10:23:06

Was ist das für ein Kernel? Was ist das für ein Gerät auf dem gebootet wird?

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 23.06.2019 11:53:01

Es ist der Kernel 3.0.8 und dieser wurde extra für ein Gerät kompiliert, um auf diesem Debian armhf drauf zu installieren. Bin halt nun bei der Ramdisk stecken geblieben. Das Gerät ist mein ehemaliges Tablet. Jetzt ist es nur noch ein Mainboard mit Netzteil. Das Mainboard ist vom Hersteller Yifangdigital und das Mainboard heißt M805NC-MB.

willy4711

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von willy4711 » 23.06.2019 12:11:41

Ohne von dem ganzen Zeugs Ahnung zu haben, was da bei dir in der Kernel-Befehlszeile steht,fällt mir auf:

Code: Alles auswählen

root=/dev/sda1
Das scheint mir, was ich so von Grub weiß, nicht korrekt.

Bei mir wird
a) die nummrierung der Festplatten gem. Bios-Nummerierung angegeben
und
b) die UIID der Laufwerks, von dem gebootet werden soll.

dev/sdirgendwas soll nicht benutzt werden, da das sich ja auch mal schnell ändern kann.

Kleiner Ausschnitt aus der /boot/grub/grub.cfg

Code: Alles auswählen

insmod part_msdos
insmod ext2
set root='hd2,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd2,msdos1 --hint-efi=hd2,msdos1 --hint-baremetal=ahci2,msdos1  3ad66fa8-f9bd-4807-93db-7b05e752ce15
else
  search --no-floppy --fs-uuid --set=root 3ad66fa8-f9bd-4807-93db-7b05e752ce15

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 23.06.2019 12:23:25

Zunächst Erstmal danke für Eure Hilfen. :)

Die Kernelbefehlszeile heißt:

Code: Alles auswählen

[    0.000000@0] Kernel command line: init=/init console=ttyS0,115200n8 hlt no_console_suspend vmalloc=256m mem=1024m logo=osd1,loaded,panel,debug hdmitx=vdacoff,powermode1,unplug_powerdown a9_clk_max=800000000 root=0801 rootfstype=ext2 rootwait rootdelay=5
Die dazugehörige Fehlermeldung heißt:

Code: Alles auswählen

[   11.709150@0] VFS: Cannot open root device "0801" or unknown-block(8,1)
Allerdings boote ich nicht vom Grub, sondern von U-Boot. Ist ein eingebettetes System. Aber es ist ja immer /dev/sda1 und es gibt keine weiteren USB-Sticks, oder Festplatten, welche bei mir auch nur per USB gingen am Gerät, deswegen bleibt es bei /dev/sda1.

mludwig
Beiträge: 793
Registriert: 30.01.2005 19:35:04

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von mludwig » 23.06.2019 12:38:14

Hat denn der Kernel alle notwendigen Treiber _eingebaut_? Wenn er direkt von sda1 booten soll, dürfen die notwendigen Treiber für den Zugriff darauf nicht als Module vorliegen, sondern müssen direkt eingebaut sein. Die Module würde er ja erst finden, wenn die Disk eingebunden ist.

Wenn die Treiber nicht da sind, gibts auch kein sda1

Also je nach System: usb Treiber, ext2 Treiber, ev. der für den Chipsatz notwendige Treiber usw.

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 23.06.2019 12:52:35

Hi mludwig,

danke für Deine Hilfe. :)

Edit:
mludwig hat geschrieben: ↑ zum Beitrag ↑
23.06.2019 12:38:14
Wenn die Treiber nicht da sind, gibts auch kein sda1
Der Kernel zeigt ja sda1 als Option an, bzw. 0801. Also ist es schonmal nicht der Treiber in Schuld.

Und jetzt? :P

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 23.06.2019 14:39:35

Mir ist folgendes noch eingefallen:

Die Ramdisk rootfs.cpio auf dem USB-Stick schreiben:

Code: Alles auswählen

dd if=rootfs.cpio of=/dev/sdb
Nun sieht der Kernel auch, dass der USB-Stick keine Partition hat:

Code: Alles auswählen

[    6.946635@0] Warning: unable to open an initial console.
[    6.952084@0] VFS: Cannot open root device "sda" or unknown-block(8,0)
[    6.958439@0] Please append a correct "root=" boot option; here are the available partitions:
[    6.966973@0] fd00        15611904 cardblksd  driver: cardblk
[    6.972677@0]   fd01           65536 cardblksd1 00000000-0000-0000-0000-000000000cardblksd1
[    6.981007@0]   fd02         2097152 cardblksd2 00000000-0000-0000-0000-000000000cardblksd2
[    6.989339@0] 0800          984064 sda  driver: sd
[    6.994107@0] ** enable watchdog
[    6.997320@0] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,0)
Der Treiber sd und der Treiber cardblk sind beide da. Aber es geht, warum auch immer, immer noch nicht. :cry:

Ich mache irgendwas sehr falsch.

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Tintom » 23.06.2019 14:55:23

Hast Du den Kernel gebaut? Wenn ja: Wie? Config-Datei?
Ansonsten wird das hier eine lustiges Ratespiel.

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 23.06.2019 15:20:51

Ja ich habe den Kernel gebaut.

Hier ist der Kernel: https://drive.google.com/drive/folders/ ... OYnudD--Pq

Die Konfigurationsdatei befindet sich hier: /customer/yf_configs/GPL_BOARD_defconfig

mludwig
Beiträge: 793
Registriert: 30.01.2005 19:35:04

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von mludwig » 23.06.2019 17:01:02

Sind die Partitionsnamen nicht in deiner Meldung enthalten? Also einfach mal testen: fd00 oder fd01

Edit: Alternativ: block/cardblksd1 bzw. block/cardblksd2

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 23.06.2019 17:48:36

In meiner Meldung sind meine Partitionsnamen nicht drin. Ist das schlimm?

Habe jetzt fd00, fd00, block/cardblksd1 und block/cardblksd2 mit rootdelay=5 versucht:

fd00:

Code: Alles auswählen

unknown-block(253,0)
fd01:

Code: Alles auswählen

unknown-block(253,1)
block/cardblksd1:

Code: Alles auswählen

unknown-block(0,0)
block/cardblksd2:

Code: Alles auswählen

unknown-block(0,0)
Komisch

JTH
Moderator
Beiträge: 3015
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von JTH » 24.06.2019 00:09:39

Ich hab mal spaßeshalber eine VM kaputt gemacht, da konnte ich die Fehlermeldung nur erzwingen, wenn dem Kernel gar kein initramfs übergeben wurde. Heißt natürlich nicht, dass die in anderen Szenarien nicht auch kommt.

Da du mehrfach den root=-Parameter des Kernels erwähnst, mal blöd gefragt: Übergibst du das initramfs dem Kernel überhaupt? Das ist ja eigentlich vom root=-Parameter des Kernels unabhängig und muss separat passieren. Laden des initramfs macht meinem Verständnis nach ja im Detail der Bootloader und übergibt dem Kernel dann nur die Speicheradresse, an die er das initramfs geladen hat. Machst du das – wie auch immer das konfigurationstechnisch mit U-Boot geht?

Ich hab auch noch nicht ganz verstanden, wie dein Aufbau ist, zwischendurch erwähnst du /dev/sda und /dev/sdb: Kernel liegt auf /dev/sda1 und initramfs auf USB-Stick /dev/sdb?

Ich kenn mich nebenbei mit U-Boot nicht aus, falls ich irgendwo Quatsch erzähle.

*Nur* die Kernelconfig hochzuladen hätt übrigens gereicht, so’n ganzer Kernel braucht doch immer noch nen Moment zum Herunterladen ;)
Manchmal bekannt als Just (another) Terminal Hacker.

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 24.06.2019 00:38:25

Guten Morgen,


danke für Deine Antwort. Ich kenne mich auch gar nicht aus. :D Also das was ich mache ist folgendes:

Ich lade von meiner MicroSDKarte (/dev/block/cardblksd1) ist FAT32 den Kernel, aus welchem ich die Ramdisk rausgenommen habe. Nach dem Maschinencode, also vor dem ersten UTF-8 0707 bis zum TRAILER!!! UTF-8 und fülle den ganzen Bereich mit Nullen auf. Den Kernel lade ich halt. Habe auch einen selbst kompiliert, aber dieser hat dann eben keine Dateien mitgegeben bekommen. D.h. das CPIO Archiv ist dann leer. Beide haben den root= Fehler. Der Kernel ist dann bei 0x82000000 im Raum geladen, so wie es Original auch immer der Fall ist. Nun setze ich die Bootargumente und zwar init=/init und root=/dev/block/cardblksd2, weil die erste den Kernel auf FAT32 hat und die 2. Partition ext2 ist und den Inhalt der Datei initrd.img.gz vom debootstrap enthält. Das CPIO, also hier .IMG habe ich natürlich entpackt auf der MicroSDKarte gepackt als Baumstruktur. Man sieht also direkt die Ordner bin und die Datei init beim mounten der Partition.

Die initramfs habe ich nicht im RAM geladen. Muss ich das, oder reicht es die von einem USB-Stick oder der 2. MicroSDKarte einzubinden? Ich habe den Stock Kernel auch mit eingebauter Ramdisk über den Fehler hinaus booten können, aber ich brauche die Ramdisk außerhalb des Images.

Edit: Mein U-Boot Bootloader vom Hersteller kann nur mit MicroSDKarten interagieren, bei USB-Sticks nicht, deswegen lade ich den Kernel von MicroSDKarte und die Ramdisk dann vom Kernel aus, Versuche ich zumindest, von USB-Stick, oder auch möglich, von MicroSDKarte.

Benutzeravatar
bluestar
Beiträge: 2336
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von bluestar » 24.06.2019 01:20:44

Du wirst nicht um die Ramdisk - angehangen an den Kernel umherkommen, ansonsten brauchst du devfs - welches seit 2.6 deprecated ist.

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 24.06.2019 08:51:25

Ah okay, ich werde gleich zunächst versuchen die Ramdisk auch im RAM zu laden. Mir hätte eigentlich auffallen sollen, dass das root= Argument das gesamte root Dateisystem meint und es kein ramdisk= Argument ist.

Werde hier gleich berichten, ob es geklappt hat. ;)

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 24.06.2019 09:46:20

Also zuerst machen wir ein uImage aus der initrd.img.gz von dem Debian armhf:

Code: Alles auswählen

mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0 -e 0 -n 'Ramdisk armhf' -d initrd.img.gz uInitrd
Nun bin ich in der U-Boot Console und lade die Ramdisk und dann den Kernel im RAM:

Code: Alles auswählen

m6_yifang#fatload mmc 0 0x00000000 uInitrd
reading uInitrd

2708033 bytes read

Code: Alles auswählen

m6_yifang#fatload mmc 0 0x82000000 uImage
reading uImage

3086088 bytes read
Nun boote ich beides

Code: Alles auswählen

m6_yifang#bootm 0x82000000 0x00000000
## Booting kernel from Legacy Image at 82000000 ...
   Image Name:   Linux-3.0.8-ge9ca3e2
   Image Type:   ARM Linux Kernel Image (lzma compressed)
   Data Size:    3086024 Bytes = 2.9 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
Wrong Ramdisk Image Format
Ramdisk image is corrupt or invalid
m6_yifang#
Die Ramdisk ist ja erst als cpio, dann als gz und dann als uImage. mkimage unterstützt cpio nicht. Nur gz.

Jetzt weiß ich erstmal nicht mehr weiter.

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 24.06.2019 12:23:24

Ich habe jetzt versucht initrd ext2 zu machen:

Erstmal eine 5 MB Ramdisk erstellen

Code: Alles auswählen

dd if=/dev/zero of=/dev/ram0 bs=1k count=5000
Dann diese ext2 formatiert:

Code: Alles auswählen

mkfs.ext2 /dev/ram0
Dann eingehangen:

Code: Alles auswählen

mount -r -w -t ext2 /dev/ram0 /mnt/ram
Dann die Partition mit den Inhalt wie den Ordnern bin, conf, etc, lib, run, sbin, script und der Datei init befüllt. 140 KB noch frei. Dann diese einmal gz komprimiert. Ging nicht und Einmal -c none unkomprimiert durch mkimage gejagt. Selber Fehler im U-Boot:

Code: Alles auswählen

Wrong Ramdisk Image Format
Ramdisk image is corrupt or invalid
Jetzt ist guter Rat teuer (benötigt). :)

Benutzeravatar
bluestar
Beiträge: 2336
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von bluestar » 24.06.2019 13:23:47

Die Initrd besteht nicht aus einer Ramdisk ... Viel mehr handelt es sich um ein CPIO Archiv welches mit GZIP gepackt wird. Der Kernel erzeugt beim booten eine leere Ramdisk und entpackt darin den Inhalt des Initrd Archives.

https://www.kernel.org/doc/html/latest/ ... nitrd.html

JTH
Moderator
Beiträge: 3015
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von JTH » 24.06.2019 13:35:32

Joe58 hat geschrieben: ↑ zum Beitrag ↑
24.06.2019 09:46:20
mkimage unterstützt cpio nicht.
Ich nehme an, das muss es auch nicht. Das cpio packt später anscheinend der Kernel selbst aus, wie bluestar auch schreibt:
https://en.wikipedia.org/wiki/Initial_ramdisk hat geschrieben: In the initramfs scheme […], the image may be a cpio archive (optionally compressed). The archive is unpacked by the kernel into a special instance of a tmpfs that becomes the initial root file system.
Hilft dir natürlich erstmal nicht weiter.

Macht mkimage beim Aufruf fürs initramfs irgendwelche verdächtigen Ausgaben? Was sagt

Code: Alles auswählen

$ mkimage -l uInitrd
als Gegenprobe?
Manchmal bekannt als Just (another) Terminal Hacker.

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 24.06.2019 13:45:48

Hi,

danke für Eure Antworten! :)

Also mkimage -l:

Code: Alles auswählen

johannes@debianlaptop:~$ mkimage -l /home/johannes/uInitrd
Image Name:   Ramdisk armhf
Created:      Mon Jun 24 12:15:11 2019
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    5120000 Bytes = 5000.00 kB = 4.88 MB
Load Address: 00000000
Entry Point:  00000000
johannes@debianlaptop:~$ 
schaut IMO nicht verdächtig aus. Genau meine nicht ext2 Ramdisk ist zunächst *.cpio und dann *.gz gepackt und wird auch per Standard vom Kernel die CPIO Ramdisk entpackt. Es geht auch diese zu gzippen und dann werd die auch entpackt, aber alles nur, wenn diese im Kernel Image ist.

Es muss irgendwie an mkimage liegen, obwohl ich mit dem schon mehrere Male das Kernel Image damit selbst erstellt habe und dieser auch geladen wird.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von king-crash » 24.06.2019 14:50:36

Ein initramfs brauchst du eigentlich nur für exotische Dinge oder wenn keine Systempartition verwendet werden soll.
Ich wage zu behaupten, dass zu diesem Zeitpunkt schlicht Treiber fehlen und du diese nicht als Modul vorliegen dürfen, sonder fest einkompiliert werden sollten.

mludwig
Beiträge: 793
Registriert: 30.01.2005 19:35:04

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von mludwig » 24.06.2019 14:59:12

Hier hat mal jemand ein ähnliches Problem beschrieben, vielleicht hilft der Hinweis auch bei dir ... :

https://unix.stackexchange.com/question ... f-uramdisk

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 24.06.2019 15:01:53

Hallo,

danke für Deine Antwort king-crash. Das Problem ist derzeit, dass der Bootloader U-Boot unser initrd.img.gz vom debootstrap nicht annehmen möchte. An Treibern wie der MicroSDKarte oder der des FAT32 kann es nicht liegen, weil ich den Kernel ja auch wie die initrd.img.gz.uImage lade.

Ich habe nun verstanden, dass es folgendermaßen funktionieren soll:

1. Der Bootloader lädt Ramdisk (initrd.img.gz.uImage) und Kernel (kernel.uImage) im RAM.

2. Danach die Kernel Befehlszeile auf root=/dev/sda1 rootfstype=ext2 init=/boot/initrd.img.gz
(sda1 ist der USB-Stick mit Debian armhf vom debootstrap.

3. Der Kernel führt init aus dem RAM aus, welcher der Bootloader im RAM geladen hat aus.

Es funktioniert bei Schritt 1 schon nicht.

Joe58

Re: Ramdisk vom USB-Stick einhängen unmöglich!

Beitrag von Joe58 » 24.06.2019 15:08:59

Hallo mludwig,

auch Dir ein Danke an deinen Beitrag. Auf der Webseite bin ich auch bereits gewesen. :) Ich habe mkimage ausgeführt, dass:

-T ramdisk
-A arm
-O Linux
-C gzip oder auch Mal auf none gestellt, für unkomprimierte ext2 Ramdisk Image
Und die Datei uInitrd.uImage benannt.

Der Bootloader sagt, dass es ungültig ist. Ich habe auch im Hexeditor geschaut, die 64 Bytes sind da, vor 1F8B08 GZ Magic number. Ich habe auch von der FAT32 MicroSDKarten Partition das Alte gelöscht und andere Dateinamen probiert. Nix.

Antworten