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
lade dir doch mal die quellen von memtest runter, dann sieht du was sie machen. Es wird wohl jeder compiler dafür gehen.
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.
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.
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
bei in dem thread das wort "BIOS" so oft vorkommt: man sollte beachten, dass das gerade am aussterben ist...
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, ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.