Beiträge anzeigen

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.


Nachrichten - SHyx0rmZ

Seiten: 1 [2] 3 4
21
Lowlevel-Coding / Re:iret verursacht absturz?
« am: 06. January 2011, 02:18 »
So wie ich das sehe liegt das daran, dass du vergisst, vorher etwaige Errorcodes und Interruptnummern vom Stack zu nehmen. Dazu musst du vor dem iret den Stack erhöhen (wenn ich mich nicht ganz vertue um 8). Deine letzte Funktion funktioniert deswegen, weil Sie die Ausführung anhält.
22
Offtopic / Re:Hilfe gesucht
« am: 25. November 2010, 14:52 »
Vielleicht solltest du uns noch ein wenig über dein Vorhaben erzählen. Was soll dein Kernel z.B. können und in welchen Sprachen willst du ihn schreiben? Wenn du uns hier so ganz ohne Information lässt, sehe ich nicht viel Chance auf Beteiligung, da man sich da drunter dann alles/nichts vorstellen kann.
23
Offtopic / Re:Nerdleben oder doch lieber Partyleben?
« am: 27. October 2010, 19:47 »
Ich bin leider nicht so der Nerd, wie man meinen mag. Ich habe ein ausgeprägtes RL, bin im Schützenverein, habe eine Freundin und viele Freunde, gehe gerne und oft auf Partys etc.
Also so wie (fast) jeder hier.
Ich trau mich ja nur nicht, hier zu schreiben. :wink:
Du bist nicht allein :wink:
24
Lowlevel-Coding / Re:USB UHCI problem: IN tokens are ignored!
« am: 09. October 2010, 18:23 »
IMHO sollten wir auch Englisch akzeptieren. Wer kein Englisch kann hält dann halt einfach ma die Klappe.
25
Ja, im LM bestimmt z.B. Bit 7, ob das aktuelle Level das unterste ist (Nötig, da LM sowohl 1 GiB, 2 MiB und 4 KiB unterstützt).
26
Du meinst rekursives Mapping wie im PM? Ist im LM nicht möglich, da sich die einzelnen Level in ihren Attributen unterscheiden :(
27
Jo, die gibt es, sind aber a) nicht auf jeder CPU verfügbar und b) sehr wenige. Ich versuche jetzt mit dem letzten 4 KiB Block (0xFFFFFFFFFFFFF000) immer das zu bearbeitende Element zu mappen, allerdings scheint es da noch ein wenig Probleme zu geben. Zur Zeit sieht das so aus:

void PagingManager::Map(uintptr_t virtual_address, uintptr_t physical_address)
{
this->UpdateIndexes(virtual_address & 0x000FFFFFFFFFF000LL);

this->dynamic_page->SetAddress(page_map_level_4[pml4i].GetAddress());

PageMapLevel4Entry *pml4e = (PageMapLevel4Entry *)(0xFFFFFFFFFFFFF000LL + pml4i * sizeof(PageMapLevel4Entry));

if(pml4e->IsPresent() == false)
{
pml4e->Clear();
pml4e->SetAccess(PageAccess::UserWritable);
pml4e->SetAddress(memory.PAlloc());
pml4e->SetCachability(PageCachability::WriteThroughCachable);
pml4e->SetPresence(true);

}

this->dynamic_page->SetAddress(pml4e[pdpi].GetAddress());

PageDirectoryPointerEntry *pdpe = (PageDirectoryPointerEntry *)(0xFFFFFFFFFFFFF000LL + pdpi * sizeof(PageMapLevel4Entry));

if(pdpe->IsPresent() == false)
{
pdpe->Clear();
pdpe->SetAccess(PageAccess::UserWritable);
pdpe->SetAddress(memory.PAlloc());
pdpe->SetCachability(PageCachability::WriteThroughCachable);
pdpe->SetPresence(true);
}

this->dynamic_page->SetAddress(pdpe[pdi].GetAddress());

PageDirectoryEntry *pde = (PageDirectoryEntry *)(0xFFFFFFFFFFFFF000LL + pdi * sizeof(PageDirectoryEntry));

pde->Clear();
pde->SetAccess(PageAccess::UserWritable);
pde->SetAddress(physical_address);
pde->SetCachability(PageCachability::WriteThroughCachable);
pde->SetPresence(true);
}
28
Weil ich dann für jeden Task massig Speicher benötige, glaub ich. Ich müsste das trotzdem mal versuchen, sagt mir aber nicht so zu.
29
Mein Fehler, dies ist noch der Code, der sich einfach verabschiedet (#PF), wenn die Level fehlen. Mit Rekursion wäre es dann:

void PagingManager::Map(uintptr_t virtual_address, uintptr_t physical_address)
{
this->UpdateIndexes(virtual_address & 0x000FFFFFFFFFF000LL);

PageMapLevel4Entry *pml4e = (PageMapLevel4Entry *)(page_map_level_4[pml4i].GetAddress());

if(pml4e->IsPresent() == false)
{
pml4e->Clear();
pml4e->SetAccess(PageAccess::UserWritable);
pml4e->SetAddress(memory.PAlloc());
pml4e->SetCachability(PageCachability::WriteThroughCachable);
pml4e->SetPresence(true);

this->Map(pml4e->GetAddress(), pml4e->GetAddress());
}

PageDirectoryPointerEntry *pdpe = (PageDirectoryPointerEntry *)(pml4e[pdpi].GetAddress());

if(pdpe->IsPresent() == false)
{
pdpe->Clear();
pdpe->SetAccess(PageAccess::UserWritable);
pdpe->SetAddress(memory.PAlloc());
pdpe->SetCachability(PageCachability::WriteThroughCachable);
pdpe->SetPresence(true);

this->Map(pdpe->GetAddress(), pdpe->GetAddress());
}

PageDirectoryEntry *pde = (PageDirectoryEntry *)(pdpe[pdi].GetAddress());

if(pde->IsPresent() == false)
{
pde->Clear();
pde->SetAccess(PageAccess::UserWritable);
pde->SetAddress(memory.PAlloc());
pde->SetCachability(PageCachability::WriteThroughCachable);
pde->SetPresence(true);

this->Map(pde->GetAddress(), pde->GetAddress());
}

PageTableEntry *pte = (PageTableEntry *)(pde[pti].GetAddress());

pte->Clear();
pte->SetAccess(PageAccess::UserWritable);
pte->SetAddress(physical_address);
pte->SetCachability(PageCachability::WriteThroughCachable);
pte->SetPresence(true);
}
30
Das Wiki / Re: Hilfe bei Tutorialreihe "OS dev für Anfänger"
« 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!
31
Nun, ich hänge mal wieder beim Paging fest, das Problem ist folgendes:

Wenn eine neue Page gemappt werden soll, die dafür nötigen, höheren Level in der Pagingstruktur aber noch nicht vorhanden sind, werden diese zwar erstellt, müssen aber noch gemappt werden. Dies führt unweigerlich zu einer Rekursion und ich weiß einfach nicht, wie ich da raus komme.

void PagingManager::Map(uintptr_t virtual_address, uintptr_t physical_address)
{
this->UpdateIndexes(virtual_address & 0x000FFFFFFFFFF000LL);

PageMapLevel4Entry *pml4e = (PageMapLevel4Entry *)(page_map_level_4[pml4i].GetAddress());

if(pml4e->IsPresent() == false)
{
pml4e->Clear();
pml4e->SetAccess(PageAccess::UserWritable);
pml4e->SetAddress(memory.PAlloc());
pml4e->SetCachability(PageCachability::WriteThroughCachable);
pml4e->SetPresence(true);
}

PageDirectoryPointerEntry *pdpe = (PageDirectoryPointerEntry *)(pml4e[pdpi].GetAddress());

if(pdpe->IsPresent() == false)
{
pdpe->Clear();
pdpe->SetAccess(PageAccess::UserWritable);
pdpe->SetAddress(memory.PAlloc());
pdpe->SetCachability(PageCachability::WriteThroughCachable);
pdpe->SetPresence(true);
}

PageDirectoryEntry *pde = (PageDirectoryEntry *)(pdpe[pdi].GetAddress());

if(pde->IsPresent() == false)
{
pde->Clear();
pde->SetAccess(PageAccess::UserWritable);
pde->SetAddress(memory.PAlloc());
pde->SetCachability(PageCachability::WriteThroughCachable);
pde->SetPresence(true);
}

PageTableEntry *pte = (PageTableEntry *)(pde[pti].GetAddress());

pte->Clear();
pte->SetAccess(PageAccess::UserWritable);
pte->SetAddress(physical_address);
pte->SetCachability(PageCachability::WriteThroughCachable);
pte->SetPresence(true);
}
32
Lowlevel-Coding / Re: Module mit Grub laden und ausführen!
« am: 10. January 2010, 12:16 »
Du musst das Modul natürlich vorher an die richtige Adresse verschieben, da es sonst versucht auf Adressen zuzugreifen, in denen alles beliebige drinstehen könnte, nur die Daten des Moduls nicht und natürlich auch die Sprungadressen dann falsch sind.
33
Lowlevel-Coding / Re: Userspace
« am: 05. January 2010, 11:58 »
Im Interrupt Deskriptor steht drin, in welchem Code Segment der Interrupt ausgeführt wird. Beim Aufrufen der Interrupt Routine werden CS und EIP (und noch ein paar andere Register, ist aber im PM anders als im LM) gespeichert und beim iret wieder geladen, so, dass dann in das gleiche Code Segment zurückgesprungen wird, das vor dem Interrupt aktiv war.

PS: mox cs, ax ist eine verbotene Operation ;-)
34
Softwareentwicklung / Re: Welches Linux
« am: 23. December 2009, 12:52 »
Eigentlich müssten die bereits vorinstalliert sein, ansonsten müsstest du mal über Synaptic binutils und gcc installieren. Dann kannst du die Programme einfach im Terminal aufrufen.
35
tyndur / Re: 0.3 - Ideen und Ziele
« am: 20. December 2009, 22:46 »
Lass es mich so sagen: Jetzt schon. Compiled ohne Anstand, Zeit zum Testen finde ich wohl erst morgen ^^'
36
tyndur / Re: 0.3 - Ideen und Ziele
« am: 20. December 2009, 22:32 »
Ich wollte nur mal sagen, dass es bei mir mal wieder beim Compilen scheitert.

main.c:138: undefined reference to `__udivdi3'
main.c:139: undefined reference to `__udivdi3'
src/modules/lib/library.a(jprintf.o): In function `divmod':
src/modules/lib/stdlibc/jprintf.c:59: undefined reference to `__umoddi3'
src/modules/lib/stdlibc/jprintf.c:59: undefined reference to `__udivdi3'
37
Auf gut Deutsch: DerHartmuts Internet ist mal wieder kaputt ;-)
38
Lowlevel-Coding / Re: CPUID hilfe!!!
« am: 19. November 2009, 10:15 »
Das pushfd ist warscheinlich nicht zuviel, aber es fehlt ein popfd ganz am Ende.
39
Lowlevel-Coding / Re: CPUID hilfe!!!
« am: 19. November 2009, 08:50 »
Ui, stimmt. %% geht nicht, ebenso wie == bei Strings. Zudem willst du EAX, EBX, ECX und EDX wohl eher zu char* oder int machen. Und für cpuid_check_ret brauchst du auch keinen int, wenn eh nur ein char zurückgegeben wird ;-)
40
Lowlevel-Coding / Re: CPUID hilfe!!!
« am: 19. November 2009, 08:22 »
Könnte es sein, dass du die Ein- und Ausgabeparameter von asm() vertauscht hast? Anscheinend compilst du ja mit Intelsyntax, weiß nicht, ob das da anders ist ^^
Seiten: 1 [2] 3 4

Einloggen