Autor Thema: Hilfe bei Tutorialreihe "OS dev für Anfänger"  (Gelesen 7014 mal)

Bombman

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« am: 14. February 2010, 14:18 »
hallo,ich bin sehr interessiert an der OS programierung. dazu habe ich mir die tutorial-reihe "OS dev für Anfänger angesehen".
Jedoch komme ich jetzt nicht weiter.Ich habe gleich mehrere Probleme.
1.Problem:
bei der makefile aus kapitel 4 "Hello world" bekomme ich immer einen fehler bei:

CC = gcc
LD = ld

ich weiss das da steht man muss das anpassen,aber wie???
benutze linux (kubuntu).

2.Problem:
Am Ende des Kapitel 4 steht das es sinnvoll wäre die Ausgaben auch auf seriellen Schnittstellen auszugeben.
Aber wie ist der Quellcode und in welche datei(stelle)?
in init.c oder stdarg.h???

3.Problem:
In Kapitel 5 "Interrupts"
soll man die GDT und IDT einfügen.
Aber wo bitte??? denke mal start.S aber an welcher Stelle??

Wie ihr seht bin ich sehr verzweifelt. Bin noch am lernen und noch nicht so weit.
Bitte Hilfe!

MfG Bombman

SHyx0rmZ

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 14. February 2010, 14:28 »
1. Du musst warscheinlich noch das Paket build-essential über deinen Paketmanager installieren.

2. Den Quellcode findest du in http://lowlevel.brainsware.org/wiki/index.php/Serielle_Schnittstelle#Beispiel, als Datei würde sich z.B. serial.c anbieten. Wirklich nötig ist das allerdings nicht.

3. IDT und GDT kannst du auch im Endeffekt wieder einfügen, wo du willst, meist sind das idt.c und gdt.c. Achte aber darauf, dass C-Code nicht in Assemblerdateien (*.S) gehört und umgekehrt!
@X="krJhbuaesrytre c a cnR.ohut";while@X[/(..)(.)/];@X=@X[3..-1]+$1;print$2;end
"Scheiß auf Perl, wir haben Kekse" - Emperor Ruby

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #2 am: 14. February 2010, 14:43 »
Es gibt auch den Sourcecode der Tutorialreihe, nämlich hier. Die Idee ist natürlich nicht, dass man das einfach kopiert, aber wenn man was nicht versteht, kann man da auch mal nachschauen.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Bombman

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 14. February 2010, 15:41 »
Danke für die schnellen Antworten, hab nicht vor alles zu kopieren. Möchte bloß lernen und gucke mir die Quelldateien an um möglichst viel nachvollziehen zu können.

Und:
Wenn man die GDT.c und IDT.c erstellt hat, wie ruft man die dann auf?

ich würde vielleicht sagen so:

extern gdt
extern idt

call gdt
call idt

oder wie???

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 14. February 2010, 15:53 »
Normalerweise packt man in eine Header (z.B. GDT.h oder IDT.h) eine Deklaration der Funktionen die man Aufrufen möchte, zB:
void init_gdt();
Dann inkludiert man in der Datei in der man die Funktion möchte zB main.c die GDT.h und benutzt die deklarierte Funktion:
#include "GDT.h"

[...]
init_gdt(); // init_gdt aufrufen
[...]
und in der GDT.c dann:
#include "GDT.h"

void init_gdt()
{
  /* Implementierung der Funktion */
}

Aber was du wirklich brauchst ist ein Buch zu C und dann erstmal ein paar Anwendungen auf deinem Hostbetriebssystem schreiben.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Bombman

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 14. February 2010, 16:04 »
Habe schon 2 Bücher zu C die mir nicht sehr geholfen haben :(

ich habe lediglich keine lowlevel-erfahrung und bin allgemein im Bereich "OS Programmierung" noch sehr unsicher.

Und danke für den Link zu den Quelltexten.
In der console.c gibt es diese ganze funktionen die ich nicht so ganz verstehe.
ich weiss das es etwas mit den zeilen und spalten zu tun hat aber warum die ganzen Ausdrücke bsp: x*80*25= i +160 oder so.

und welcher unterschied ist zwischen printf() und kprintf()?

Danke nochmal für die Hilfe

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 am: 14. February 2010, 16:12 »
Habe schon 2 Bücher zu C die mir nicht sehr geholfen haben :(
Die sollen dir auch nur helfen mit C umzugehen und nicht damit ein Betriebssystem zu programmieren.

Zitat
In der console.c gibt es diese ganze funktionen die ich nicht so ganz verstehe.
ich weiss das es etwas mit den zeilen und spalten zu tun hat aber warum die ganzen Ausdrücke bsp: x*80*25= i +160 oder so.
Dafür sorgen, dass an der richtigen Position ausgegeben wird. Ohne konkrete Frage, kann ich da aber leider keine konkrete Antwort geben.

Zitat
und welcher unterschied ist zwischen printf() und kprintf()?
Abgesehen von Namen soll in kprintf nur ein Teil der printf-Formatspecifier unterstützt werden, zB braucht man im Kernel normalerweise kein Ausgabe von float oder (long) double.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Bombman

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 15. February 2010, 21:22 »
Noch eine Frage:

Womit soll ich anfangen???

erst richtig c zu lernen dann assember und dann den aufbau eines betriebssystems???


rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 15. February 2010, 21:30 »
Ob du erst C und dann Assembler lernen möchtest, ist dir überlassen.
Das mit dem OS würde ich aber auch ganz an das Ende schieben ;).
Erst mal brauchst du die Grundlagen um den Code zu verstehen und selber zu schreiben.
Zumal das mit C etwas fieß werden kann, da man mit C sehr undurchsichtigen aber dafür effektiven Code schreiben kann.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Bombman

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 15. February 2010, 21:36 »
Was für tipps habt ihr??

also bücher?? (wenn welche)
links?

und naturlich selbst coden^^

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 15. February 2010, 21:59 »
Ein Buch, mit dem ich C sehr gut gelernt habe war:
"C von A bis Z"

Da steht alles nützliche und grundlegene drin.
Sobald du die Grundlagen drauf hast, kannst du dir ja auch Code anschauen und versuchen zu verstehen, warum der Programmierer das so gemacht hat.
So habe ich C recht schnell gelernt.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Bombman

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 15. February 2010, 22:02 »
Danke vielmals ;)

 

Einloggen