Autor Thema: Fragen zu: SDK Release Milestone 0  (Gelesen 27703 mal)

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 17. May 2005, 20:08 »
okay, die neuen sources funktionieren bei mir auch ohne probleme. (sowohl die vorkompilierten sachen als auch die selbstkompilierten)
@ ddr-ram: was ist denn der fehler?
Agieren statt Konsumieren!

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 17. May 2005, 20:13 »
Das es bei vielen funktioniert hat bezeichne ich mal als Zufall.

Wir haben eine Funktion InitBlueScreens, die verwendet new operator, dieser vewendet das globale CHeapMangager objekt.

Dieses wird aber erst nach dem aufruf von InitBlueScreens initialisiert.

deshalb schlägt der aufruf von new auf einigen PC's fehl.
Was genau erfüllt sein muss, damit es klappt, bzw. nicht klappt hab ich mir nicht weiter angeguckt. War aber also ein Fehler im Code.

MfG
DDR-RAM

sov21

  • Beiträge: 53
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 17. May 2005, 20:39 »
super,
habt den Fehler ja sehr schnell einkreisen und entdecken können.
Gibts einen Bescheid, wenn die neue Source verfügbar ist?
Gruß sov21

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 17. May 2005, 20:40 »
ja, schau am besten mal in der andere milestoneforum ;-) . 2 files und am ende die nachricht glaub ich.
Agieren statt Konsumieren!

T-Head

  • Beiträge: 157
    • Profil anzeigen
    • http://www.t-head.de.vu/
Gespeichert
« Antwort #24 am: 18. May 2005, 01:12 »
Hi,

nur mal son kleiner Bericht:

auf meinen beiden Rechnern gehts!

AMD Athlon64 3200+
Celeron 400 oder so! Is meinem Vathe seiner!  :wink:

Auf m AMD ging der Bootloader von Roshl nicht! Mit GRUB gehts jetz allerdinks perfekt!  :P

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 18. May 2005, 09:35 »
Hallo,

Zitat von: hannibal
ich hab mich mal versucht durch den schon vorhanden source-code durchzuwuehlen..(ich dachte immer ich koennte c++ ziemlich gut *hust!).. nur irgendwie hat mir das auch nicht viel gebracht..koenntet ihr mal irgendwie so ein kleines 'statement' abgeben zu den schon vorhandenen klassen:


// Descriptors

class CDescriptor;
class CSegmentDescriptor;
class CCodeSegmentDescriptor;
class CDataSegmentDescriptor;
class CTSSegmentDescriptor;
class CLDTSegmentDescriptor;
class CGateDescriptor;
class CCallGateDescriptor;
class CTaskGateDescriptor;
class CTrapGateDescriptor;
class CInterruptGateDescriptor;

template <int>
class CDescriptorTable;
class CLDT;
class CGDT;
class CIDT;

// Paging

class CPageTableEntry;
class CPageDirectory;
class CPageTable;

// Segments

class CTaskStateSegment;


waere vielleicht hilfreich..vor allem interessant waere fuer mich die CIDT-klasse...nur blick ich da nicht ganz durch, was da jetzt noch zu machen ist bzw was schon da ist.

lg, hannibal


Die CDescriptor-Klassen wrappen Deskriptoren in IDT, GDT und LDT(die wir allerdings nicht verwendent, die LDT).
Der Name verrät eigentlich schon sehr viel, welche Deskriptoren das sind.
Die Basisklasse CDescriptor bietet Funktionen, die für alle Deskriptoren verfügbar sind, z.B. GetPrivilege(), welches das im Deskriptor festgelegte Privileglevel zurückgibt.
Dann sind in der Klasse noch protected-Funktionen, diese stehen nur den Ableitungen zur Verfügung.
Das ganze spaltet sich dann in 2 Klassen, CSegmentDescriptor und CGateDescriptor. Ist eigentlich auch recht selbst erklärend. Auch diese Klassen stellen wieder Funktionen bereit, die für alle Ableitungen vorhanden sein sollen. Bei den Gatedeskriptoren ist noch zu beachten, das einige Ableitungen dann diese Funktionen doch nicht brauchen, z.B.
CTaskGateDescriptor braucht kein Offset, deshalb ist die Funktion als private deklariert, damit man nicht drauf zugreifen kann.

Die CDescriptorTable-Klassen, wrappen wie der Name schon sagt, verschiedene Deskriptortabellen, dieser gibt es 3,
die Interrupt Deskriptor Tabelle (IDT),
die Globale Deskriptor Tabelle (GDT),
die Lokale Deskriptor Tabelle (LDT)

CDescriptorTable ist als Template angelegt, mit einem Template-Parameter für die Größe der Tabelle.
IDT hat maximal 256 Einträge, GDT und LDT jeweils maximal 8192.
Auf die einzelnen Deskriptor zugreifen tut man über GetAt kann man auf einen Deskriptor an einer bestimmten position zugreifen.
IDT, GDT und LDT wrappen jetzt noch Deskriptortabellenspezifische Sachen.
z.B. CIDT::SetIDT, welches einen Parameter für die Anzahl der Einträge übernimmt. SetIDT selber, verwendet den asm-Befehl, lidt.
Ebenso GetIDT, du musst eigentlich keinen Pointer auf die IDT speichern.
CIDT::GetIDT() und du hast einen Zeiger auf die aktuelle IDT.

CPageDirectory wrappt ein PageDirectory, CPageTable wrappt eine Pagetable und CPageTableEntry wrappt PageDirectory sowie PageTable Einträge.

CTaskStateSegment wrappt letztendlich ein TaskStateSegment ;-)

Also beim nochmal drüberschauen, über x86.h fällt mir auf, das die Namensgebung teilweise recht grob ist, z.B. CGDT::SetGDT(WORD woSize), könnte einen Veranlassen, zu denken, das man die Größe der GDT in Bytes übergeben muss, es müssen aber nur die Anzahl der GDT-Einträge übergeben werden.

Für Beispiele, lohnt ein Blick in exception.cpp und paging.cpp

MfG
DDR-RAM

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #26 am: 18. May 2005, 09:50 »
das hilft mir schon ein bisschen weiter, danke!

(achja..waers vielleicht nicht von vorteil gleich ein wenig dokumentation in den src zu packen?)
\\o
o//
\o/

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #27 am: 18. May 2005, 10:14 »
Zitat von: hannibal
das hilft mir schon ein bisschen weiter, danke!

(achja..waers vielleicht nicht von vorteil gleich ein wenig dokumentation in den src zu packen?)


Ich überarbeitete gerade x86.h, mit bisschen mehr doku ;-)

MfG
DDR-RAM

sov21

  • Beiträge: 53
    • Profil anzeigen
Gespeichert
« Antwort #28 am: 19. May 2005, 18:03 »
Hab wieder mal Fragen:
* In welcher Datei wird den der Vesa-Mode initialisiert, bzw. aktiviert??
   (Hab schon alle Dateien durchsucht, aber nix gefunden :?: )

Gruß sov21

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #29 am: 19. May 2005, 18:09 »
soweit ich weiss aktiviert ja grub schon den vesa-modus (ich hab unter bochs ein auswahlmenu zwischen VESA und textmodus)

lg, hannibal
\\o
o//
\o/

sov21

  • Beiträge: 53
    • Profil anzeigen
Gespeichert
« Antwort #30 am: 19. May 2005, 18:15 »
Gut aber für was haben wir dann den VbeInfoBlock im Vesa-Header, der in den Kernel eingebunden wird?
Müssen also die Zugriffsroutinen für Vesa noch komplett implementiert werden?
Die Videoram-Befehle sind doch lediglich für den Non-Vesa-Modus zu gebrauchen oder?

Gruß sov21

T-Head

  • Beiträge: 157
    • Profil anzeigen
    • http://www.t-head.de.vu/
Gespeichert
« Antwort #31 am: 19. May 2005, 19:34 »
Hi,

ja! Sonst würdest du, wenn du mit Vesa-Modus lädst auch was sehen!

T0ast3r

  • Gast
Gespeichert
« Antwort #32 am: 19. May 2005, 20:14 »
Also ich hab da ein paar Fragen an mastermesh und DDR-RAM:

1.) Wofür ist die Datei SETPATH.BAT und wofür braucht man sie?
Wenn man es ausführt steht da nur "Kein Speicherplatz mehr im Umgebungsbereich".
Wenn ich es direkt in Autoexec.bat einfüg, verändert der Computer immer beim starten die Datei Autoexec.bat und lägt von der alten Version ein Backup an.
Hier ist der Inhalt von SETPATH.BAT:
@echo off
set PATH=.\bin\;.\bin\gnu;.\bin\vfd;.\bin\bochs;.\bin\nasm;.\bin\cygwin;.\bin\rawrite;%PATH%;
Zu @echo off: warum schaltet ihr die Kommandozeile aus?
Man soll doch sehen können, was er da tut.
Zu set PATH=.\bin.....: Warum steht da immer ein Punkt vor dem Pfad?
Werden die Pfade eventuell für make benötigt?

2.) Wofür ist die Verknüpfung SHELL da?
Hier der Verknüpfungsort: C:\WINDOWS\SYSTEM\cmd.exe /k call setpath && more .\doc\readme.windows && prompt $g$g$s
Bei mir exisitiert die Datei cmd.exe gar nicht, wehalb ich mich frage was die Verknüpfung macht.

3.) Öfters taucht in Pfadangeben wie zum Beispiel in der Datei "bochscr" der Ordner Temp auf.
Bei mir gibt's da gar keinen Ordner Temp, ich hab aber alles ordnungsgemäß heruntergeladen und extrahiert.

4.) Gibt's eine Anleitung oder so wie ich den Kernel compilieren kann, so dass ich die Datei Kernel.elf bekomme????
Wie bei sov21 wird die Datei "/system/kernel.elf" auf realer Disk nicht gefunden, wenn ich das immage fd0 auf die Diskette kopiere.
DDR-RAM hat geschrieben, man solle die Datei einfach nachkopieren, wobei nicht gestanden is von wo.
Soll man sie sich selbst zusammenstellen?
@mastermesh+DDR-RAM: Habt ihr beim zusammenstellen der Datei fd0.img vielleicht vergessen, ein(e) (paar) Dateien mit einzubeziehen?

5.) Im Ordner BIN befinden sich ja ein paar Ordner mit Compilier Zeugs und so.
Aber wenn ich da das Programm make im ordner gnu starte, gibt's haufenweise Fehlermeldngen das die Dateien nicht gefunden oder geöffnet werden können und so. Was kann ich da tun? Diese Frage bezieht sich auch eigentlich auf die 1. und 4. Frage, weil ich glaube, dass wenn SETPATH funktionieren würde auch make funktionieren würde.
Zudem wenn ich den Kernel mit make kopieren will, muss ich mir da álle Dateien in einen Extra Ordner hauen, in dem ich dann make starte?
Das äre sehr umständlich..... -> weil es wird ja auch makefile benützt, und dass befindet sich direkt in lost, und die Dateien in scr/kernel, welche ebenso wichtig sind...

6.) No support to WinME?
Wollt ihr denn gar nicht ehr WindowsME unterstützten?
Wenn ich den vfd (virtual disk irgendwas) starte, steht da nur das WindowsME nicht unterstützt wird..... *seufz*
schade *doppelt seufz*

7.) Wofür ist der Ordner cygwin da, und wofür seine 2 DLL Dateien?
Werden die im gnu Ordner von den kleinen Programmern benöigt?
Weil ich hab da mal ein paar Programme gestartet und dann ist gestanden, dass ihnen die DLLs fehlen, welche sich im Ordner cygwin befinden.
Dann hab ich sie nach gnu kopiert...... und wollllla ..... es hat geklappt.
Also nun die Frage: Warum wurden sie nicht gleich nach gnu kopiert???????

8.) Wie make maunzt das Programm Bochs, weil es Dateien nicht finden kann.
Eine Bsp Datei ist die Datei "bochscr", welche Infos dem Programm Bochs gibt.
Das Programm kann die Datei "bochscr" aber nicht finden, da es im lost verzeichnis ist und nicht im bochs Verzeichnis.
Ist da vielleicht auch mal wieder SETPATH schuld oder beteiligt, da der Pfad (so viel ich weiß) ja ort auch eingetragen wird?

9.) Warum haben die anderen den Ordner Temp und ich nicht?
In ein paar Pfadangaben steht ja auch irgendwas mit dem Ordner Temp, aber da ich ihn nicht hab, kann das ja nicht gut laufen.
Bochs gibt z. B. dauernd Meldungen aus, dass es Dateien im Ordner "tmp" nicht finden kann.
Hier ein Zitat aus der Datei "bochscr":
parport1: enabled=1, file="./tmp/debug/parport.txt"
Da steht eben z. B. eine Pfadangabe, die nach tmp verweist.

10.) Muss das SDK ZWINGEND in's Root Directory extrahiert werden, oder kann man alles auch in einen andern Ordner extrahieren?
Macht das also einen Unterschied?


Ich hab das SDK heute (Donnerstag, 19.Mai 05) am Vormittag heruntergeladen.
Ich glaub das da noch ein paar Bugs drinnen sind.
Im großen und ganzen finde ich dass ihr (mm+DDR-RAM) sehr gute Arbeit geleistet habt.
Ich bitte mir diese Fragen zu beantworten.

__________________________
T0ast3r@World
__________________________

@DDR-RAM: DDR2-RAM ist der Bessere! * :D *

sov21

  • Beiträge: 53
    • Profil anzeigen
Gespeichert
« Antwort #33 am: 19. May 2005, 20:34 »
Zitat
1.) Wofür ist die Datei SETPATH.BAT und wofür braucht man sie?

Also sofern ich das richtig sehe setzt sie die Umgebungsvars für den gcc, ld.
Zitat
Zu set PATH=.\bin.....: Warum steht da immer ein Punkt vor dem Pfad?

Der Punkt dürfte so viel heißen, wie nehme \bin... "aus dem aktuellen Ordner in dem du dich gerade befindest"
Zitat

2.) Wofür ist die Verknüpfung SHELL da?
Hier der Verknüpfungsort: C:\WINDOWS\SYSTEM\cmd.exe /k call setpath && more .\doc\readme.windows && prompt $g$g$s
Bei mir exisitiert die Datei cmd.exe gar nicht, wehalb ich mich frage was die Verknüpfung macht.

Diese Shell soll make aufrufen, die den source automatisch compiled, und in bochs ausführt.
Du hast cmd.exe nicht, weil das die shell von WinXp ist unter ME heißt das glaube ich command.com. Das ist auch dein prob warum nix geht.


Zitat
4.) Gibt's eine Anleitung oder so wie ich den Kernel compilieren kann, so dass ich die Datei Kernel.elf bekomme????

Nö weil normalerweise die SHELL das machen soll.

Zitat
5.) Im Ordner BIN befinden sich ja ein paar Ordner mit Compilier Zeugs und so.
Aber wenn ich da das Programm make im ordner gnu starte, gibt's haufenweise Fehlermeldngen das die Dateien nicht gefunden oder geöffnet werden können und so.

Kein wunder, du mußt parameter mit übergeben, und deine Pfade stimmen nicht, weil Setpath nicht ausgeführt wurde.

Gruß sov21

T0ast3r

  • Gast
Gespeichert
« Antwort #34 am: 20. May 2005, 08:46 »
Bei SETPATH steht da immer nur kein Speicherpplatz im Umb´gebungsbereich mehr.
Was kann ich da tun?
Soll ich sie in msconfig eintragen?

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #35 am: 20. May 2005, 09:30 »
Au weh... Windows ME  :?

Hast du nicht Zugriff auf ne Linuxkiste, an der du arbeiten könntest? Wär jetzt ein recht großer Aufwand, das ganze ME-tauglich zu machen (vor allem, weil ich kein ME hab).

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #36 am: 20. May 2005, 10:40 »
Also zum ersten, ich hab das SDK grade nicht hier in der Schule :)

Zitat von: T0ast3r
Also ich hab da ein paar Fragen an mastermesh und DDR-RAM:
Hoffe, ich darf mich auch dran versuchen. :)

Zitat von: T0ast3r
1.) Wofür ist die Datei SETPATH.BAT und wofür braucht man sie?
Wenn man es ausführt steht da nur "Kein Speicherplatz mehr im Umgebungsbereich".

Du benutzt Windows ME, der Umgebunsspeicher ist begrenzt.

In der Config.sys musst du den Speicherplatz erhöhen, etwa so
SHELL = C:\COMMAND.COM /E:4096 /P
Dann duerfte der Fehler verschwinden. Windows 2k/XP fordert neuen Speicher an, WinME kann das nicht [ist halt noch von DOS gestartet].


Zitat von: T0ast3r
Zu @echo off: warum schaltet ihr die Kommandozeile aus?
Damit man nicht den Schirm mit wertlosen Mitteilungen zugepostet bekommt. Man soll sehen, was die Programme tun, nicht dass der Pfad geändert wurde.

Zitat
Zu set PATH=.\bin.....: Warum steht da immer ein Punkt vor dem Pfad? Werden die Pfade eventuell für make benötigt?
Komme ich gleich zu, sie werden überhaupt benötigt.

Zitat von: T0ast3r
2.) Wofür ist die Verknüpfung SHELL da?
Hier der Verknüpfungsort: C:\WINDOWS\SYSTEM\cmd.exe /k call setpath && more .\doc\readme.windows && prompt $g$g$s

Unter Windows 95/98/ME existiert cmd.exe nicht, nimm stattdessen die C:\WINDOWS\COMMAND.COM. Ich weiss aber nicht, ob der Aufruf dann noch funktioniert.

Zitat
3.) Öfters taucht in Pfadangeben wie zum Beispiel in der Datei "bochscr" der Ordner Temp auf.
Bei mir gibt's da gar keinen Ordner Temp, ich hab aber alles ordnungsgemäß heruntergeladen und extrahiert.

Kann ich grad nicht beantworten. Hast du eigentlich eine Umgebungsvariable Temp gesetzt?
ECHO %TEMP%
ECHO %TMP

sollten das anzeigen. Wenn nicht, setze eine!

Zitat
4.) Gibt's eine Anleitung oder so wie ich den Kernel compilieren kann, so dass ich die Datei Kernel.elf bekomme????

Make und die anderen Tools muessten auch unter Win9x laufen (halt Cygwin), musst halt nur die Umgebung selbst basteln. Wenn du eine Eingabeaufforderung mit der passenden Umgebung aufrufst, duerfte es auch ordnungsgemäss funktionieren.

Zitat von: T0ast3r
5.) Im Ordner BIN befinden sich ja ein paar Ordner mit Compilier Zeugs und so.
Aber wenn ich da das Programm make im ordner gnu starte, gibt's haufenweise Fehlermeldngen das die Dateien nicht gefunden oder geöffnet werden können und so. [...]
Du musst die Umgebung einrichten, was normalerweise die Setpath.bat tun wuerde.

Zitat von: T0ast3r
6.) No support to WinME?

Nein, der Floppyemulator nicht. ME unterstuetzt keine Rawdevices (jedenfalls nicht ohne grossen Aufwand) und das Laufwerk B: kann somit nicht erzeugt werden. Theoretisch könnte man einen Treiber schreiben, aber hey - wer benutzt noch ME? :)
Du kannst aber das Image im Emulator booten und mit z.B. WinImage auch FAT12-Manipulationen machen.

Zitat von: T0ast3r
7.) Wofür ist der Ordner cygwin da, und wofür seine 2 DLL Dateien?

Cygwin hat nichts mit den GNU Tools zu tun und wurde darum getrennt.
Cygwin ist eine Art Linux-API-Emulator, also es werden gewisse API-Funktionen emuliert, damit Linuxprogramme ohne grossen Aufwand portiert werden können. Du musst halt deine Linuxprogramme neu kompilieren; schau mal nach www.cygwin.com.

Zitat von: T0ast3r
8.) Wie make maunzt das Programm Bochs, weil es Dateien nicht finden kann.
SETPATH.BAT ist der Uebeltäter und vllt auch der aktuelle (inkorrekte) Pfad. Von Hand reinwechseln sollte helfen.


Zitat von: T0ast3r
9.) Warum haben die anderen den Ordner Temp und ich nicht?
Kannst ihn ja erstellen :-)

Zitat
Hier ein Zitat aus der Datei "bochscr":
parport1: enabled=1, file="./tmp/debug/parport.txt"
Da steht eben z. B. eine Pfadangabe, die nach tmp verweist.

Das ist in diesem Falle sowas von egal...

Zitat von: T0ast3r
10.) Muss das SDK ZWINGEND in's Root Directory extrahiert werden, oder kann man alles auch in einen andern Ordner extrahieren?
Bei mir läuft es von C:\Documents and Settings\Sebastian\Skrivbord\lost-0\.

Zitat von: T0ast3r
Ich glaub das da noch ein paar Bugs drinnen sind.
Oder halt du etwas anderes gibst, als es erwartet.

Zitat von: T0ast3r
Ich bitte mir diese Fragen zu beantworten.
Ich weiss nicht, ob es hilft, aber ich habe es versucht.

Du musst eine korrekte Umgebung erzeugen, dann sollte alles (ausser dem Emulator) korrekt laufen. Es sind halt diverse Umgebungsvariablen, ein korrekter Ausgangspfad und korrekte Pfade erforderlich.

Svenska

sov21

  • Beiträge: 53
    • Profil anzeigen
Gespeichert
« Antwort #37 am: 20. May 2005, 14:18 »
Hab auch doch noch mal eine Frage, weil das beim letzten mal nicht so ganz bei mir ankam:

Also der Grub schalten in den Vesa Mode, und startet  erst dann den Kernel?
Und wie ist das mit der Textausgabe des Kernels? Wird die wenn er im Vesa ist einfach ignoriert? Oder im Hintergrund gezeichnet und man sieht sie nur nicht??
Wie ist das?
Gruß sov21

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #38 am: 20. May 2005, 14:20 »
Der Kernel überprüft zur Zeit noch nicht, ob VESA eingeschaltet ist, deshalb wird auch bei eingeschaltetem VESA in den Video-(Text)-RAM geschrieben.

sov21

  • Beiträge: 53
    • Profil anzeigen
Gespeichert
« Antwort #39 am: 20. May 2005, 15:36 »
Woher weiß ich denn in welcher Adresse Grub den VbeModeInfoBlock abgelegt hat??
bzw. wie komme ich an diesen heran??
Gruß sov21

 

Einloggen