2012-10-16 7 views
14

Ich habe in letzter Zeit wegen der Schule nicht viel geschrieben, aber ich habe beschlossen, dass ich wieder an der OS-Entwicklung arbeiten möchte. Vor kurzem habe ich jedoch etwas über EFI als Ersatz für BIOS gehört. Ich möchte ein Betriebssystem für eine Plattform entwickeln, die EFI anstelle von BIOS verwendet. Ich habe Probleme, herauszufinden, wo ich anfangen soll. Kann mir jemand in die richtige Richtung zeigen? Erklären Sie vielleicht, was EFI für die OS-Entwicklung bedeutet und vielleicht, welche Testumgebungen (vorzugsweise virtuell) ich verwenden kann. Ehrlich gesagt bin ich mir nicht wirklich sicher, was genau EFI ist. Sollte ich auch Zeit investieren in die ARM Montage? Ich kenne x86 Assembly, aber ich fühle, dass das auch überholt ist. Ich bin wirklich verloren und würde gerne deine Eingabe hören.Schreiben eines Betriebssystems mit UEFI

Dank

Antwort

22

EFI ist die Vorstufe zu UEFI, das, was die Menschen tatsächlich nutzen, obwohl sie manchmal noch auf die Sache als EFI verweisen. Sie können die Spezifikationen bei uefi.org beziehen.

Die UEFI-Spezifikation definiert alles, was ein Bootloader möglicherweise wissen muss. Die PI-Spezifikationen definieren Schnittstellen für Silicon-Hersteller, die für die Portabilität ihres Codes in der Industrie verwendet werden sollen. Sie werden also von einem Betriebssystem, wie Win8, hören, das die Einhaltung einer bestimmten Version der UEFI-Spezifikation, wie 2.3.1c, erfordert, damit einige Funktionen wie Secure Boot funktionieren. All dies bedeutet, dass EFI das BIOS nicht so sehr ersetzt, dass es zu einem Standard wird, dem das BIOS einige Betriebssysteme unterstützen muss.

Der Ort zu gehen, um zu beginnen (nachdem Sie eine Kopie der Spezifikationen erhalten) ist the TianoCore project on SourceForge. Eines der Projekte dort ist OVMF, das ein virtuelles Maschinenziel für UEFI ist. Sie können auch das NT32-Ziel anzeigen, um eine Eingabeaufforderung unter Windows auszuführen. Diese Tools sind wirklich großartig, wenn Sie eine Anwendung wie einen Bootloader entwerfen möchten, die auf den UEFI-Schnittstellen sitzt.

Soweit Lerneinheit, empfehle ich nicht, Sie dort zu starten. Es gibt so viel zu wissen, und ein Grund dafür, dass wir UEFI erstellt haben, ist, dass neue Programmierer in C statt in ASM arbeiten können. Es gibt ein paar Stellen in UEFI, wo wir ASM verwenden, aber das Build-System behandelt die Details zum Einbinden, und Sie brauchen im Allgemeinen weder die schwierige Kontrolle über den Zustand des Prozessors noch die Leistung, die Sie beim Schreiben des ASM. Der einzige andere Grund, warum Sie es tun würden, ist die Größe, und da der Rest des BIOS in C sein wird, vereitelt es den Zweck, es sei denn, Sie schreiben das Ganze in ASM neu, was niemand tun wird. Konzentrieren Sie sich darauf, die Spezifikationen zu lernen und wie Sie sie verwenden, um Ihre eigenen UEFI-Anwendungen zu schreiben.

6

Eine späte Antwort auf diese Frage, aber ich kann die folgenden Punkte hinzufügen, wenn Sie sie in der Zwischenzeit nicht entdeckt haben:

Vielleicht erklären, was EFI bedeutet OS Entwicklung

Eigentlich nicht viel. Nun, vielleicht ein bisschen. Okay, lass uns das erklären. UEFI stellt die Firmware-Umgebung für eine Pre-Boot-Phase bereit. Es bietet auch einige Laufzeitdienste für das Betriebssystem, es wird jedoch erwartet, dass das Betriebssystem, nicht die UEFI-Firmware, das System letztendlich antreibt. Mit diesen Diensten können Sie verschiedene Bootkonfigurationsaktivitäten ausführen - example.

Der Vorteil ist, dass, wenn Sie bereit sind, einen Bootloader zu verwenden, die multiboot 2 Sie nicht wirklich wissen müssen, etwas über UEFI zu sagen, entspricht - der Bootloader geladen werden Sie am nach der Multi-Boot-Spezifikation, dann ExitBootServices() nennt die in UEFI-Begriffe zerstören die Firmware-Umgebung.

Es ist möglich, einen Linux-Kernel zu erzeugen, der einen EFI-Stub besitzt und daher "ohne" einen Bootloader bootet - this blog shows you how. Sie können dies für Ihren Kernel tun - Sie müssen lediglich einen PE/COFF-Kernel erzeugen, der der Firmware-Bitness entspricht.

und sagen Sie mir vielleicht, welche Testumgebungen (vorzugsweise virtuell) Ich kann uns

Wenn Sie VMWare Workstation sich leisten können, das Sie massiv helfen. Sowie einen GDB Stub enthält, so dass Sie einen Teil etwas debuggen können, können Sie auch die virtuelle Maschine Definitionsdateien (* .vmx) bearbeiten

firmware="efi" 

enthalten und voila, wird VMWare eine voll funktionsfähige UEFI booten Umgebung. Funktioniert mit Linux und Windows.

Verschiedene Beiträge im Internet erwähnen QEMU-Setups und natürlich VirtualBox. Ich habe nie persönlich erfolgreich irgendein existierendes System auf der VirtualBox EFI-Plattform gebootet, und ich habe QEMU noch nicht ausprobiert, obwohl ich glaube, dass es und die verschiedenen anderen Emulatoren da draußen wahrscheinlich funktionieren.

Auch sollte ich investieren Zeit in ARM Montage suchen?

Das hängt von Ihren Zielen ab. Bei der Frage der Assembly sollte man es wissen, um ein OS zu schreiben. Ich denke nicht, dass es wichtig ist, für welche Plattform du schreibst - in der Tat denke ich, dass das Schreiben für mehrere dich die Unterschiede zwischen Maschinen wertschätzender machen wird.

Im Allgemeinen würde ich jedoch nicht versuchen, ein gesamtes Betriebssystem in Assembly zu schreiben. Der Hauptgrund dafür ist Zeit - ich nehme an, dies ist ein Hobby-Projekt, so dass etwas Belohnung für Ihre umfangreichen Bemühungen viel lustiger sein wird, als es zu versuchen, Montage zu debuggen, besonders für Sie, die Sie nicht kennen. Sie können immer, wenn Sie kompetenter werden, die Auswahlbits durch Assembler ersetzen, besonders da Sie genug vom Rest des Codes haben, um es zu testen.

0

Sie können Qemu verwenden, um einige Anwendungsentwicklung/-tests durchzuführen. Siehe this für weitere Informationen

Abgesehen davon würde ich sehr empfehlen, vertraut mit uefi und versuchen, einige Treiber/App-Entwicklung in der Uefi-Modell zu tun. Sie könnten versuchen, den Netzwerkstack über den Loader und die Netboot-Infrastruktur laufen zu lassen und wahrscheinlich eine bessere Pre-OS GUI zu installieren. Dies wird Sie nicht nur bei uefi gut machen, sondern Ihnen helfen, plattformspezifische Details zu verstehen.

Das ist mein Sprichwort, aber die obigen Kommentare sind gut zu bedenken.

Verwandte Themen