Hallo,
wie compiliere ich ein Programm für einen PC Intel CPU wenn nur das
Programm ohne Betriebsystem laufen soll ?
z.B. Memtest86 läuft ja ohne Betriebsystem. Ich habe es nun über pxeboot
an einem PC am laufen, wenn ich nun das memtest durch mein programm
ersetzten möchte wie müsste ich es kompilieren ? Welcehn Compiler
bräuchte ich bzw. welche umgebung ?
Bei AVR habe ich ja z.b. wingcc brauche ich da was von Intel ?
Martin
Ohne Betriebssystem läuft kein PC. Auch memtest braucht zumindest ein
DOS. Was du wahrscheinlich willst, könntest du mit (Free-)DOS und einem
C-Compiler erreichen. Z.B. Turbo C von Borland.
Ich hatte unter DOS auch schon *.COM Programme geschrieben, die 6 Bytes
lang waren.
In Assembler. Da wurde nur ein Register gesetzt und wieder zurück
gesprungen.
> Ohne Betriebssystem läuft kein PC. Auch memtest braucht zumindest ein> DOS.
Das ist Blödsinn.
Schon allein weil ein Betriebssystem auch "nur" ein Programm ist.
Lutz Schulze schrieb:> Ohne Betriebssystem läuft kein PC.
Natürlich läuft es.
Dem Bootloader ist doch völlig wurscht, was er in den Speicher lädt.
Dann muss man eben alles selber machen, sofern man nicht BIOS Routinen
dafür benutzen kann. Vom Ausgeben auf die GraKa bis zum Plattenzugriff.
Karl Heinz Buchegger schrieb:> Vom Ausgeben auf die GraKa bis zum Plattenzugriff.
Und wie würdest du das bezeichnen? Wäre das kein "Betriebssystem"?
Für mich ist ein Betriebssystem etwas, was mir den Betrieb mit einem
System(PC) ermöglicht: Eingaben und Ausgaben. Sehe ich das falsch?
>> Vom Ausgeben auf die GraKa bis zum Plattenzugriff.>Und wie würdest du das bezeichnen? Wäre das kein "Betriebssystem"?
Während des E-Technik-Studiums 1997 hatten einige von uns ein
Oszilloskop in Assembler auf nem Pentium programmiert. Die
Grafikkarten-Zugriffe wurden direkt auf Speicherstellen ausgeführt.
Ein Betriebssystem ist Programm welches die Resourcen des Rechners
verwaltet und die Ausführung von Programmen auf einer vorgegebenen
Plattform ermöglicht und hierzu Grundfunktionen für I/O bereitstellt.
Die Formulierung ist natürlich hinreichend unscharft, so dass man recht
häufig darüber streiten kann, ob etwas bereits ein BS ist oder nicht.
Für die Ausführung vom Memtestx86 is kein BS notwendig.
Um ein Programm welches ohne BS lauffähig ist benötigst du die folgende
3 Dinge:
* Hardwarenahe Programmiersprache (den Bootloader wegen
Speicherbeschränkung am besten in ASM)
* Wissen über die vom Bios vorgegebenen Adressräume, Interupts und
Verhaltensweisen
* Wissen darüber, wie man eine x86 Plattform initialisiert und benutzt
Als kleine Starthilfe: das Bios nach dem Start auf einem bestimmten
Sektor der Festplatte einen Codebereich laden und ausführen. Dieser muss
wohlgeform sein, so dass er als gültig anerkannt wird. In diesem
Speicherbereich muss dein Bootloader liegen, welcher dann ersteinmal
Zugriff auf weiteren Maschinencode herstellt und das System in den
richtigen Modus bring (Real/Enhanced...). Hierzu ist der Sourcecode vom
Memtestx86 garnicht mal so schlecht als einstieg ;-)
Viel Erfolg!
Lutz Schulze schrieb:> Karl Heinz Buchegger schrieb:>> Vom Ausgeben auf die GraKa bis zum Plattenzugriff.> Und wie würdest du das bezeichnen? Wäre das kein "Betriebssystem"?
Ist Definitionssache, ob man die BIOS Routinen schon als Betriebssystem
ansieht oder nicht. Wenn man hinreichend masochistisch veranlagt ist,
kann man natürlich auch den GraKa Controller selbst initialisieren und
dann selbst die entsprechenden Bits im Speicher setzen um einzelne Pixel
einzuschalten.
> Für mich ist ein Betriebssystem etwas, was mir den Betrieb mit einem> System(PC) ermöglicht: Eingaben und Ausgaben. Sehe ich das falsch?
Das ist ein bischen sehr schwammig.
Hauptaufgabe eines BS ist der geordnete Betrieb und das Verwalten von
Resourcen. Inwiefern man da jetzt Dinge, die in einer Treiberschicht
ansiedeln kann, als wesentilchen Teil eines BS ansieht, ist zum Teil
auch Geschmackssache. Soooo mächtig sind die BIOS Teile dann auch wieder
nicht.
> Ohne Betriebssystem läuft kein PC. Auch memtest braucht zumindest ein> DOS.
Blödsinn. DOS ist ein Betriebssystem unter vielen und ist auch nur ein
Programm.
Der Computeranalphabetismus schlägt wieder mal voll zu.
Danke, ok dann ist also schon machbar, aber es gibt keine fertige
Entwicklungsumgebung mit dem ich einfach ein C Programm auf einer x86
CPU laufen zu lassen wie es bei anderen Prozessoren machbar ist, da
werde ich mir dann doch genauer die Sourcen vom Memtest anschauen
müssen, da ist auch der Loader in asm dabei.
Martin
olf schrieb:>> Ohne Betriebssystem läuft kein PC. Auch memtest braucht zumindest ein>> DOS.>> Blödsinn. DOS ist ein Betriebssystem unter vielen und ist auch nur ein> Programm.>> Der Computeranalphabetismus schlägt wieder mal voll zu.
Immer diese Überheblichkeit hier, und dann auch noch von Leuten die
nicht wissen was sie schreiben.
Sechs, setzen, und zwar ganz hinten. Und dort mal googeln.
Mein Tipp: Schau dir den EMU8086 an.
Damit kannst du das gewünschte Programm schreiben. Oder das bereits
geschriebene aablaufen lassen: Hello World ist sogar das erste
Beispielprogramm im Tutorial. Der Emulator hat mehrere nette Vorteile:
# Du kannst ihn in deinem Windows laufen lassen und brauchst dein
Programm für den Test nicht auf eine Floppy zu schreiben und den Rechner
resetten.
# Die Emulatorlibrary bietet verschiedene I/O-Geräte an, die man
ansprechen kann.
# Man kann das Programm schrittweise abarbeiten und ggf. sehen wo es
noch hakt.
Technisch wird die Ausgabe des Hello World über einen BIOS Interrupt
direkt in den VGA-Grafikspeicher gemacht. Der Emulator hat eine
Emulation dafür.
EMU8086
http://www.emu8086.com/assembler_tutorial/start.html
Wirklich nur ein Hallo Welt ist einfach... Hallo Welt in Assembler
schreiben und dann das assemblierte Ergebnis in den Bootsektor deines
Mediums schreiben. Kann man prima mit einer VM und einer simulierten
Diskette ausprobieren, da alles was im Bootsektor steht erstmal
eingelesen und ausgeführt wird, für Textausgabe gibt es BIOS-Funktionen,
folglich braucht man da keinerlei "Betriebssystem". Wenn das Programm
größer wird oder man den Real-Mode der CPU verwenden will wirds
komplizierter, aber auch das geht. Kann man sich bei den
Hobby-Betriebssystemschreibern abgucken.
Nils S. schrieb:> dall schrieb:>> Real-Mode der CPU verwenden>> Den verwendet man, wenn man es so macht, wie du vorschlägst. Du meinst> den Protected Mode/32bit.
Argh, stimmt natürlich... hab noch überlegt ob ichs sicher ist sicher
nochmal nachgucke und mich dagegen entschieden =/ Danke für die
Korrektur
Hallo,
lowlevel.eu ist das was ich suche :)
EMU8086 ist leider nicht ganz das was ich meine, die Programme die der
erstellt brauchen auch wieder irgendetwas DOS artiges.
Martin
Martin, ich würde dir raten, das ganze in C anzuschauen, wenn man mit
Assembler auf der Ebene nicht zurechtkommt, wirds sehr Haarig.
Das LowLevel Wiki ist in etwa das OSDev-Wiki auf Deutsch, nur leider
noch lange nicht so umfangreich.
Du kannst dir auch "Brans Kernel Development Tutorial" ansehen und
"James Molloy's Roll your own toy unix clone".
Beides schöne Tutorials, das erste mit IRQ-Verwaltung, Timer, VGA und
Tastatur. Das zweite dann auch mit Multitasking, virtuellem File System,
Memory Management, ...