1
Lowlevel-Coding / Re: Einen PC neustarten
« am: 24. February 2010, 20:08 »
Man kann einen Neustart auch mit einem provozierten Tripe Fault erzwingen.
23. November 2024, 11:29
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
[...] und in deinem Fall DS =0316 f053f000 0000ff53 f000ff53, was irgendwie anders als die anderen Segmentregister und irgendwie kaputt aussieht. Das 0316 ist der Wert des Registers (vergleiche mit EAX, wo es herkommt), dahinter kommen Basis, Limit und irgendwas. Flags und so. [...]Nein, das 0x10 ist dein datendeskriptor in der GDT.
Meinst du damit die, die du als Grundaufgaben deklariert hast oder was für Funktionen?Ja. Hier wird z.B. die IDT, die GDT initialisiert, hier werden die Treiber geladen (oder auch nur der Init-Prozess),...
Inwiefern müssen sich treiber registrieren? Sie fangen doch lediglich interrupts auf und weisen den kernel darauf hin. oder wie, oder was?Naja ich habe es so gemeint: Mit der HW kommuniziert man über die Ports. Die sollten aber nicht für jedes Programm frei zugänglich sein, sondern nur für Treiber. Und ein Treiber braucht auch nicht Zugriff auf jeden Port. Beispiel:
ReservePort(0x34);
// Dann kann er darauf zugreifen
data = ReadPort(0x34); // heißt üblicherweise InB();
WritePort(0x34, data); // heißt üblicherweise OutB();
Der Kernel kann so dafür sorgen dass immer nur ein Treiber auf einen Port zugreift und dass nicht jedes Programm auf alles Zugreifen kann. selbst für die ausgabe eines einfachen Strings, von mir aus lademessage brauch ich nen grafik-Treiber? Na holla. Also ich habs bisher zwar immer im kernel gelassen, aber kann mir schon vorstellen das sich das besser anbietet über nen treiber zu machen.Kommunikation: IPC, wie oben beschrieben. Dateiformat: Egal, wie du willst. Drinnen muss sein was der Treiber halt mahct, also meistens verschiedene Funktionen.
Aber da tuen sich bei mir schon wieder ein schwall von fragen auf. in welchem dateiformat muss ich treiber abspeichern.? wie lad ich sie? was muss drin stehen? wie funzt die kommunikation zwischen kernel und treiber? (Jetzt auf alles ne antwort zu verlangen wäre ein wenig dreist, aber das sind fragen die mir dann kommen.
Der Kernel hat nach meinem Verständnis die Aufgabe:Ich würde das eher in den Bootloader geben. Denn solltest du deinen Kernel einmal Multiboot-fähig machen (um z.B. Grub zu verwenden ) dann wird im Bootloader schon in den PM geschalten.
a. in den PM zu schalten (ja. Stichwort Grub. aber nein.)
b. GDT, IDT zu erstellen und zu ladenDas ist die Startroutine des Kernels. Hier werden die Kernelfunktionen initialisiert.
c. Treiber zu laden (in meinem Fall lediglich für die Tastatur)
d. Tasks zu verwalten (hab noch keine ahnung wie das geht, aber tutorial ist schon gefunden)Und da wären wir schon bei den (meiner Meinung nach) Grundaufgaben eines Kernels:
e. printk()Das gehört nicht in den Kernel. Die direkte Grafikausgabe gehört in einen Grafik-Treiber.
f. Fehlerroutinen bereitstellen auf die die diskriptoren Zeigen (ich hoffe das ich das nun richtig kapiert habe)Du meinst exceptions? Ja, das gehört auf jeden Fall auch in den Kernel.
g. mein programm shell laden und damit den Benutzer mit einbinden.Am Anfang muss der Kenel natürlich ein Programm laden. Ob das jetzt direkt die Shell ist oder ein Init-Prozess der vl. noch weitere aufgaben hat ist denke ich Design-Sache. Auf jeden Fall soll die Shell nur durch IPC mit dem Tastatur- und Grafiktreiber kommunizieren, also nicht direkt auf die HW zugreiffen. (darf sie, wenn alles richtig geht auch nicht)
gcc: CreateProcess: No such file or directoryWenn ich ihn direkt aufrufe funktioniert er einwandfrei. Weiß jemand was da los ist / los sein könnte?