Moin Moin!
Hallo,
»» Einige verbastelte BIOSse können ausschließlich von Windows CDs booten, weil irgendeine Entwickler-Torfnase nicht die "El Torito"-Spezifikation gelesen hat, sondern nur mit der Windows-CD getestet hat.
isnichwahr ... echt?
»» Der Fehler besteht darin, dass die Spezifikation die Lage einiger Boot-Daten nicht fest vorschreibt, sie bei Windows-CDs aber immer an der gleichen Stelle liegen.
Und du meinst, da haben ein paar Neunmalkluge gedacht, hey, das ist ja praktisch, das muss wohl so sein? Ist ja nicht zu fassen ...
Ich hab das Detail jetzt gerade nicht im Kopf, aber so ungefähr sieht das Problem aus: Die Spec sieht vor, dass irgendein Stückchen Boot-Code an beliebiger Stelle auf der CD stehen kann, die genaue Lage steht in irgendeinem Header. Durch die Mastering-Software von Microsoft ist die Lage für alle Windows-CDs (oder wenigstens eine von zwei Varianten) konstant. Also fragt das BIOS nicht den Header ab, sondern fährt an die Stelle auf der CD, an der MS den Bootcode untergebracht hat.
»» Außerdem gibt es einige BIOSse, die zwar eine Floppy-Image von CD booten können, aber keine Festplatten-Image oder ein native Boot. Auch da ist die Windows-CD kein Problem, denn die benutzt ein Floppy-Image.
Je nach Version. Für Windows 98 und ME trifft das definitiv zu, für XP vielleicht auch (habe ich noch nicht untersucht). Für Windows 2000 aber definitiv nicht; eine meiner Win2k-CDs habe ich vor ein paar Jahren mal aus reiner Neugier analysiert. Die verwendet Non-Emulation-Booting, lädt einfach einen CD-Sektor (also den Gegenwert von 4 regulären Harddisk-Sektoren) und führt den darin enthaltenen Bootstrap-Code aus.
Du hast recht. Ich weiß nur nicht mehr, wie die kaputten BIOSse gestrickt waren, vermutlich konnten sie nur die 9x-Versionen booten, weil der No-Emulation-Mode fehlt: 1, 2
Anderer Bug: Das No-Emulation-Boot-File muß exakt 4 (Festplatten-)Sektoren groß sein (à la Windows), andere Werte werden nicht akzeptiert. Das geht so weit, dass moderne BIOSse die 4 nicht mehr ernst nehmen und stattdessen bis EOF lesen, weil so viele Boot-CDs die 4 als Workaround enthalten. Siehe "Notes" unter Slackware 12.2/isolinux/README.txt.
»» Und schließlich sind manche (alten) optischen Laufwerke dermaßen langsam bei der Initialiserung, dass sie nach dem Reset eine ganze Weile die CD nicht ans BIOS melden und das Booten von CD deswegen fehlschlägt. Abhilfe schafft da, den Bootvorgang zu verlangsamen: Ausführlichen Speichertest aktivieren, Floppy Drive Seek aktivieren, Floppy als erstes Boot-Device noch vor der CD eintragen.
Ja, ähnliche Register habe ich gezogen, als ich mein Netbook von einem externen (USB) CD-Laufwerk booten wollte.
Manchmal hilft es auch, einfach während oder unmittelbar nach Ende der Speicherzählerei auf Pause zu drücken oder bei moderneren BIOSsen das Boot Device Menü zu öffnen und dort manuell ein paar Sekunden herumzutrödeln. Manche BIOSse bieten dort aber nur Devices an, von denen sie aktuell booten können. CD nicht rechtzeitig erkannt -> kein CD-Menüpunkt.
»» Abhilfe für alte und kaputte BIOSse: sbootmgr, ein gerade mal 108 kBytes großes Stück Software, das direkt von einer Floppy bootet und dann ein Bootmenü anbietet, aus dem heraus man u.a. von CD/DVD booten kann, auch wenn das BIOS dazu zu alt oder zu blöd ist.
Danke, sehr gut! Da ich oft auch sehr einfache, funktionsreduzierte Embedded-Boards verbaue, könnte mir das bestimmt mal helfen.
So lange Du genügend Hardware emuliert oder real hast, geht das. sbootmgr braucht, sofern direkte Hardware-Zugriffe im Code nicht explizit abgeschaltet werden, wenigstens eine PS/2-Tastatur und eine CGA/EGA/VGA. Auf Systemen wie den WRAPs und ihren Nachfolgern hast Du aber nur eine serielle Konsole und ein BIOS, das BIOS-Funktionen für Tastatur und Textadapter auf die Konsole umstrickt. Port-Zugriffe fallen bei diesen Systemen tierisch auf die Nase. Dort mußt Du sbootmgr neu übersetzen, damit es nur BIOS-Funktionen statt direktem HW-Zugriff benutzt.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".