Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 26.12.2007, 14:51 Titel: Systemspezifische Compiler |
|
|
Zitat aus diesem Thread (der inzwischen glücklicherweise geschlossen wurde):
http://forum.qbasic.at/viewtopic.php?p=71832#71832
Wolfi30 hat Folgendes geschrieben: | Hi!
Es sollte bekannt sein, das bei Windows-Compilern alle genutzten Befehle intern auf die WINAPI zugreifen(user32,gdi32,kernel32,advapi32) und unter DOS intern die sogenannten Interruptfunktionen(int 21h(DOS), int 13h(Laufwerke), int 10h(Grafik-Bios)) benutzt werden!
Ohne API würde nix gehen, da man sich sonst alles selbst schreiben müsste von A-Z, was eine Menge Arbeit kosten würde......
Deswegen sind solche Fragen ob es möglich wäre ein Betriebssystem zu schreiben mit Freebasic(Windows,DOS,Linux) überflüssig, da die Befehle intern alle auf das entsprechende API des Systems gelinkt werden!
Benutzt mal einen Debugger wie OLLYDBG dann seht ihr mal was da alles an API-Befehlen benutzt werden in eurer Anwendung!
|
Das verstehe ich nun wieder nicht: Soweit ich weiß, muß der Boot-Loader systemunabhängig, also in Assembler programmiert sein. Danach kann man den Rest in C/C++ oder anderen Sprachen schreiben. Das muß dann aber compiliert werden, und die Compiler sind (nach Wolfi30) systemgebunden. Das kann aber nicht funktionieren, wenn man auf dem selbstgeschriebenen Boot-Loader ein eigenes System aufbauen will (was immerhin hin und wieder gemacht wird). _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 26.12.2007, 15:02 Titel: |
|
|
Hallo,
bei der Programmierung eines solchen Bootloaders darf natürlich nur auf BIOS-Interrupts zurückgegriffen werden. Den DOS-spezifischen INT21h darf man beispielsweise in dem Fall nicht benutzen. Compiler für ein bestimmtes Betriebssystem machen vom API des Betriebssystems aber bei den erzeugten Binärdateien Gebrauch. Daher wird das Grundgerüst in Assembler aufbauend auf BIOS-Ints geschrieben und nicht mit einem systemabhängigen Compiler erstellt. Ich kenn mich mit Assembler und Bootloadern allerdings auch nicht besonders aus, da müsste schon einer der OS-/Lowlevel-Programmierer hier wie Mao Näheres schreiben.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Wolfi30
Anmeldungsdatum: 17.08.2007 Beiträge: 38
|
Verfasst am: 26.12.2007, 18:15 Titel: |
|
|
Hi!
Zitat: | Das verstehe ich nun wieder nicht: Soweit ich weiß, muß der Boot-Loader systemunabhängig, also in Assembler programmiert sein. Danach kann man den Rest in C/C++ oder anderen Sprachen schreiben. Das muß dann aber compiliert werden, und die Compiler sind (nach Wolfi30) systemgebunden. Das kann aber nicht funktionieren, wenn man auf dem selbstgeschriebenen Boot-Loader ein eigenes System aufbauen will (was immerhin hin und wieder gemacht wird). |
Hab das vielleicht zu einfach dargestellt!
Soweit stimmt das! Der Compiler erzeugt die ausführende Datei aber nicht in einem Ruck sondern braucht noch einen Linker, der die compilierte Datei wiederum in ein dem System bekanntes Endformat wandelt z.B *.exe(Systemgebunden(DOS+WIN))
Der Schritt vor dem linken ist noch systemunabhängig!
Deswegen wird C++ gern als systemunabhängig dargestellt, da der Compiler im 2-pass-Verfahren arbeitet(erst compiliert und dann systemspezifisch linkt), gegenüber den Basic oder Pascal-Compilern die meist als 1-pass Compiler in einem Ruck alles erzeugen.
Gruß Wolfi |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 26.12.2007, 20:05 Titel: |
|
|
@Wolfi30
Aha, danke. Wenn man also FreeBasic anweist, nur eine .obj-Datei (vorkompilierte Datei ohne Link) zu erstellen, könnte man die mittels eines anderen Linkers auch in ein anderes System übertragen bzw. ein Betriebssystem (außer Boot-Loader ) damit erstellen- richtig? _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 26.12.2007, 20:08 Titel: |
|
|
Theoretisch könntest du jede Programmiersprache nehmen, von der Definition her. Du bräuchtest bloß die Möglichkeit, dem Compiler mitzuteilen, dass du systemunabhängig bleiben möchtest (was z.B. beim C(++)-Compiler der GCC möglich ist). Oder eine andere Möglichkeit, den reinen Code später zu extrahieren (so kann man mit gewissem Aufwand auch in Delphi ein Betriebssystem oder sagen wir mal Stand-alone-Hello-World schreiben, so schon gesehen ).
Wichtig ist wie gesagt nur, dass keine system-spezifischen Funktionen benutzt werden. (Datei lesen, Fenster öffnen, Grafik zeichnen, auch Text ausgeben - z.B.)
Das "Problem" ist (zumindest auf der x86 Architektur (wie ist's woanders?)), dass der reine Bootloader nur maximal 512 Bytes, abzüglich Boot-Signatur nur 510 Bytes groß sein darf.
Das lässt sich mit Assembler noch am Besten erreichen. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Wolfi30
Anmeldungsdatum: 17.08.2007 Beiträge: 38
|
Verfasst am: 26.12.2007, 21:37 Titel: |
|
|
Hi!
Zitat: | @Wolfi30
Aha, danke. Wenn man also FreeBasic anweist, nur eine .obj-Datei (vorkompilierte Datei ohne Link) zu erstellen, könnte man die mittels eines anderen Linkers auch in ein anderes System übertragen bzw. ein Betriebssystem (außer Boot-Loader cool ) damit erstellen- richtig? |
Richtig! Du mußt dem Compiler am linken hindern und einen Linker benutzen für das eigene OS
Zitat: | Das "Problem" ist (zumindest auf der x86 Architektur (wie ist's woanders?)), dass der reine Bootloader nur maximal 512 Bytes, abzüglich Boot-Signatur nur 510 Bytes groß sein darf.
Das lässt sich mit Assembler noch am Besten erreichen. |
Der Bootloader muß meines Wissens nach an einer festgelegten Startadresse, die das Bios vorgibt, stehen und die kann man nur in einem Assembler definieren!
Gruß Wolfi |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 26.12.2007, 22:33 Titel: |
|
|
Der Bootloader steht immer im ersten Sektor des Boot-Mediums. Das BIOS lädt diesen, schaut nach der Boot-Signatur (Byte 511 und 512), Word 0xAA55.
Wenn die Boot-Signatur gefunden wurde erkennt das BIOS den Bootloader als Bootloader an,lädt ihn an Adresse 0x0000:0x7C00 des Hauptspeichers und springt anschließend dorthin. Alles Weitere ist Aufgabe des Bootloaders. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Wolfi30
Anmeldungsdatum: 17.08.2007 Beiträge: 38
|
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 26.12.2007, 23:43 Titel: |
|
|
(fast) alles klar! Danke für die informativen Antworten. Wieder was dazugelernt  _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
|