Lowlevel

Lowlevel => OS-Design => Thema gestartet von: m3t4lukas am 20. October 2012, 15:31

Titel: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: m3t4lukas am 20. October 2012, 15:31
Hallo Leute,

nachdem ich nun schon ein paar Jahre meinen Spaß mit Linux und C++-Programmierung hatte, habe ich mir gedacht, dass es nicht schaden kann, auch etwas Wissen über Betriebssysteme zu sammeln. Ich habe nun schon einige Bücher über das OS-Design gelesen und dachte mir, dass es jetzt auch mal Zeit für die Praxis ist.

Heute habe ich GRUB auf meinem USB-Stick installiert (Diese Anleitung wurde benutzt: http://www.lowlevel.eu/wiki/GRUB_Installation_auf_einem_USB-Stick (http://www.lowlevel.eu/wiki/GRUB_Installation_auf_einem_USB-Stick), mit der Änderung: grub-install --force --no-floppy --root-directory=/mnt/usb /dev/sdX). Danach habe ich in /boot/grub noch eine leere Datei 'menu.lst' platziert.

Da drin steht:
title MeinOS
kernel /system/kernel
boot

in dem USB-Stick habe ich im Root-Verzeichnis den Ordner 'system' angelegt, in den ich den 'kernel' (gelinkte ausführbare Datei) gelegt habe.

Also habe ich den Stick meinem Schlepptop gefüttert und da zeigt GRUB die Fehlermeldung: "error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.\ngrub rescue>"
error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
grub rescue>

Der Befehl 'ls' liefert folgendes Ergebnis:
(hd0) (hd0,msdos1) (hd1) (hd1,msdos5) (hd1,msdos1)

Der Laptop wurde so eingestellt, dass der Stick die primäre Bootquelle ist.

Ich hoffe ich habe genug infos gepostet, dass ihr damit was anfangen könnt, wie gesagt bin ich noch newbie auf diesem Gebiet.

Vielen Dank im Vorraus und liebe Grüße
Lukas
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: m3t4lukas am 20. October 2012, 17:01
Und vor Allem hoffe ich, dass ich es in das richtige Thema gepostet habe :D
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: Svenska am 20. October 2012, 21:21
Hallo,

wenn es kein GRUB sein muss, kommst du mit einem SYSLINUX aus meiner Sicht einfacher zum Ziel. ;-)

# cat /usr/lib/syslinux/mbr.bin > /dev/sdX
# syslinux -i /dev/sdX1
wobei /dev/sdX1 eine aktive FAT-Partition auf dem Stick ist.

Dann kopierst du die Dateien /usr/lib/syslinux/menu.c32 und /usr/lib/syslinux/mboot.c32 in das Stammverzeichnis dieser Partition und erstellst eine Datei SYSLINUX.CFG mit folgendem Inhalt:

DEFAULT menu.c32
TIMEOUT 80
LABEL MeinOS
KERNEL /mboot.c32
APPEND /system/kernel

Das sollte ähnlich gut funktionieren.

Gruß,
Svenska
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: m3t4lukas am 20. October 2012, 22:32
Hallo Svenska,

muss es eine FAT partition sein? Es wäre ziemlich cool, wenn es doch bei ext2 bleiben könnte, weil ich mich damit ziemlich gut auskenne. FAT hängt mir zu sehr mit Windoof zusammen :/

Zu GRUB habe ich noch eine Frage. Muss in dem Ordner /boot/grub die Datei grub.cfg vorhanden sein, wenn darin schon eine menu.lst vorhanden ist? Wenn ja, was muss darin stehen?

Liebe Grüße
Lukas
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: m3t4lukas am 20. October 2012, 22:38
Und ich habe durch genaues hingucken (Sarkasmus, hätte ich auch schon viel früher merken können) herausgefunden, Dass die UUID der Festplatte, nach der GRUB beim Booten sucht,  die der Festplatte des PCs ist, auf dem GRUB auf dem Stick installiert wurde. Ich hoffe das hilft weiter.
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: Svenska am 21. October 2012, 00:29
Hallo,

muss es eine FAT partition sein? Es wäre ziemlich cool, wenn es doch bei ext2 bleiben könnte, weil ich mich damit ziemlich gut auskenne.
Die Syslinux-Suite besteht aus Syslinux (FAT), Extlinux (ext2/3/4, btrfs), PXELinux (Netzwerkboot) und ISOLinux (CDs mit El-Torito). Bei mir läuft seit längerem Extlinux auf ext4.

Mit Grub kenne ich mich nicht besonders aus, aber wenn ich mich recht entsinne, ist die grub.cfg für Grub2 und die menu.lst für Grub Legacy da. Ohne Gewähr (und Pistole).

Um dein Grub-Problem zu beheben, solltest du die UUID durch die des USB-Sticks ersetzen. Ich bin kein Freund von UUIDs und arbeite lieber mit Labels - ob Grub das kann, weiß ich nicht.

Gruß,
Svenska
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: m3t4lukas am 21. October 2012, 16:28
Hallo,

ich habe mir eine grub.cfg erstellt :)
Er scheint aber zu Meckern, was die Multibootfähigkeit meines Kernels betrifft.
Müssen alle Variablen des Multiboot-Headers vorhanden sein, oder reichen auch die ersten 3, wie in diesem Beispiel: http://www.lowlevel.eu/wiki/C%2B%2B-Kernel_mit_GRUB (http://www.lowlevel.eu/wiki/C%2B%2B-Kernel_mit_GRUB)?
Und wo wird in diesem Bespiel GRUB der Multiboot Struct mitgeteilt?

Liebe Grüße
Lukas
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: Jidder am 21. October 2012, 17:23
Er scheint aber zu Meckern, was die Multibootfähigkeit meines Kernels betrifft.
Müssen alle Variablen des Multiboot-Headers vorhanden sein, oder reichen auch die ersten 3, wie in diesem Beispiel: http://www.lowlevel.eu/wiki/C%2B%2B-Kernel_mit_GRUB (http://www.lowlevel.eu/wiki/C%2B%2B-Kernel_mit_GRUB)?
Ja.

Und wo wird in diesem Bespiel GRUB der Multiboot Struct mitgeteilt?
Gar nicht so richtig. Der Code aus dem Tutorial funktioniert nur, wenn der Multiboot Header "zufällig" an dem Anfang der Datei landet. (Es ist nicht wirklich Zufall, sondern kommt auf den Linkeraufruf an.) Eine zuverlässigere Methode ist es wie in diesem Tutorial zu machen: http://www.lowlevel.eu/wiki/Teil_4_-_Hello_World#Multiboot-Header_in_einer_eigenen_Sektion

Also irgendwie so (ungetestet):

...
section multiboot                      ; <-------- !!!
align 4
MultiBootHeader:
  dd MAGIC        ; Magic number
  dd FLAGS        ; Flags
  dd CHECKSUM    ; Checksum
 
section .text                      ; <-------- !!!
loader:
  mov esp,0x200000 ; Stack an die 2MB-Grenze platzieren

...

Und dann das Linker-Skript (oder zumindest die Zeile *(multiboot)) aus dem Tutorial verwenden. Dann landet der Multiboot-Header in den ersten 8 KB des Kernels und GRUB kann ihn finden.
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: m3t4lukas am 21. October 2012, 20:19
Wenn ich das so compiliere, meckert der trotzdem, dass er kein header finden kann.

Hier mein Linker-Skript:
ENTRY(loader)
OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386:i386)

SECTIONS
{
  . = 0x0100000;
 
  multiboot :
  {
    *(multiboot*)
  }
 
  .text :
  {
    *(.text*)
    *(.rodata)
  }

  .data  :
  {
    start_ctors = .;
    *(.ctors)
    end_ctors = .;

    *(.data)
  }

  .bss  :
  {
    *(.bss)
  }

  /DISCARD/ : { *(.dtors) *(.comment) }
}

Liebe Grüße
Lukas
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: kevin am 22. October 2012, 10:46
Probier es mal wie im Tutorial:

    .text : {
        *(multiboot)
        *(.text)
    }
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: MNemo am 22. October 2012, 13:34
Arbeitest du auf einem 64-Bit System? Dann ist dein Kernel vermutlich über 1MB groß und '-m elf_i386' bzw. '-z max-page-size=4096' könnten dir beim linken helfen deinen Kernel um 1MiB Nullen kleiner zu machen. Dann landet der Multiboot-Header auch in den erst 8KiB und Grub findet ihn.
Titel: Re: Grub error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Beitrag von: m3t4lukas am 23. October 2012, 19:31
Habe beides umgesetzt, jetzt funktioniert es :)

Vielen Dank
Lukas