Betriebssystem
-
Er hat geschrieben "Dh. so weit in Assembler das ich meine C Funktionen aufrufen kann???". Und das dauert mit Sicherheit keine 2 Jahre bis man es soweit hat.
-
Sorry wenn ich das jetzt sage, aber vielleicht ist es besser, wenn du dich erst mal mit asm beschäftigst, sonst wird das nichts
.
-
UnwissendUNDDumm schrieb:
Hi!
Mal ne Frage...
Kennt jemand ein gutes Tutorial wie man ein Betriebssystem programmiert?
Dh. so weit in Assembler das ich meine C Funktionen aufrufen kann???Gruß
Der Dumme
Bist du ein Programmiergott oder was ist los? Denn wenn es auch Programme für dein System geben soll, musst du es zu 100% Windows bzw. Linux kompatibel machen.
Ich geb die 4 Jahre bist du scheiterst.
MfG CSS
-
Ich will ja keine Windows Programme oder so aufrufen können...
Ich bin auch kein Programmiergott...
Ich will es nur so weit bekommen, dass ich zb eine c Funktion aufrufen kann die Hallo Welt sagt... oder ähnliches... (also irgendwelche c programme)
-
http://borde.homeip.net/dennis/downloads/pmode-os.tar.gz
Das ist mein erstes Protected Mode Operating System! Eigentlich schaltet es nur in den PMode und führt den vorher geladenen Kernel aus. Das einzig tolle an der Sache ist, dass der Kernel in zwei Programmiersprachen vorliegt: C++ und Pascal. Beide sind kompilierbar und warten darauf ausprobiert zu werden.
Allgemein wird ein Assembler, ein C++ bzw. Pascal Compiler und ein Linker benötigt. Um das Make-Script nutzen zu können wird Linux (oder cygwin), fasm, g++ bzw. gpc und ld benötigt.
-
Ich wünsch dir viel Spaß dabei. Die 4 Jahre bis du scheiterst sind nicht übertrieben, glaub mir das.
Warum willst du "Hallo Welt" mit einer C-Funktion ausgeben??
Du kannst es ja direkt mit ASM ausgeben oder gibts da irgendwelche Probleme?Hast du Erfahrungen in ASM???
Wenn nicht, dann kannste aus den 4 Jahren 5 oder 6 machenGruß Red!
-
Ich weis das ich das mit hallo welt auch direkt in Assembler machen kann..
Es war nur ein Beispiel für eine x-beliebige c Funktion
Ich habe etwas erfahrung mit Assembler.
-
ehrlichgesagt ist es gar nicht so schwer ein os zu schreiben das hallo welt ausgibt ... aber mehr ist auch schon nur eine Illusion
-
hmmmmm? schrieb:
Er hat geschrieben "Dh. so weit in Assembler das ich meine C Funktionen aufrufen kann???". Und das dauert mit Sicherheit keine 2 Jahre bis man es soweit hat.
Gut, kommt auf die Betrachtungsweise an. Wenn man nur eine Art Assembler stub macht und damit eine C-Funktion aufruft, dann braucht man vielleicht ein paar Tage.
Ich hab's so verstanden, dass er ein OS machen will, für das man in C ein Programm schreiben (und ausführen) kann.
-
Richtig!
Genau das will ich machen!
-
Hier ein paar tips zum os proggen
1. Guten emulator dfür die platform runterladen fie man will
Bei x86 zu empfelen Bochs
2. Überlegen welches datei format der kern haben soll (Grub und lilo verstehen ELF) binutils mit elf unterstützung runterladen ev. auch crosscompiler notwendig
3. Viel Zeit haben und nicht aufgebenBisserl asm code zum einsteigen (für grub bootloader)
.text .globl start, __k32_startup, _main, ___main, start_gdt .extern end, edata, etext, _mem_start start: __k32_startup: lgdt start_gdt ljmp $8, $xxx /* gdt info */ .align 4 start_gdt: .word 23 .long start_gdt .word 0 .long 0x0000ffff .long 0x00CF9A00 .long 0x0000ffff .long 0x00CF9200 .align 4 xxx: movl $0x10, %edx mov %dx, %ds mov %dx, %es mov %dx, %fs mov %dx, %gs mov %dx, %ss mov %eax, (0x600) mov %ebx, (0x604) movl $0xA0000-4, %esp // movl %ebx, %esp movl %esp, %ebp pushl $0 popfl // clear bss xorl %eax, %eax movl $end, %ecx movl $edata, %edi subl %edi, %ecx cld rep stosb addl $0xFFF, %edi andl $0xFFFFF000, %edi // movl %edi, _mem_start //sollt variabel sein muss fkt schreiben!!!return((mem_start+(PAGE_SIZE-1))&0xFFFFF000); call _main __k32_end: jmpl __k32_end ___main: ret // put our GRUB bootloader header code here .align 4 multiboot_header: .long 0x1BADB002 ## magic .long 0x00000003 ## flags[16] .long 0-(0x1BADB002 + 0x00000003) ## zero crc of fields 1+2
einfach mit einer datei linken wo main eine c funtkion ist und es gibt keine probleme und einstiegs punkt auf start enden und fixe adress räume verwenden
OUTPUT_FORMAT("elf32-i386") ENTRY(start) SECTIONS { .text 0x100000 : { *(.text) _etext = .; etext = _etext; } .data : { *(.data) _edata = .; edata = _edata; } .bss : { *(.bss) *(COMMON) _end = .; end = _end; } }
einfach die datei mit -t bei gcc angeben
good luck
-
Erstmal danke für die (warscheinlich) gute Antwort!
Da ich beim ersten lesen nur die hälfte verstanden habe werde ich mich jetzt nochmal dadurch wurschteln
-
Hier noch ein paar sachen: sind aber alle gcc spezifisch (hab mit och keinem anderm compiler ein os gmacht sry)
gcc *.c *.s -c -nostdlib -nostdinc++ -nostdinc -Wall -D__KERNEL__ -fsigned-char
aussführen (erzeugt object datein)
ld-elf -X -x -E -e start -Tbootp.ld *.o -o kernel.elfin der bootp[b].ld steht
OUTPUT_FORMAT("elf32-i386') ENTRY(start) SECTIONS { .text 0x100000 : { *(.text) _etext = .; etext = _etext; } .data : { *(.data) _edata = .; edata = _edata; } .bss : { *(.bss) *(COMMON) _end = .; end = _end; } }
Dann solltest du dir ein disketten image vorbereiten wo grub installiert ist
Dann nach jeden neuen comnilieren die datei auf dem image updaten und danach mit bochs das disketten image emulieren
Bochs gibt relativ gut fehlermeldung zurück fals was schief läuftgood luck
-
wer sich wirklich für osdev interessiert sollte mal beim lowlevel-magazin vorbeischauen, http://lowlevel.brainsware.org/
-
oder, wenn man schlau ist, schaut man einfach mal in den linux kernel!
-
Ein einfaches os schreiben das hello world ausgibt ist wirklich simpel.
http://www.osdever.net/tutorials.php?cat=0&sort=1
Einfach tutorial abschreiben und fertig. Hab ich auch schon gemacht, aber kein wort kapiert
-
Autsch!
Das ist nicht gut, in einem Turtorial kein Wort verstanden zu haben.
Man sollte sich schon für das, was man macht interessieren!Aber jedem das Seine
MfG Red
-
Ich werde mir das Tutorial gleich mal angucken,
danke
-
Ich weiss jetzt nicht, ob das ihr schon genannt wurde, weil ich hier alles nur kurz überflogen hab.
-
Hallo
Ich hab zwar keine Ahnung von Assembler-Sprache und im Programmieren auch nicht so viel aber vielleicht müsstest du für deinen C/C++ Code den du nur über den Prozessor ausführen willst einen eigenen Compiler oder Linker bauen (programmieren). Ich weis nicht ob das so richtig ist. Sollte nur so ne Art Denkanstoss sein.
SteveO.