Sourcecode Fortschritt
-
Version 0.0.1.143 - Rev: 716
HOTFIX: in task.c , zeile 305: den reboot verhindert
if(currentTask == kernelTask) // TODO: Handle termination of shellTask { // systemControl(REBOOT); }
Wenn ich das richtig sehe, sind die plötzlichen "reboots" weg, allerdings tauchen dennoch #GPF auf.
Da kann zwar der pid 0 (also kernel task) "verschwinden" (siehe strg+t), aber dennoch läuft es stabiler. Seit Version 0.0.1.131 (MrX) spielen da einige Sachen leider "verrückt".
Fazit: hat nicht geholfen, es müssen die cli/sti sein, die MrX "aufgeräumt" hat.
-
0.0.1.144 - Rev: 717
in task.c cli()/sti() wieder eingefügt, um den reboot zu überwinden!
EDIT: #GPF (kernel) und #PF (user) tauchen immer noch auf. Richtig übel! Ich schlage einen Roll-back bei task.h/c (und damit zusammenhängende) vor.
Ich schlage vor, dass wir ein abgestimmtes Test-Szenario entwicklen und für jeden developer vorgeben, das ein Commit im Regelfall durchlaufen muss, um solche Folgen wie bei 0.0.1.131 zu verhindern.
-
0.0.1.145 - Rev: 718
cli/sti noch etwas nachgebessert in task.c
erneuter #GPF: error code: 0 (!), anschließend reboot
es tauchen aber auch andere #GPF auf: GPF err code: 64912 eip: 113D50h
(intel (june 2010) 3A, 6-13: EXT=0 IDT=1 segment selelctor index: 00100010 = 0x22 = 34)sieht immer noch nicht gut aus!
-
Nun reicht es wirklich!
Roll-back bezüglich task.h/c (Version von 0.0.1.130 - Rev. 701 eingebaut, weitere Anpassungen waren glücklicherweise nicht notwendig)
0.0.1.146 - Rev: 719
qemu läuft.
VBox und VMware machen Probleme mit vbe (also 's'), VBox auch beim Überspringen von vbe noch GPF. Das konnten wir schon besser!
-
version 0.0.1.147 - Rev: 720
vbe.c/.h
typedef struct { uint16_t x, y; } CursorPosition_t;
Hinzugefügt und mit DrawChar(...) newline experimentiert.
erstmal bewusst nicht aus video.h genommen um erstmal eine strikte trennen zwischen Textmodus und VESA zu halten.
-
Version 0.0.1.148:
- Schäden behoben, cli/sti-Änderungen aus task.c wieder ausgebaut, andere Änderungen eingebaut. Funktioniert wohl nun wieder alles.
- Patch für VM86.c von Ideenlos
- Codeformatierungen
-
Revision 722
Bootloader-stage2
- So verändert (arbeitet jetzt im UnrealMode), dass der Kernel theoretisch beliebig groß werden kann.
-
version 0.0.1.150 - Rev: 723
Ordner Struktur in Kernel um network und netprotocol erweitert, entsprechende Dateien dorthin verschoben.
-
version 0.0.1.150 - Rev: 724
udp.c/.h
- UDP Header Hinzugefügt.
-
Version 0.0.1.151 - Rev. 726
Senden verbessert (length)
Testen: wireshark
-
Version 0.0.1.152 - Rev. 727
Senden verbessert (korrekte mac-adresse verwendet)
Testen: anpingen und mit arp -a im arp-cache des senders nachschauen
Verfolgen: wireshark
-
Version 0.0.1.153 - Rev. 730 (einige rev. bewusst übersprungen wegen commit-fehler)
Nun klappt die antwort auf arp-requests spezifisch und korrekt!
Bitte stellt eure spezifische IP-Adresse statisch in dem neuen Header myOwnData.h ein, bei mir z.B:
#ifndef MYOWNDATA_H #define MYOWNDATA_H #define My_IP 0xC0A80A61 // 192.168.10.97 #endif
-
version 0.0.1.154 - Rev: 731
dhcp.c/.h
- Grundlegende Idee hinzugefügt.upd.c/.h
- erweitert
-
checksum für ipv4, also auch ping:
// Compute Internet Checksum for "count" bytes beginning at location "addr". uint32_t checksumIPv4(uint32_t count, uintptr_t addr) { register uint32_t sum = 0; while( count > 1 ) // This is the inner loop { sum += *(uint16_t)addr++; count -= 2; } if (count > 0) // Add left-over byte, if any { sum += *(uint8_t*)addr; } while (sum>>16) // Fold 32-bit sum to 16 bits { sum = (sum & 0xFFFF) + (sum >> 16); } return (~sum); }
-
version 0.0.1.155 - Rev: 732
icmp.c/.h
- hinzugefügtInformationen zum ICMP-Protokoll
http://tools.ietf.org/html/rfc1071 <--- internet checksum
http://de.wikipedia.org/wiki/Internet_Control_Message_Protocol <--- icmp Protocol
-
Version 0.0.1.156:
- task.c: cli/sti-Änderungen gesichtet, Fehler behoben und wieder reingenommen
- Aufgeräumt
- Projektfile aktualisiert
-
version 0.0.1.157 - Rev: 734
icmp.c/.h
- ICMPAnswerPing(...), mit Statischen werten hinzugefügt und experimentiert, bisher ohne Erfolg.
-
version 0.0.1.157 - Rev: 735
icmp.c/.h
- ICMPAnswerPing(...), erweitert und getestet. Noch kein Erfolg.
-
Version 0.0.1.158:
- Umstellung der IRQ/ISR-Nummern auf enum begonnen
- Scheduler unterstützt nun waitForIRQ - Wait-Funktionen damit vorerst komplett
- getch auf waitForIRQ umgestellt - Genauso Ressourcensparend, aber performanter (kein hlt das andere tasks ausbremst)
- switch_context führt abhängig von der Anzahl der laufenden tasks hlt aus
-
Version 0.0.1.158 ist fehlerhaft (memory leak), und icmp.c/.h noch ziemlich unbrauchbar.
http://codepad.org/0YDxC2n1 <-- Workaround von MrX