Sourcecode Fortschritt
-
Version 0.0.1.166:
- Floppytreiber nutzt nun hlt während er auf ein IRQ wartet. (waitForIRQ geht nicht, weil wir dort ein timeout haben)
- getch nutzt wieder waitForIRQ, Fehler behoben, keine task-Mutation mehr, Speicherleck weg.
- Neues Feature zur Memory-Leak-Erkennung. (Aktivierung in os.h, Funktioniert derzeit nicht stabil)
- Projektdatei aktualisiert
- Kleinigkeiten
-
PrettyOS 0.0.1.166 - Rev: 744
Testumgebung SCREEN (phys) vbe RTL8139 EHCI Probleme ----------------------------------------------------------------------------- qemu-ehci F2000000h ok ja 4 ports nein VBox 3.2.6 E0000000h ok nein 8 ports nein VMWare Player 3.0.1 (mit vbe) invalid opcode bei 1A70h VMWare Player 3.0.1 (ohne vbe) - nein 6 ports keine bochs 2.4.2 E0000000h ok nein nein keine VPC 6.0.192.0 00000000h #PF (err 0, addr 107BC4h) VPC 6.0.192.0 (ohne vbe) - nein nein keine PC 1,4 GHz GeForce4 F4000000h ok ja nein keine
-
0.0.1.167 - Rev. 745:
- Gratuitous ARP Request abgefragt und dargestellt
http://wiki.wireshark.org/Gratuitous_ARP
A gratuitous ARP request is an AddressResolutionProtocol request packet where the source and destination IP are both set to the IP of the machine issuing the packet and the destination MAC is the broadcast address ff:ff:ff:ff:ff:ff.
-
Version 0.0.1.168:
- Ausgabe bei Strg+t und co nun in kernelkonsole
- test-results.txt beigelegt
- Kleinigkeiten
-
version 0.0.1.168 - Rev: 747
- Aufgeräumt
- Die #defines in icmp.h um ICMP_ erweitert.Keyboard.c
- Die getch() Funktion sieht im moment so aus.char getch() { char retVal = keyboard_getChar(); while(retVal == 0) { waitForIRQ(1); // not working on realPC ---> Broken Free // sti();hlt(); retVal = keyboard_getChar(); } return(retVal); }
Link zur Darstellung des OSI-7-Modells
http://upload.wikimedia.org/wikipedia/de/1/14/OSI7Layer_model_3.1.svg
-
0.0.1.169 - Rev: 748
Readcache (rev. 580) in devicemanager.c auskommentiert und auf die alte Version (rev. 579) umgestellt.
Reale Lesevorgänge können nun übergangsweise quälend langsam vonstatten gehen, da wir dank fgetc jedes Zeichen einzeln ziehen und dabei jeweils den ganzen Sektor lesen.
Der Schreibcache ist bereits im FAT-Modul eingebaut.
Dafür klappt nun wieder der für Dokumentationen wichtige Screenshot (floppy: strg+s, usb: strg+u).
-
0.0.1.170 - Rev: 749
readcache teilweise (wieder) in betrieb genommen, aber noch nicht genutzt wegen fehler beim schreiben
-
0.0.1.171:
- Optimierungen und Änderungen, die ehenkes und ich ausgebrütet haben (hauptsächlich task.c)
- Readcache aufgeräumt, aber Ergebnis unverändert.
- Weitere Testergebnisse ergänzt
-
0.0.1.172 - Rev: 751
Lesecache aktiviert, für screenshot ausgeschaltet
-
0.0.1.173 - Rev: 752
readcache weiter optimiert, auch bei mehrfacher Abfrage des Puffers werden die 512 Byte zur Sicherheit kopiert (Korrektheit wichtiger als Performance). Beim Anlegen des Cache eines Sektors werden alle validen Dubletten eliminiert (Korrektheit).
-
version 0.0.1.174 - Rev: 753
VBE erweitert, man kann jetzt zwischen 3 Auflösungen wählen
1. 640x480x256 (Bild verschoben)
2. 800x600x256 (Bild verschoben)
3. 1024x768x256 (wird fast korrekt angezeigt)
default: 1024x768x256ckernel.c
- Switch Konstrukt für den gewählten VideoMode hinzugefügt.vbe.c/.h
- switchToVideomode(...) um einen übergabe parameter erweitert, für den zu setzenden VideoMode.vidswitch.asm
- video_mode und ModeInfoBlock, für die 3 jeweiligen oben genannten Bildschirm Auflösungen hinzugefügt.
-
strg+s und fdir geht wieder ganz brauchbar:
PrettyOS [Version 0.0.1.174 - Rev: 753] -------------------------------------------------------------------------------- RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 236 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 8Dh D7h 00h 00h 1Eh 11h 77h 7Ah C0h A8h 0Ah 67h C0h A8h 0Ah FFh 00h 8Ah 00h 8Ah 00h D1h 11h 65h 11h 02h 8Dh ACh C0h A8h 0Ah 67h 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. RAMdisk ---------------------------------------------------------------------- Attached disks: Type Number Name Part. Serial ---------------------------------------------------------------------- Floppy 1 BLABLA 0 BLABLA RAMdisk 2 RAMdisk 0 786435 ---------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 488 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 8Dh D8h 00h 00h 1Eh 11h 77h 79h C0h A8h 0Ah 67h C0h A8h 0Ah FFh 00h 8Ah 00h 8Ah 00h D1h 11h 64h 11h 02h 8Dh ADh C0h A8h 0Ah 67h 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. $> hi <-- I am PrettyOS. Always at your service! Screenshot (Thread) $> -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Saturday, August 14, 2010, 13:28:53 201 s runtime. CPU: 1399 MHz - PrettyOS [Version 0.0.1.174 - Rev: 753] -------------------------------------------------------------------------------- running tasks: pid: 0 esp: 0018FF00h eip: 00000000h PD: 00A22000h k_stack: 00000000h pid: 9 esp: C0204B40h eip: 0011450Eh PD: 00A22000h k_stack: C0204E08h blocked tasks: pid: 8 esp: C0209E88h eip: 0011450Eh PD: C0207000h k_stack: C020A008h -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 992 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 8Dh DAh 00h 00h 1Eh 11h 77h 77h C0h A8h 0Ah 67h C0h A8h 0Ah FFh 00h 8Ah 00h 8Ah 00h D1h 11h 62h 11h 02h 8Dh AFh C0h A8h 0Ah 67h 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. $> fdir <-- <Floppy Disc Directory> BLABLA 0 byte (vol) 1st sector: 31 BOOT2.BIN 1002 byte (arc) 1st sector: 33 KERNEL.BIN 223884 byte (arc) 1st sector: 35 HELLO.ELF 9344 byte (arc) 1st sector: 473 CPP.ELF 9252 byte (arc) 1st sector: 492 ARROW.ELF 10637 byte (arc) 1st sector: 511 CALC.ELF 10847 byte (arc) 1st sector: 532 KEYSOUND.ELF 8657 byte (arc) 1st sector: 554 MUSIC.ELF 10538 byte (arc) 1st sector: 571 PQEQ.ELF 8813 byte (arc) 1st sector: 592 README.ELF 9095 byte (arc) 1st sector: 610 TTT.ELF 10672 byte (arc) 1st sector: 628 SCREEN.TXT 4098 byte (arc) 1st sector: 649 Screenshot (Thread) $> -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Saturday, August 14, 2010, 13:29:59 267 s runtime. CPU: 1399 MHz \
Das noch nicht vollständig ausgewertete Netzwerk-Paket
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 8Dh DAh 00h 00h 1Eh 11h 77h 77h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 62h 11h 02h 8Dh AFh C0h A8h 0Ah 67h 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 41hbedeutet:
Internet Protocol (IP):
45: version: 4, header length: 20 bytes
00: differentiated services field: ...
00 E5: total length 229
8D DA: identification
00: flags (don't fragment, more fragments)
(00) 00: fragment offset
1E: time to live (TTL) = 30
11: UDP (protocol)
77 77: checksum
C0h A8h 0Ah 67h: source IP 192.168.10.103
C0h A8h 0Ah FFh: dest IP 192.168.10.255User Datagram Protocol (UDP):
00 8A: source port: netbios-dgm (138)
00 8A: dest port: netbios-dgm (138)
00 D1: length
11 62: checksumNetBIOS Datagram Service:
...Server Message Block Protocol:
...SMB Mailslot Protocol:
...MS Windows Browser Protocol:
...screenshot (similar packet)
http://www.henkessoft.de/OS_Dev/Bilder/NetworkPacket_UDP_NetBIOS_SMB.PNG
-
version 0.0.1.175 - Rev: 754
udp.c/.h
- UDPRecv(...), UDPDebug(...): udppacket_t wird leider noch nicht richtig ausgelesen
-
TEST:
PrettyOS [Version 0.0.1.175 - Rev: 754]
RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 488
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 90h 62h 00h 00h 1Eh 11h 74h EFh C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 0Eh DAh 11h 02h 90h 37h C0h A8h 0Ah 67h 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.source port: 16 destination port: 27159 UDP Header information: +--------------+----------------+ | 16 | 27159 | (source port, destination port) +-------------------------------+ | 19 | 64776 | (length, checksum) +-------------------------------+ | data | (data) +-------------------------------+
Alles falsch!
Vergleich:
Korrekt wäre:User Datagram Protocol (UDP):
00 8A: source port: netbios-dgm (138)
00 8A: dest port: netbios-dgm (138)
00 D1: length
0E DA: checksum... sind doch nur 8 Byte, so wie es aussieht.
Die beiden IP-Adressen im Internet-Protocol (IP) C0h A8h 0Ah 67h und C0h A8h 0Ah FFh sollte man auch auswerten.
45h 00h 00h E5h 90h 62h 00h 00h 1Eh 11h 74h EFh C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 0Eh DAh 11h 02h 90h 37h C0h A8h 0Ah 67h 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 41hWir werten die IP-Zeile
45h 00h 00h E5h 90h 62h 00h 00h 1Eh 11h 74h EFh C0h A8h 0Ah 67h C0h A8h 0Ah FFh
überhaupt noch nicht vollständig aus, holen uns nur das Protokoll raus ^^Im Prinzip Wireshark nachbauen.
Ich kann UDP sehr schön testen, denn mein Printserver sendet das ständig ins Netz.
-
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)