Sourcecode Fortschritt
-
wird leider noch nicht richtig ausgelesen
Ist ja auch kein Wunder bei dem intransparenten Gewurschtel.
Design-Vorschlag:
Die nächste Einheit an Header+Data muss doch auch nicht das ganze Paket erhalten? Es reichen doch die Daten des betroffenen Protokolls, bei UDP also UDP-Header plus UDP-Data. Wir müssen die Pakete von außen nach innen zerlegen.
Jede receive-Funktion eines Protokolls sollte nur die Daten ab Header erhalten. Dann setzt man einfach die Header-Struktur auf "data". Sind Informationen von vorher erforderlich werden diese als Parameter dieser funktion übergeben. Dann besteht jedes "packet" eines Protokolls aus Header und nachfolgenden Daten. Das amcht den Code des jeweiligen Protokolls lesbarer. Momentan verheddert man sich komplett. Man weiß nicht mehr, auf welchen Punkt die jeweiligen Zeiger deuten. Das ist schlecht, also konsequenter Umbau und systematisches Abarbeiten in der Baumstruktur!ipTcpstack.h/c muesste eigentlich ethernet.h/c heißen
-
0.0.1.176 - Revision 755:
* Support für Serielle Schnittstelle.
Lesen: OK
Schreiben: Muss noch getestet werden...
-
Version 0.0.1.177:
- test-results.txt aktualisiert und umgebaut
- Code in tasking eingefügt, der später create_vm86_ThreadTaskBase ersetzen soll (funktioniert noch nicht)
- Code vereinfacht und Styleänderungen
-
0.0.1.178 - Rev: 757
UDP-Header wird nun korrekt ausgelesen, und ich konnte meinen Designvorschlag umsetzen.
screenshot:
RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 556 Flags: 01h 20h Length: 248 MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h Ethernet: type 2, Type: 08h 00h 45h 00h 00h E5h 9Ch 94h 00h 00h 1Eh 11h 68h C1h C0h A8h 0Ah 63h C0h A8h 0Ah FFh 00h 8Ah 00h 8Ah 00h D1h 02h B4h 11h 02h 9Ch 65h C0h A8h 0Ah 63h 00h 8Ah 00h BBh 00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h 41h 43h 41h Ethernet 2. IP version: 4, IP Header Length: 20 byte source port: 138 dest. port: 138 UDP Header information: +--------------+----------------+ | 138 | 138 | (source port, destination port) +-------------------------------+ | 209 | 02B4h | (length, checksum) +-------------------------------+ IPv4.
Wir übergeben nur den Part hinter dem IP-Header und die notwendigen Parameter.
UDPRecv( (void*)((uintptr_t)data + sizeof(ethernet_t) + ipHeaderLength), length - ipHeaderLength, *(uint32_t*)ip->source_ip, *(uint32_t*)ip->dest_ip, ipHeaderLength);
IP-Header Länge wird übrigens als Vielfaches von 32 bit angegeben, also nicht direkt verwenden:
uint32_t ipHeaderLength = 4 * ip->ipHeaderLength; // is given as number of 32 bit pieces (4 byte)
Problem: Die Pakete kommen auf PC verzögert an.
-
0.0.1.179 - Rev: 758
- tcpipstack.h/c umbenannt in ethernet.h/c
- Formatierungen von Namen (netzwerk) in CamelCase Form und nicht camel_case (begonnen)
-
0.0.1.180 - Rev: 759
Auf paging_get_phys_addr(virtual address) vereinfacht (wird immer kernel_pd verwendet)
-
Revision 0.0.1.181:
- Serial-Treiber gefixt und erweitert.
- task.c: create_vm86_ThreadTaskBase weggemacht
- task.c: kill und restart angelegt.
- task.c: Threads werden gekillt, wenn der Parenttask verschwindet
- Diverse Kleinigkeiten
-
version 0.0.1.182 - Rev: 761
ethernet.c/.h
- Weiter aufgeräumt und in die Protokoll header in spezifischen Dateien (ipv4.c/.h und arp.c/.h) umkopiert
-
0.0.1.183 - Rev: 762
Fehler #PF (qemu) durch HOTFIX in task.c behoben
-
Version 0.0.1.184:
- CPUID ausgelesen. VendorID wird korrekt angezeigt, restliche Funktionen _sollten_ auch funktionieren, sie sind schwer zu testen, auch wenn die Ergebnisse die ich kriege plausibel wirken. Die Möglichkeit, die CPUID in Bochs zu verstellen funktioniert leider nicht -> Vermutlich Bug in Bochs
- Verbesserung am serial-Treiber
-
0.0.1.185 - Rev: 764
- udp weiter ausgewertet (protokolle)
- ip/arp auswertung vereinfacht
- projektdateien
- sound abgeschaltet
-
Revision 765:
* Serial.c korrigiert
Senden und empfangen klappt jetzt einwandfrei, das einzige Problem ist sleepMilliSeconds(8); in ckernel.c, das isz zu lange um alle Nachichten zu erhalten, verkürzt man es aber, erhält man viele einzelne Nachichten...-.-
-
version 0.0.1.187 - Rev: 766
vbe.c
- setVideoMemory(...) Bild Darstellung in der Horizontalen in den verschiedenen Auflösungen angepasst. Die Vertikale ist noch um ca. 5 Pixel zu weit oben.
-
Version 0.0.1.188
- Bugfix in paging.c - VBox sollte jetzt auch mit VT-x laufen (Danke, Tobiking)
- Bugfix in console.c
- Bugfix in tasking.c
-
Dokumentation der Änderung in paging.c:
// Page table entries, identity mapping for (int j=0; j<1024; ++j) { kernel_pd->tables[i]->pages[j] = addr | MEM_PRESENT | MEM_WRITE; addr += PAGESIZE; }
Änderung: | MEM_WRITE
-
Version 0.0.1.189:
- vbe.c: Bugfix: Cursor kein Nullpointer mehr (garkein Pointer mehr)
- vbe.c: Bugfix: In drawChar funktionieren nun \n, \r und \t korrekt.
- Codevereinfachungen
-
Version 0.0.1.190 - Rev: 769
if(task->threads) { for(element_t* e = task->threads->head; e != 0; e = e->next) { //kill(e->data); /// HACK -> #PF on some systems } // list_DeleteAll(task->threads); } // list_Delete(tasks, task); scheduler_deleteTask(task);
die list_... wurden auskommentiert. #PF wurde bei list_DeleteAll festgestellt
-
Version 0.0.1.191:
- Tja... (mehr) Hack als Bugfix^^ Einige Dinge in task.h/c auskommentiert
-
Version 0.0.1.192 - Rev: 771
- bit9 OSFXSR in cr4 nicht gesetzt (für FXSAVE und FXSTORE, das wir nicht verwenden) hilft für K6-2
- FPU test eingebautuint32_t cr4; __asm__ volatile("mov %%cr4, %0;" : "=r" (cr4)); // cr4 |= 1<<9; // set OSFXSR (bit 9) // reload CR4, init FPU __asm__ volatile("mov %0, %%cr4; finit;" : : "r"(cr4)); fpu_setcw(0x37F); // set the FPU Control Word
static void fpu_test() { double squareroot = sqrt(2.0); squareroot = fabs(squareroot); squareroot /= sqrt(2.0); if (squareroot == 1.00) { textColor(0x0A); printf("\nFPU-test OK\n"); textColor(0x0F); } else { textColor(0x0C); printf("\nFPU-test ERROR\n"); textColor(0x0F); } }
OSFXSR
Operating System Support for FXSAVE and FXRSTOR instructions (bit 9 of CR4) — When set, this flag:
(1) indicates to software that the operating system supports the use of the FXSAVE and FXRSTOR instructions,
(2) enables the FXSAVE and FXRSTOR instructions to save and restore the contents of the XMM and MXCSR registers along with the contents of the x87 FPU and MMX registers, and
(3) enables the processor to execute SSE/SSE2/SSE3/SSSE3/SSE4 instructions, with the exception of the PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT.If this flag is clear, the FXSAVE and FXRSTOR instructions will save and restore the contents of the x87 FPU and MMX instructions, but they may not save and restore the contents of the XMM and MXCSR registers. Also, the processor will generate an invalid opcode exception (#UD) if it attempts to execute any SSE/SSE2/SSE3 instruction, with the exception of PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT.
The operating system or executive must explicitly set this flag.
NOTE
CPUID feature flags FXSR indicates availability of the FXSAVE/FXRSTOR instructions. The OSFXSR bit provides operating system software with a means of enabling FXSAVE/FXRSTOR to save/restore the contents of the X87 FPU, XMM and MXCSR registers. Consequently OSFXSR bit indicates that the operating system
provides context switch support for SSE/SSE2/SSE3/SSSE3/SSE4.
-
0.0.1.193 - Rev: 772
- fpu_test() nach fpu.c verlagert
Schutz bei fehlendem CPU-Feature FPU:
- if (cpu_supports(CF_FPU)) fpu_install(); // ckernel.c
- if (cpu_supports(CF_FPU)) fpu_test(); // ckernel.c