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 malmov ds,cs
am Anfang
-
Probiere doch zunächst mal so etwas:
http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId94363Du 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.htmlSelbst 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} /addlastdann 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.