Betriebssystem



  • 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



  • Hast du vor, 2 Jahre zu investieren?



  • 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 🙄 .

    PS: Hier findest du vielleicht was...



  • 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 machen 😃

    Gruß 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 aufgeben 😉

    Bisserl 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.elf

    in 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äuft

    good 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.

    http://www.mega-tokyo.com/osfaq2/


Anmelden zum Antworten