Autor Thema: Kernel + Grub = ?  (Gelesen 6854 mal)

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« am: 15. April 2013, 19:24 »
Hallo liebe LowLevel Community,

Ich habe momentan ein kleines Problem.
Ich habe mir ein image mit grub beladen und dann einen einfachen kernel mit nasm gemacht der mir eigentlich "Hallo Welt" ausgeben sollte.
Leider hatdas nicht geklappt.
Die Tutorials von eurer Seite wie C Kernel mit Grub hab ich mir durch gelesen,wollte das Kernel aber nur in assembler machen.
Wisst ihr wie ich das umsetzten kann?.
(P.S Eine Erklärung zum Kompilieren wäre nett da ich da noch blutiger Anfänger bin)

Mineorbit

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 15. April 2013, 19:31 »
Hmm entweder du lernst die jeweilige Sprache, und lernst C in diese zu übersetzen.
Oder du versuchst, je nach C compiler ein Zwischenprodukt rauszubekommen, dass ist in
Assembler geschrieben. Da musst du jedoch die ganzen "Computer Kommentare" wegstreichen und
dir den Code raussuchen, was jedoch nicht allzu schwer ist. Wie dies jedoch genau geht, kann ich
dir nicht sagen, mal sehen ob es jemand anderes hier kann ;)

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 15. April 2013, 19:41 »
Hmm entweder du lernst die jeweilige Sprache, und lernst C in diese zu übersetzen.
Oder du versuchst, je nach C compiler ein Zwischenprodukt rauszubekommen, dass ist in
Assembler geschrieben. Da musst du jedoch die ganzen "Computer Kommentare" wegstreichen und
dir den Code raussuchen, was jedoch nicht allzu schwer ist. Wie dies jedoch genau geht, kann ich
dir nicht sagen, mal sehen ob es jemand anderes hier kann ;)
Erstmal vielen Dank für die Sehr schnelle Antwort :-)
Also wie schon gesagt wollte ich eingentlich mit Abler das komplette Kernel machen.
(Mir gehts dabei nicht darum mir was zu beweisen sondern nur darum einwenig assembler zu lernen)
Ich möchte im grunde von euch nur einen Beispielcode in Assembler für ein Hallo Welt und eine Schrittliste um das ganze zu kompilieren und in mein grub legacy beladenes .img zu packen.

Über Antworten freue ich mich sehr.

Mineorbit

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 15. April 2013, 19:59 »
Zeig doch mal deinen jetzigen Code her. Darauf kann man doch sicherlich aufbauen.
Dieser Text wird unter jedem Beitrag angezeigt.

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 15. April 2013, 20:26 »
Zeig doch mal deinen jetzigen Code her. Darauf kann man doch sicherlich aufbauen.
Sehr gerne!
(Ist ziemlich schlecht!)
mov ax, 1000h
mov ds, ax
mov es, ax
 
start:               
mov si, nachricht   
call schreiben     
 
call lesen           
jmp reset           

nachricht db "Cuttingboard OS : Test 1 Eine Taste drücken, um neu zu starten...",13,10,0

schreiben:
lodsb
or al, al
jz short schreiben_d
mov ah, 0x0E
mov bx, 0x0007
int 0x10
jmp schreiben
 
schreiben_d:
retn

lesen:
mov ah, 0
int 016h
ret

reset:
db 0Eah
dw 0000h
dw 0FFFFh

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 15. April 2013, 22:54 »
Wenn du deinen Kernel mit GRUB laden willst, solltest du den Multiboot-Standard berücksichtigen. Am besten nimmst du den Assemblerteil aus Teil 4 unseres Tutorials und ersetzt dann einfach nur die in C geschriebene init-Funktion durch eigenen Assemblercode.

Du solltest allerdings beachten, dass du dann schon im Protected Mode bist, also die BIOS-Interrupts nicht mehr benutzen kannst. Du musst dann direkt in den Videospeicher an 0xb8000 schreiben.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 16. April 2013, 07:24 »
Alles klar!
Wie builde ich aber die daten in eine .bin mit der  auf AntMakefile?
(Also wie benutze ich die Makefile?)
Ich freue mich auf Antworten
Mineorbit
« Letzte Änderung: 16. April 2013, 15:43 von mineorbit »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 16. April 2013, 09:42 »
So wie im Wiki beschrieben, außer dass du keine .c-Datei, sondern eine zweite .S-Datei hast.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 16. April 2013, 15:44 »

Naja eigentlich habe ich das so gemeint,dass ich nicht verstanden habe wie man die Makefile ausführt.
Brauche ich dafür einen speziellen linker?

Mineorbit

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 16. April 2013, 17:43 »
Ein Makefile ist eine Datei (File) für Make. :-)

Du brauchst das Programm "make", um Makefiles zu benutzen. Sollte zu deinen Entwicklungs-Tools gehören.

Compiler, Linker und andere Programme werden dann von "make" so aufgerufen, wie das Makefile das vorschreibt.

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 16. April 2013, 18:27 »
Ein Makefile ist eine Datei (File) für Make. :arrow:

Du brauchst das Programm "make", um Makefiles zu benutzen. Sollte zu deinen Entwicklungs-Tools gehören.

Compiler, Linker und andere Programme werden dann von "make" so aufgerufen, wie das Makefile das vorschreibt.
:grin:
Danke damit kann ich sehr viel anfangen!
Mineorbit

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 22. April 2013, 18:21 »
Ich wollte nur noch mal kurz sagen dass sich das Thema erledigt hat, da ich jetzt euer Hallo Welt tutorial geschaftt habe.
Ich hätte nurnoch die frage wo ich lernen kann c zu programmieren?
 
mineorbit

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 22. April 2013, 19:01 »
du solltest schon die Sprache beherrschen, in der du dein os schreiben willst, deshalb rate ich dir, erstmal nach tutorials, büchern oder sonst irgendwas zu suchen, damit du C lernst. Für osdev braucht man aber ab und zu auch mal ein bisschen assembler, aber das bisschen ist auch im wiki erklärt: http://www.lowlevel.eu/wiki/Teil_2_-_Assembler_101

Von galileo gibts auch ein openbook zum thema c: http://openbook.galileocomputing.de/c_von_a_bis_z/
Damit kannst du die Grundlagen und C-Standards auf jeden fall lernen.
Ansonsten google einfach mal ;)

 

Einloggen