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 - Martin Erhardt

Seiten: 1 [2] 3 4 ... 9
21
gdb ist grundsätzlich ein nützliches Werkzeug, aber für diesen Fall eher nicht. Wo würdest du denn Breakpoints setzen wollen? Einfach abstürzen lassen und den CPU-Dump bei der Exception anschauen ist in so einem Fall viel leichter.
stimmt aber immer wenn ich sehe, dass was iwo nicht geht ärger ich mich das ichs immer noch nich hab :(
22
Gdb is auch ne coole Sache, ist im Englischen Forum weiter verbreitet(habs auch noch nicht umgesetzt steht aber weit obenauf meiner Todo Liste)http://wiki.osdev.org/GDB du fügst so eine Datei gdb_stub.c erstellen und damit in deinem Code sog Breakpoints setzen dann kannst du hie und da sog. Breakpoints setzen und die Datei mit gdb blablabla-kernel.elf debuggen und iwie die Breakpoints durchgehen und mit examine und info Registerinhalte und Memorystellen zu diesem Zeitpunkt ausmachen ich glaub man kann man kann sich auch Stack Backtraces ausliefern lassen.

Wie gesagt ich habs selbst nicht ausprobiert  :oops: aber es muss total cool sein.

Man brauch aber serielle Konsole.
23
OS-Design / PagingFlags
« am: 18. February 2013, 20:09 »
Wenn Ich frischen Kernel Speicher mappe, dann nutze ich in Pgdirentr von Anfang an folgende Flags
FLG_IN_MEM | FLG_WRITECACHING | FLG_USED | FLG_WRITABLE
in pgtblentr
FLG_IN_MEM | FLG_WRITECACHING | FLG_USED | FLG_WRITABLE | FLG_WRITTEN
Man kann ja nicht feststellen wann bspw im Usermode auf eine Page zugegriffen wird, dh. behaupte ich von Anfang an sie sei Benutzt und beschrieben; damit die MMU da nicht noch nach einem nicht nachweißbaren Zugriff iwas optimiert.

Hat dieses flagset iwelche "Nebenwirkungen"?
24
Lowlevel-Coding / Re: Taskswitch
« am: 16. February 2013, 15:40 »
Ich hab meinen Code jetzt mal geändert so sieht er jetzt aus:
void CreateTask(void* start_addr){
__asm__ __volatile__ ("cli");
struct cpu_state* task_state = pmm_malloc();
task_state->eax = 0;
task_state->ebx = 0;
task_state->ecx = 0;
task_state->edx = 0;
task_state->esi = 0;
task_state->edi = 0;
task_state->ebp = 0;
task_state->eip = (unsigned int) start_addr;
task_state->cs  = 0x08;
task_state->eflags = 0x202;

Tasks[task_number+1].status = 1;
Tasks[task_number+1].stack = (unsigned int) task_state;
Tasks[task_number+1].PID = task_number+1;

task_number++;
__asm__ __volatile__ ("sti");
}
Das hat aber leider nichts geändert.
Nö aber es ist ne schönere Lösung(finde ich zumindest :))

Ich zumindest kann jezt nichts wirklich finden vllt wird nach dem interrupt der cpu Zustand nicht richtig hergestellt mit pop %eax
pop %ebx
pop ...
oder wie auch immer das in Intel Syntax aussieht. oder deine Tasks wollen iwann returnen aber das geht nicht so wie das bei mir mal war: http://forum.lowlevel.eu/index.php?topic=3153.msg36532#msg36532
25
Lowlevel-Coding / Re: Taskswitch
« am: 16. February 2013, 14:16 »
Ich versteh den Code aber immer noch nicht nach dem Aufruf von multitasking_scheduler verschiebst du den aktuellen wert von esp nach eax und die addresse die die Funktion zurückgegeben hat geht verloren. vllt wolltest du mov eax esp
26
Lowlevel-Coding / Re: Taskswitch
« am: 16. February 2013, 14:09 »
sry die Stelle mit *stack-- ist schon richtig ich (Noob!) hab nicht gewusst das bei -- nicht nur ein dekrementierter wert zurückgegeben wird sondern auch dem Operand ein dekrementierter Wert zugewiesen wird. und weil stack vom typ uint ist stimmt auch die Pointerarithmetik.
27
Lowlevel-Coding / Re: Taskswitch
« am: 16. February 2013, 13:50 »
Ich hab mich bei meinem Code sehr stark an dieses Tutorial gehalten. Was kann es denn für Probleme geben, die auftreten, wenn ich Interrupts verbiete? Ich habe es beim Debuggen überprüft, beim stack wird nicht immer an dieselbe Adresse geschrieben. Ich werd's aber trotzdem umschreiben. Woran kann's denn noch liegen?
Eig gar keine ^^ soviel ich weiß, ich wollte nur wissen wieso du das machst.
28
Lowlevel-Coding / Re: Taskswitch
« am: 16. February 2013, 13:33 »
CreateTask kommt mir zunächst komisch vor.
"*(void*)((unsigned int)(stack)--)"ist eigentlich(,falls das gleich "*stack--" ist), immer die address vom stack minus ein byte.
dh du schreibst immer an die gleiche stelle  0x0.
Wieso verwendest du dazu keine schöne Struktur, dann müsste man sich hier gar nicht mit pointerarithmetik auseinandersetzen
Und wieso verbietest du während deserstellen des Tasks Interrupts
void CreateTask(void* start_addr){
   unsigned int* stack;
   __asm__ __volatile__ ("cli");
   stack = (void*)(pmm_malloc()+1024);
   *stack-- = 0x202;
   *stack-- = 0x8;
   *stack-- = (unsigned int)start_addr;
   
   *stack-- = 0x0;
   *stack-- = 0x0;
   *stack-- = 0x0;
   *stack-- = 0x0;
   *stack-- = 0x0;
   *stack-- = 0x0;
   *stack-- = 0x0;
   *stack-- = 0x0;
   
   *stack-- = 0x10;
   *stack-- = 0x10;
   *stack-- = 0x10;
   *stack-- = 0x10;
   
   Tasks[task_number+1].status = 1;
   Tasks[task_number+1].stack = (unsigned int) stack;
   Tasks[task_number+1].PID = task_number+1;
   
   task_number++;
   __asm__ __volatile__ ("sti");
}
Wieso legst du eigtl einen leeren Cpu status auf den Userstack?
29
Softwareentwicklung / Re: Library und Programme
« am: 16. February 2013, 01:32 »
Wenn du noch absolute pfade findest dann solltest du die wie besagt durch relative ersetzen, weil man bei langen normalen gern mal was vergisst  :-)
30
Lowlevel-Coding / Re: Was genau ist ein Sprung?
« am: 15. February 2013, 17:02 »
dann gibt es noch bedingte Sprünge, d.h. der Prozessor wird nur springen, wenn bestimmte Flags gesetzt sind o.Ä.
z.b JLE und JL Für mehr Infos hierzu siehe :
http://www.lowlevel.eu/wiki/Teil_2_-_Assembler_101 Absatz "Vergleiche und Sprünge"
31
Lowlevel-Coding / Re: VESA Bios Extensions
« am: 09. February 2013, 18:36 »
0xA ist aber Interrupt 11 wir wollen Interrupt 16 bzw 0x10 steht jedenfalls im Wiki ... .
Verwende lieber Assembler für VM86 du machst sowieso alles in ASM oder inline ASM und sonst KANNST du gar nichts anderes machen mit C in VM86 weil gcc sich auf den 32bit Registersatz verlässt und daher an dieser stelle invalid opcode erzeugt. Du müsstest dieses zeug in ein Bootmodul auslagern das du mit bcc kompilierst und das ist es definitiv nicht wert.

Ich hoffe ich konnte zur Abwechslung mal wirklich helfen.
32
Lowlevel-Coding / Re: VESA Bios Extensions
« am: 09. February 2013, 18:28 »
C ist schön aber bei den VBEs wird im Realmode die Funktionsnummer in AX verschoben und über SW Interrupt 0x10 das BIOS aufgerufen das geht nu ma so ganz explizit  nur in ASM.  In C kann man ohne inline ASM oder Intrinsics (im Userland) keine interrupts auslösen und zeug nach AX verschieben sprich: es läuft auf das gleiche raus.
33
Lowlevel-Coding / Re: VESA Bios Extensions
« am: 09. February 2013, 18:11 »
Konkret bei den VBEs
/*
 * BLABLA BLa werte in dx di usw. verschieben
*/
mov funktionsnummer, %%ax
int 0x10
34
Lowlevel-Coding / Re: VESA Bios Extensions
« am: 09. February 2013, 17:31 »
Was ist denn bitte AX?
Die letzten 16 bit von EAX
Ich habs auch schon vergessen :oops: :
http://forum.lowlevel.eu/index.php?topic=3166.msg36761#msg36761
35
OS-Design / Higher Half Kernel wegen invalid Pointers
« am: 06. February 2013, 20:45 »
Ich bin gerade beim Paging und frage mich Higher-half oder Lower-half.

In OSDEV schreiben sie:
Zitat
.
-It's easier to set up VM86 processes since the region below 1MB is userspace.
-More generically, user applications are not dependent on how much memory is kernel space (Your application can be linked to 0x400000 regardless of whether kernel is at 0xC0000000, 0x80000000 or 0xE0000000 ...), which makes ABI's nicer.
-If your OS is 64-bits, then 32-bit applications will be able to use the full 32-bit address space.
-'mnemonic' invalid pointers such as 0xCAFEBABE, 0xDEADBEEF, 0xDEADC0DE, etc. can be used.
gut falls ich für meine zukünftige 64 Bit OS Portierung mal 32bit oder 64bit Userspace Programme schreiben will werde ich diese Vorteile sicher vermissen ;) und wenn man für den Kernel z.B Fix 256MB einplant ohne das zu verändern, dann sollte des auch gehen.

Aber was soll der letzte Grund bedeuten(Wieso sind CAFEBABE DEADBEEF) "invalid pointers" und wieso kann man die bei einem Higher Half Kernel doch verwenden??
36
Offtopic / NEON
« am: 03. February 2013, 16:26 »
Ist NEON eigentlich sowas wie SSE für ARM? -Ja schon hat sich erledigt
Des Raspberry Pi hat sowas also noch nich aber da gibz sone FPU.
37
Lowlevel-Coding / Re: Filesysteme
« am: 02. February 2013, 22:13 »
Statt PCI und AHCI kannst du auch mit Disketten und IDE anfangen. Das sind ältere und einfachere Schnittstellen, für die du weniger funktionierende Infrastruktur brauchst. Außerdem kannst du eine SATA-Festplatte am PCI-AHCI-Controller im Kompatiblitätsmodus auch als ISA-IDE-Festplatte ansprechen. Dafür reichen wirklich inb/outb auf bestimmte Ports, wenn du auf DMA verzichtest (was bei AHCI m.W. notwendig ist).

Gruß,
Svenska
Ja aber mit DMA ist das halt performanter und zumindest ich will nicht zwo Festplattentreiber schreiben
39
Lowlevel-Coding / Re: VESA Bios Extensions
« am: 02. February 2013, 21:22 »
Grundsätzlich, kümmer dich erst um die Grundlagen - Grafik ist nen Kapitel für sich, da will man sich nicht parallel mit irgendwas anderem rumplagen.
Hast du meene Roadmap gesehen?;)

@KtmnjjpfjsFvzG bist du so unhöflich oder siehst du meine PMs vllt gar nicht^^?
http://forum.lowlevel.eu/index.php?action=pm
40
Lowlevel-Coding / Re: VESA Bios Extensions
« am: 02. February 2013, 20:18 »
Wobei man den LBF doch auch von GRUB 2 laden lassen kann? Wo steht wie das geht?
Seiten: 1 [2] 3 4 ... 9

Einloggen