Frage

Nehmen wir an, ich möchte eine kleine Linux-Distribution vor meinem normalen Betriebssystemstart starten.

  1. BIOS Last MBR und führen MBR.
  2. MBR lokalisiert die aktive Partition, die meine Linux-Partition ist.
  3. Linux starten und ich führen, was ich tun muss.
  4. Linux heruntergefahren und ich wechseln zu Real-Modus wieder.
  5. Der ursprüngliche Partitions-Boot-Sektor wird geladen und mein normalen OS Start.

AFAIK, Schritt 4 wird die schwierige Aufgabe, zur Wiederherstellung des Zustandes auf allen bekannten Vorrichtungen auf Linux, wird Int13h funktionsfähig sein? Muss ich die Interrupt-Vektortabelle wiederherzustellen? Einige zu nennen.

Ist dies vielleicht in jedem vorhandenen Projekt geschehen?

War es hilfreich?

Lösung

Linux normalerweise nicht diese unterstützen, zumal es Hardware in einer Art und Weise neu initialisiert, dass die BIOS und DOS-Programme können nicht erwarten. Allerdings gibt es einige Infrastruktur zurück zu Real-Modus in bestimmten Fällen zu wechseln - insbesondere für einen Neustart (machine_real_restart in arch / x86 / kernel / reboot.c sehen) - und hat Code neu zu initialisieren Hardware für kexec oder aussetzen. Ich vermute, Sie könnten in der Lage sein, etwas mit einer Kombination aus diesem zu tun - aber ich weiß nicht, ob das Ergebnis wirklich paßt auf, was DOS oder Windows würde erwarten, dass beim Neustart sehen

.

Ein einfacher Plan wäre einen chainloading Bootloader zu verwenden, die einmal in einer bestimmten Konfiguration zu booten, wie GRUB . Sie könnten grub-set-default, dann einen Neustart aufrufen. Wenn GRUB kommt, wäre es dann die Kontrolle aus, um Windows übergeben. Durch die dann die Ausweich OS auf die Linux-Partition Einstellung, Steuerung zurückkehren würde, um Linux auf den nächsten Start.

Eine weitere Option kann benutzen Coreboot , aber ich bin nicht sicher, ob diese Produktion -bereite zum Starten von Windows vor.

Andere Tipps

ich dies nicht versucht haben, so weiß ich nicht, ob es funktionieren würde, aber hier geht:

Es gibt eine Option in der Kopfzeile einer bzImage Format Kernel-Datei, die die Adresse des Real-Mode-Code gibt auszuführen, bevor der geschützten Modus-Code beginnt. Sie könnten eine minimale bzImage-kompatible Datei erstellen, die keinen eigentlichen Kern, aber die Real-Mode-Code hat Ihren MBR INT 0x13 zu 0x7c00 und JMP hinein wie das BIOS laden der Fall ist.

Wenn Sie kexec die bzImage mit den „-t bzImage-x86 --reale-mode“ Optionen zu laden, sollte es den PE-Bit in CR0 zurückgesetzt Realmode fallen (wie bdonlan oben erwähnt), und führen Sie den Code hingewiesen In dem durch die bzImage Header-Option.

Die bzImage Header Option realmode_swtch genannt wird und in /usr/src/linux/Documentation/x86/boot.txt dokumentiert, ist der Header-Format Code in / usr / src / linux / arch / x86 / boot / Header. S

Haben Sie sich in kexec ?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top