eigenes os, aber wieso funkts nicht??



  • Hallo

    ich habe aus einem tutorial ein paar codes, die ich später weiterentwickeln wollte, aber sie funktionieren nicht. Kann mir jemand helfen und sagen wie ich mein OS in den Bootmanager bekomme??

    Boot:

    org 0x7C00
    start:
    cli 
    mov ax, 0x9000 
    mov ss, ax 
    mov sp, 0 
    sti 
    
    mov [bootdriv], dl
    
    call load
    
    mov ax, 0x1000
    mov es, ax
    mov ds, ax
    push ax
    mov ax, 0
    push ax
    retf
    
    bootdriv db 0 ; Das Bootlaufwerk
    loadmsg db "Lade HOASCK...",13,10,0
    putstr:
    lodsb
    or al,al
    jz short putstrd
    mov ah,0x0E
    mov bx,0x0007
    int 0x10
    jmp putstr
    putstrd:
    retn
    
    load:
    push ds
    mov ax, 0
    mov dl, [bootdriv]
    int 13h
    pop ds
    jc load
    load1:
    mov ax,0x1000
    mov es,ax
    mov bx, 0
    mov ah, 2
    mov al, 5
    mov cx, 2
    mov dx, 0
    int 13h
    jc load1
    mov si,loadmsg
    call putstr
    retn
    
    times 512-($-$$)-2 db 0
    dw 0AA55h
    

    Kernel:

    nachricht db "Eine Taste drücken, um neu zu starten...",13,10,0
    
    mov ax, 1000h
    mov ds, ax
    mov es, ax
    start: 
    mov si, nachricht 
    call schreiben 
    call lesen 
    jmp reset 
    
    reset:
    db 0Eah
    dw 0000h
    dw 0FFFFh
    
    lesen:
    mov ah, 0
    int 016h
    ret
    
    schreiben:
    lodsb
    or al, al
    jz short schreiben_d
    mov ah, 0x0E
    mov bx, 0x0007
    int 0x10
    jmp schreiben
    schreiben_d:
    retn
    


  • patrick146 schrieb:

    aber sie funktionieren nicht. Kann mir jemand helfen und sagen wie ich mein OS in den Bootmanager bekomme??

    Wenn etwas nicht funktioniert wäre es hilfreich wenn du schreibst was du gemacht hast und was für ein Fehler auftritt.

    Ansonsten ist das was du da hast dafür gedacht vom BIOS direkt geladen zu werden und nicht von einem Bootloader. Das BIOS läd den ersten Sektor des Bootlaufwerkes in den Speicher und führt den darin enthaltenen Code aus.



  • Danke für deine Antwort.

    Das blöde es gibt keinen Fehler, weil ich das Programm nicht starten kann. Ich hab es mit dem ONE TIME BOOT MENÜ probiert, aber es geht nicht. Weiss jemand wie man es machen kann??

    mfg



  • naja wenns am bootloder scheitert .... wirds bestimmt ein tolles OS.



  • Vielleicht solltest Du Dich zunächst etwas näher mit funktionierenden BL beschäftigen: http://www.henkessoft.de/OS_Dev/OS_Dev1.htm
    http://www.c-plusplus.net/forum/viewforum-var-f-is-62.html



  • Was heißt du kannst das programm nicht starten ? Bleibt der Bildschirm schwarz ? Das heißt nicht das das Programm nicht gestartet ist, es kann auch daran liegen das du keine Ausgabe siehst.

    Du solltest das DS register mal setzen, bevor du es verwendest
    Mach mal

    mov ds,cs
    

    am Anfang



  • Probiere doch zunächst mal so etwas:
    http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId94363

    Du kannst auch hier schauen:
    http://www.brokenthorn.com/Resources/OSDev3.html



  • Als erstes würde ich mal empfehlen, mit einem Emulator zu testen, z.B. qemu. Das ist wesentlich angenehmer als mit einem echten PC zu testen und ständig neu zu booten. Außerdem hilft es beim Debuggen, du kannst dann beispielsweise den aktuellen Registerinhalt ausgeben lassen.

    Der einzige richtige Fehler in deinem Code ist der hier:

    patrick146 schrieb:

    Kernel:

    nachricht db "Eine Taste drücken, um neu zu starten...",13,10,0
    

    Du benutzt flache Binärdateien und dein Bootloader springt einfach an den Anfang des Kernels. Entsprechend sollte da auch Code liegen, und nicht irgendeine Nachricht. An dieser Stelle versucht er, den Text als Code auszuführen, was natürlich in die Hose geht. Verschieb den String einfach ans Ende des "Kernels".

    Für qemu musste ich auch noch darauf achten, dass das Floppyimage nicht nur aus Bootloader und Kernel besteht, denn dann hätte es eine Größe, die nicht durch 512 teilbar ist. Der letzte Sektor scheint dann nicht lesbar zu sein.

    So, und nachdem das alles geklärt wäre, komme ich zu meinem üblichen Teil: Ein eigenes OS schreiben bedeutet nicht zwangsläufig einen eigenen Bootloader zu schreiben. Das sind zwei unterschiedliche Projekte. Wenn du den simplen Bootloader einmal zum Laufen gebracht hast, hast du die Bestätigung, dass du es hinkriegst - und dann wäre es an der Zeit, ihn zur Seite zu legen und das eigentliche OS mit "was richtigem" zu schreiben, also Multiboot zu nehmen und z.B. GRUB als Bootloader. 😉

    Schau dir am besten mal die Tutorialreihe unter http://lowlevel.brainsware.org/wiki/index.php/OS-Dev_für_Einsteiger an.



  • Taljeth hat das hervorragend beschrieben. Du kannst sogar zweigleisig fahren: Mit eigenem Bootloader und GRUB. 🙂
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-253538.html

    Selbst ein gemeinsames Makefile für Windows und Linux ist möglich wie der Build-Prozess von PrettyOS beispielhaft zeigt.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-254893-and-start-is-20.html



  • danke für die zahlreichen antworten!

    ich versuche jetzt grub zu installieren nur ich komme nicht vom fleck, brauch ich grub4dos, grub0. oder grub1.?? wie funktioniert es, bzw kann ich überhaupt ein eigenes os auf grub starten hab auch easybcd probiert bekam einen eintrag im Windows Bootmanager aber dann gabs ne WIndows Fehlermeldung "Defekte Datei".

    mfg



  • patrick146 schrieb:

    ich versuche jetzt grub zu installieren nur ich komme nicht vom fleck, brauch ich grub4dos, grub0. oder grub1.?? wie funktioniert es

    Am einfachsten ist es wahrscheinlich, eine Linux Distribution zu installieren und bei der Installation GRUB auszuwählen. Dann musst aber unter Linux arbeiten. Wenn Du Linux erfolgreich installiert hast, gibt es ein /boot/grub Verzeichnis. In diesem Verzeichnis findest Du eine menu.lst Datei, in der Du einen neuen Eintrag manuell erstellen kannst. Nach dem Neustart des Rechners hast Du GRUB Menü und dort wählst Du dein "OS" aus und startest es. So ist es ungefähr. Also alles recht einfach - hängt davon ab, ob Linux für Dich ok ist...



  • patrick146 schrieb:

    ich versuche jetzt grub zu installieren nur ich komme nicht vom fleck, brauch ich grub4dos, grub0. oder grub1.?? wie funktioniert es, bzw kann ich überhaupt ein eigenes os auf grub starten

    Wenn du unter Windows entwickelst, ist es für dich vermutlich das geschickteste, grub4dos zu benutzen (was eine modifizierte Variante von GRUB 0.9x ist).

    Um deinen eigenen Kernel mit GRUB zu benutzen, muss dein Kernel mit dem Multiboot-Standard kompatibel sein. Das heißt dass du in deinen Kernel einen kleinen Header aufnehmen musst (bei ELF sind das 12 Bytes). In ganz konkreten Schritten ist das in diesem Tutorial beschrieben (wobei das unter Windows voraussetzt, dass du dir bereits eine Cross-Compiler-Umgebung aufgesetzt hast, um ELF-Dateien zu erzeugen; das ist hier beschrieben).

    abc.w hat natürlich insofern recht, dass das unter Linux alles mit etwas weniger Vorbereitungsaufwand funktioniert. Wenn du ein Linux installiert hast, ist es wesentlich leichter, einfach das Linux zur OS-Entwicklung herzunehmen anstatt die Umgebung unter Windows aufzusetzen.



  • Ich habe jetzt alles mit grub4dos und grubinst_gui.exe eingestellt und neugestartet und es wird menu.lst und grldr nicht gefunden.
    zuerst hab ich das eingegeben:
    bcdedit /create /d "Start GRUB4DOS" /application BOOTLOADER
    bcdedit /set {id} device boot
    bcdedit /set {id} path \grldr.mbr
    bcdedit /displayorder {id} /addlast

    dann hab ich grldr und menu.lst in irgendeine partion gelegt und grldr.mbr auf c:.

    dann hab ich bei grubinst_gui.exe alles auf hd0 verwiesen, aber jetzt kommen die fehlermeldungen:
    Try hd0,0: FAT16: No GRLDR
    Try hd0,1: This partition is NTFS but with unknown boot record. Please install Microsoft NTFS boot sectors to this partition correctly, or create an FAT12/16/32 partition and place the same copy of GRLDR and MENU.LST there.
    ...

    Was soll ich tun?? ich kann nicht mal windows starten?? bitte helft mir!

    mfg Patrick



  • Du musst nun den Rechner von der originalen Windows CD (oder Wiederherstellungs-CD) starten und in die Konsole wechseln und fixboot aufrufen, um zumindest Windows wieder startbar zu machen. Welche Parameter fixboot benötigt, weiss jetzt nicht genau. Notfalls sich die Hilfe anschauen:

    fixboot /?



  • Hm, ich bin mir ehrlichgesagt nicht mehr ganz sicher, wie deine Installation jetzt aussieht - sind mindestens drei verschiedene Bootloader im Spiel, oder? Was bootet denn jetzt zuerst, also wer ist im MBR? Verstehe ich es richtig, dass GRUB versucht zu booten, aber seine stage2 nicht findet? Wenn ja, bleibt dir wohl nichts anderes übrig, als erstmal von einer CD (oder Diskette, USB-Stick, was auch immer) zu booten und wieder einen lauffähigen Bootloader zu installieren.

    Du kannst auch gern mal im IRC in #lost auf irc.euirc.net vorbeischauen, im IRC löst sich sowas vielleicht leichter als in einem Forum.



  • ich bin jetzt in der eingabeaufforderung auf der cd, nur fixboot kennt er nicht! Was soll ich sonst eingeben??



  • 😮 es gibt noch fixmbr...



  • fixmbr dürfte sowieso der richtigere sein, weil der Bootsektor der Partition nicht viel bringt, wenn der MBR eine kaputte GRUB-Installation lädt. 😉



  • ja, taljeth du hast recht, aber jetzt gehts!! 🙂 danke ihr seid die besten!!!
    was kann ich jetzt machen um grub4dos zu installieren??
    oder was war der fehler, wieso grub nicht funktionierte??



  • Wie oben gesagt, komm am besten mal ins IRC.

    Die meisten installieren sich überhaupt keinen anderen Bootloader auf die Festplatte, sondern benutzen meistens nur Emulatoren zum testen. Wenn auf dem echten PC getestet werden soll, wird dann eine CD oder Diskette genommen. Aber wenn man es richtig anstellt, müsste man natürlich auch einen GRUB installieren können (was grub4dos betrifft, bin ich aber mehr oder weniger ahnungslos, ich benutze kein Windows). Du könntest vielleicht versuchen, die Dateien (grldr und so) auf die FAT-Partition zu packen, die du anscheinend hast.


Anmelden zum Antworten