Autor Thema: Startgerät beim CDI-Treiber?  (Gelesen 9562 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« am: 22. October 2013, 18:18 »
Hallo,
ich benutze den CDI-Treiber für ATA-Geräte. Jetzt ist meine Frage, woher weiss ich welches Gerät, welche der Treiber beim OS anmeldet, das Startgerät ist? Ich bekomme ja von GRUB die BIOS-Signatur übergeben, aber was bringt die mir? Kann ich damit irgendetwas anfangen?
Ich hoffe ihr könnt mir helfen.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 22. October 2013, 21:04 »
Hallo,

die BIOS-Laufwerksnummer ist unzuverlässig, weil sie nur für den int13h und nur vor dem Abschalten gewisser Legacy-Emulationen (z.B. USB-Boot) gilt.

Ein Linux bekommt das Startgerät per cmdline übergeben (root=/dev/sda1), bei Windows (vor Vista) steht es in der BOOT.INI (multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP") und bei den BSDs läuft das so ähnlich wie bei Windows. In jedem Fall gibt es einen zusätzlichen Seitenkanal, der die Information vom Bootloader zum Kernel übermittelt.

Gruß,
Svenska

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #2 am: 22. October 2013, 21:26 »
Aber woher weiss denn GRUB, wie der Treiber/das OS die Geräte nummeriert?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 22. October 2013, 22:18 »
Naja bei Linux gibt es dazu glaub Regeln, wobei ich mir da aber auch nicht sicher bin. Bei Windows ist der Bezeichner C: nicht an ein bestimmtes Laufwerk gebunden, sondern wird der Bootpartition zu geordnet. Deshalb wird ja auch dort das Laufwerk mit einer abstrakten Bezeichnung angesprochen.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 22. October 2013, 22:38 »
Der Bootloader (GRUB, NTLDR) erfährt vom BIOS die Nummer des Startlaufwerks, lädt damit seine Konfigurationsdatei (grub.cfg, boot.ini), lädt Kernel und zusätzliche Dateien, übergibt die Informationen der Konfigurationsdatei an den Kernel und startet diesen danach. Die Konfigurationsdatei wurde vom Betriebssystem vorher geschrieben, schließlich weiß es, wo es hin installiert wurde.

Wie bestimmte Laufwerke gemappt werden, ist vollständig dem Betriebssystem überlassen. Unter Linux darfst du auch eine Ramdisk starten, dann gibt es keine Startfestplatte (wohl aber ein Startgerät - die Ramdisk selbst). Windows NT (und neuer) selbst ist übrigens nicht auf ein Laufwerk C: angewiesen; das Systemlaufwerk steht in der Registry und kann theoretisch geändert werden.

Unter DOS (und DOS-basiertem Windows) ist C: immer das Bootlaufwerk. Die 32-Bit-Treiber von Windows versuchen mit ein paar Regeln die BIOS-Nummern auf die echten Geräte/Partitionen zu mappen und wenn das fehlschlägt, werden die BIOS-Treiber als Fallback benutzt. Das merkt man dann, wenn man Windows 95 von einem USB-Stick (oder einer PCMCIA-Karte) bootet und dann in den Systemeinstellungen steht, dass das Laufwerk im MS-DOS-Kompatiblitätsmodus verwendet wird. Für moderne Systeme ist das aber keine Lösung mehr.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 23. October 2013, 09:48 »
Vor allem dürfte es gar nicht einfach sein, den int 13h zuverlässig in einem PM-OS benutzen zu können.

Eine Sache, die ich noch anmerken wollte, ist, dass der Bootloader nicht zwingend die genaue Position der Bootpartition an den Kernel weitergeben muss (/dev/hda1 oder so), sondern dass er dazu auch eine eindeutige ID des Dateisystems oder ähnliches benutzen kann. Dann kann man das System auch mal auf eine andere Platte verschieben, ohne dass alles kaputtgeht.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #6 am: 23. October 2013, 14:15 »
Aber ich installiere mein OS (zumindest momentan) noch nicht. Es ist also ein Livesystem, was bedeutet, dass es immer anders ist, je nach Konfiguration der Maschine. Wie macht ihr das denn bei euren OSes?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 23. October 2013, 15:52 »
tyndur nimmt halt das erstbeste CD-ROM-Laufwerk. Wenn du mehrere hast und die CD im anderen liegt - Pech gehabt...
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #8 am: 23. October 2013, 17:54 »
ok das ist natürlich auch eine Möglichkeit.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 23. October 2013, 18:05 »
Der Bootloader kann auch die Signatur des Startgeräts mit dem int13h auslesen und diese an den Kernel weiterreichen.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #10 am: 23. October 2013, 18:23 »
Und ist das mit GRUB möglich?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 23. October 2013, 18:45 »
Ja. Siehe Wiki:Multiboot
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #12 am: 23. October 2013, 20:25 »
Ja. Siehe Wiki:Multiboot
Und was soll ich damit dann? Das ist doch genau die Signatur, die das BIOS zurückgibt. Ich muss wissen welches Laufwerk das Startlaufwerk ist.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 23. October 2013, 20:49 »
Schreibe doch einfach die Adresse deiner Startpartition in die grub.cfg und übergib sie deinem Kernel als Parameter. Dann weiß der Kernel, von wo er booten soll.

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 23. October 2013, 22:40 »
Zitat
Ja. Siehe Wiki:Multiboot
Und was soll ich damit dann? Das ist doch genau die Signatur, die das BIOS zurückgibt.
Ich dachte danach hättest du gefragt. Mehr kann Grub vermutlich nicht. Zumindest wird für linux das root-laufwerk immer explizit in der Konfiguration (menu.lst/grub.cfg) angegeben. Entweder per kernel spezifischer laufwerks bezeichnung (/dev/sda bzw. /dev/hda) oder auch per UUID. In letztem Fall müssen dann alle Laufwerke abgesucht werden bis eines mit der passen ID gefunden wurde.

Edit:
Aber Multiboot scheint dir ja nicht nur die BIOS-Nummer des Bootlaufwerkes zu geben sondern zusätzlich auch noch die dazugehörigen IO-Ports. (mbs_drives_addr) Es hat zwar nicht jedes ATA-Laufwerk seine eigenen Ports aber mit der BIOS-Nummer zusammen lässt sich damit vermutlich das Laufwerk ziemlich genau bestimmen.
« Letzte Änderung: 23. October 2013, 22:47 von MNemo »
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #15 am: 24. October 2013, 15:17 »
Danke für eure Antworten. Wie funktioniert das mit diesen UUIDS? Hat dort jedes Dateisystem eine UUID, welche immer gleich ist, also egal welches OS? Hab ich das richtig verstanden oder liege ich das falsch.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

 

Einloggen