Sourcecode Fortschritt
-
Revision 339:
- Ordnerstruktur Userprogramme umgebaut
- makefiles userprogramme aktualisiert
- Weitere Userprogs mitgeliefert.
- makefile bindet diese Userprogs ins FloppyImage ein.
- screenshot-Fkts. jetzt in video.c
- Hello-Programm nicht mehr TTT
-
ich finde Cuervo's wunderbarere Bootscreen sollte für die Nachwelt fest gehalten werden (natürlich Strg + t während des Bootens):
PrettyOS [Version 0.0.0.339] Console 0: Booting ... -------------------------------------------------------------------------------- ###### ## ## ##### #### ######## ### ### ####### ###### ######## ### ### ######### ####### ### ### ## ## #### ############## ## ### #### ### ## ### ### ###### ###################### ### ### ### #### #### ## ##### ####################### ## ## ### ##### ######## #### ######## ### ### #### ### ### ### ###### ####### #### ######## ### ### #### ### ### ## ##### ###### ### ###### ### #### ###### ### ### ### ### ### ### #### #### ###### #### ## ## ### #### ### ######## ########### ##### ########## ######## ### ### ######## ##### ##### #### ######## ####### ## ## ###### ### ### ### ##### ##### ## ## ## Copyright (c) 2010 The PrettyOS Team This bootscreen has been created by
... und der USB-transfer ist auch ein "Foto" wert:
PrettyOS [Version 0.0.0.339] Shell -------------------------------------------------------------------------------- Enabling Async Schedule >>> >>> function: showPacket virtAddrBuf0: C0006000h 12h 01h 00h 02h 00h 00h 00h 40h 00h 00h 00h 00h 00h 00h 01h 02h 03h 01h >>> >>>function: showDeviceDesriptor length: 18 descriptor type: 1 USB specification: 2.0 USB class: 0000h USB subclass: 0000h USB protocol 0000h max packet size: 64 vendor: 0000h product: 0000h release number: 0.0 manufacturer: 0001h product: 0002h serial number: 0003h number of config.: 1 setup packet: >>> >>> function: showPacket virtAddrBuf0: C020B000h 80h 06h 00h 01h 00h 00h 12h 00h setup: >>> >>> function: showStatusbyteQTD QTD: C020A000h Statusbyte: 00h in: >>> >>> function: showStatusbyteQTD QTD: C0005000h Statusbyte: 00h port 2: 00001004h, line: 00h SE0,power on, enabled, EHCI owned port 3: 00001004h, line: 00h SE0,power on, enabled, EHCI owned port 4: 00001004h, line: 00h SE0,power on, enabled, EHCI ownedScreenshot Test $> -------------------------------------------------------------------------------- Port: 4, device not attached -------------------------------------------------------------------------------- Friday, April 09, 2010, 20:42:18 13 s runtime. CPU: 7571 MHz \
Das gelingt übrigens nur mit:
create_thread((task_t*)pODA->curTask, &screenshot_easy);
also ohne eigene Konsole (ckernel.c, line 246)
Bei den User-Programmen, jetzt übrigens deutlich zahlreicher im Floppy-Image (thx to MrX), kommt es mit Strg+t noch zum reboot, kA warum, mit Strg+s geht es.
-
Rev. 340:
video.c:
- Thread-Problem bei screenshot gelöst durch verlagern von videoscreen[4000+98] vom stack in den globalen speicher!
- das newline bei Zeile 50 nicht mehr angefügt:static void catchVidmem() { int32_t NewLine = 0; for (uint16_t i=0; i<4000;i++) { uint16_t j=i+2*NewLine; videoscreen[j] = *(uint8_t*)(0xB8000 + 2*i); // only signs, no attributes if ( (i%80 == 79) && (i!=3999) ) { videoscreen[j+1]= 0xD; // CR videoscreen[j+2]= 0xA; // LF NewLine++; } } }
TODO: Kernel-Stack vergörßern
-
Revision 341:
Ergebnisse des CodeReviews: fpu.c, ckernel.c, paging.c, kheap.c
-
Die Bildschirmfotos sind plötzlich unleserlich.
-
Rev. 342:
now screenshot works correct again (ctrl+s: process, ctrl+t: thread)
-
Rev. 343:
- pci.c: EHCI Basisadresse von ID-mapping auf freies mapping umgestellt
- ckernel.c: create_cthread((task_t*)pODA->curTask, &initEHCIHostController, "EHCI");
- os.h: uint32_t pciEHCInumber; // pci device number in ODA
-
Rev. 344:
build.bat angepasst, dass auch bei floppy_build.bat alle User-Programme auf der Floppy ankommen.
-
Rev. 345:
EHCI-Ablauf im EHCI-Interrupt beschleunigt: bisher bestens bewährte Methode mitttels Flag setzen und in kernel idle loop einen Thread starten
Ausgabe nun in eigenem "Fenster":
PrettyOS [Version 0.0.0.345] Console 0: EHCI Ports -------------------------------------------------------------------------------- >>> >>> function: createQTD >>> >>> function: createQTD >>> >>> function: createQH >>> >>> function: createQH Enabling Async Schedule >>> >>> function: showPacket virtAddrBuf0: C0213000h 12h 01h 00h 02h 00h 00h 00h 40h 00h 00h 00h 00h 00h 00h 01h 02h 03h 01h >>> >>>function: showDeviceDesriptor length: 18 descriptor type: 1 USB specification: 2.0 USB class: 0000h USB subclass: 0000h USB protocol 0000h max packet size: 64 vendor: 0000h product: 0000h release number: 0.0 manufacturer: 0001h product: 0002h serial number: 0003h number of config.: 1 Port: 4, device not attached setup packet: >>> >>> function: showPacket virtAddrBuf0: C0215000h 80h 06h 00h 01h 00h 00h 12h 00h setup: >>> >>> function: showStatusbyteQTD QTD: C0214000h Statusbyte: 00h in: >>> >>> function: showStatusbyteQTD QTD: C0212000h Statusbyte: 00h port 2: 00001004h, line: 00h SE0,power on, enabled, EHCI owned port 3: 00001004h, line: 00h SE0,power on, enabled, EHCI owned port 4: 00001004h, line: 00h SE0,power on, enabled, EHCI owned -------------------------------------------------------------------------------- Saturday, April 10, 2010, 20:27:33 9 s runtime. CPU: 7345 MHz -
-
Rev. 346:
EHCI Start und EHCI Port Change jetzt in eigenen Konsolen, die man mit Tastendruck schließen kann, so dass man diese in Ruhe beschauen oder "fotografieren" (strg+s oder strg+t) kann.
Die Vorgehensweise an einem Beispiel, damit wir das gemeinsam diskutieren/optimieren können:
in ckernel.c:
am anfang:portCheckFlag = false; // EHCI port change
später in der idle loop:
if ((portCheckFlag == true) && (CurrentSeconds >= 3) && pODA->pciEHCInumber) { portCheckFlag = false; create_cthread((task_t*)pODA->curTask, &portCheck, "EHCI Ports"); }
in ehci.c:
der EHCI-Interrupthandler:void ehci_handler(registers_t* r) { //... if (pOpRegs->USBSTS & STS_PORT_CHANGE) { settextcolor(9,0); printf("Port Change"); settextcolor(15,0); pOpRegs->USBSTS |= STS_PORT_CHANGE; if (enabledPortFlag) { portCheckFlag = true; } }
void portCheck() { showPORTSC(); checkPortLineStatus(); settextcolor(13,0); printf("\n>>> Press key to close this console. <<<"); settextcolor(15,0); while(!checkKQ_and_return_char()); }
-
Nach hartem "Kampf" im IRC nun Revision 347:
- Ergebnisse Code Review pci.c
- syscall zur Begrenzung des Scrollbereichs.
- Math-Fkts. von Iteem (Danke dafür!) eingebaut.
-
Rev. 348:
- rtl8139.h geschaffen
- EHCI und RTL8139 Funktionen aus os.h entfernt
- kleine Verbesserungen (falscher Kommentar in rtl8139, Klammer)Tests:
Bochs: alles ok (hat kein EHCI)
Qemu: alles ok (incl. EHCI)
VMWare: bricht im Bootscreen ab
VBox: USB devices lassen sich nicht einbinden, sonst alles ok
Auf real Hardware Probleme z.T. bei Memory-Erkennung und bei EHCI MMIO.
-
Revision 349:
- Flags durch Events ersetzt.
- -fno-common als gcc-schalter genutzt -> Der Kampf um "extern" ist vorbei, die pro-extern-Fraktion hat (zum Glück ) gewonnen
-- Daraus resultierende Fehler behoben
- "pause" nach dem compilieren in build.bat
-
Rev. 350:
os.h u. ckernel.c: kleine Aufräumarbeiten
-
Revision 351:
- Anderes Eventsystem: Fkt-Ptr. basiert
- pciList von überflüssigem _Diagnosis_ befreit.
- list.c: Fehler in listShowElement und listDeleteAll behoben
-
Rev. 352:
- zwischenschritt ehci.c (#PF bei thread "EHCI")
warum ist der thread zum EHCI init nur "user"?
PrettyOS [Version 0.0.0.352] Console 0: EHCI -------------------------------------------------------------------------------- Page Fault ( - user-mode) at 00041D92h - EIP: 00041D92h err_code: 00000005h address(eip): 00041D92h edi: 00000000h esi: 00000000h ebp: 00000000h eax: 00000000h ebx: 00000000h ecx: 00000000h edx: 00000000h cs: 0000001Bh ds: 00000023h es: 00000023h fs: 00000023h gs 00000023h ss 00000023 h int_no 14 eflags 00010202h useresp 01420000h Page Fault! | <Exception - System Halted> Press key for exit from the task! |
-
Rev. 353:
work-around, bis das thema ring0/ring3 geklärt ist bei threads:
task.c, line 229/230:// new_task->privilege = parentTask->privilege; new_task->privilege = 0; /// TEST
-
Revision 354:
- create_thread nimmt keinen parentTask mehr, ist jetzt immer current_task
- Optimierungen in userlib.c
- list.c: Überflüssige (und m.E. falsche, mglw. Memory-Leaks produzierende) Fkt. entfernt
- abs heißt nun fabs, nimmt doubles und nutzt die FPU
-
Revision 355:
- Projektfile für VC++. Wer will kann auch welche für andere IDEs machen.
- pODA ist nun kein Pointer mehr und heißt somit ODA.
-
Rev. 356:
Vor USB-Transfer wird gestoppt (Tastendruck), damit sind mehrere Konsolen bereit dazu.
USB-Transfer klappt aber bisher nur einmal erfolgreich bei real Hardware)Da EHCI/USB2 noch ziemlich unübersichtlich ist durch die Vielzahl der Ports und Möglichkeiten, hier die Konsolen meines "Entwicklungs-PCs":
Konsole M:
PrettyOS [Version 0.0.0.355] Shell -------------------------------------------------------------------------------- 1.44 MB FDD device 0 #0 0:0.0 dev:2774h vend:8086h IRQ:0 #1 0:1.0 dev:2775h vend:8086h IRQ:5 #2 0:27.0 dev:27D8h vend:8086h IRQ:3 #3 0:28.0 dev:27D0h vend:8086h IRQ:5 #4 0:28.4 dev:27E0h vend:8086h IRQ:5 #5 0:28.5 dev:27E2h vend:8086h IRQ:11 #6 0:29.0 dev:27C8h vend:8086h IRQ:11 USB UHCI 6000h I/O sz:-65504 #7 0:29.1 dev:27C9h vend:8086h IRQ:11 USB UHCI 6400h I/O sz:-65504 #8 0:29.2 dev:27CAh vend:8086h IRQ:11 USB UHCI 6800h I/O sz:-65504 #9 0:29.3 dev:27CBh vend:8086h IRQ:3 USB UHCI 7000h I/O sz:-65504 #10 0:29.7 dev:27CCh vend:8086h IRQ:11 USB EHCI CDBFF800h MMIO sz:1024 EHCI_MMIO CDBFF800h mapped to virt addr FF000000h, offset: 0800h >>> >>> function: analyzeEHCI EHCI bar get_phys_Addr: 0DBFF800h HCIVERSION: 0100h HCSPARAMS: 00104208h Ports: 8 HCCPARAMS: 00006871h OpRegs Address: FF000820h #11 0:30.0 dev:244Eh vend:8086h IRQ:0 #12 0:31.0 dev:27B8h vend:8086h IRQ:0 #13 0:31.1 dev:27DFh vend:8086h IRQ:0 #14 0:31.2 dev:27C0h vend:8086h IRQ:5 #15 0:31.3 dev:27DAh vend:8086h IRQ:0 #16 1:3.0 dev:8023h vend:104Ch IRQ:11 #17 1:4.0 dev:8211h vend:1283h IRQ:3 #18 1:5.0 dev:4320h vend:11ABh IRQ:11 #19 2:0.0 dev:3132h vend:1095h IRQ:11 #20 3:0.0 dev:108Bh vend:8086h IRQ:5 <RAM Disk at C0002000h DIR> dev 35 info 9562 shell >>> >>> function: ehci_handler: Port Change >>> >>> function: ehci_handler: Port ChangeScreenshot (Thread) $> -------------------------------------------------------------------------------- _______ _______ <>_<> (_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---. `-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o' -------------------------------------------------------------------------------- Monday, April 12, 2010, 00:38:22 47 s runtime. CPU: 3753 MHz \
Konsole 0:
PrettyOS [Version 0.0.0.355] Console 0: EHCI -------------------------------------------------------------------------------- >>> >>> function: initEHCIHostController >>> >>> function: startHostController (reset HC) waiting for HC reset >>> >>> function: DeactivateLegacySupport DeactivateLegacySupport: eecp = 0068h eecp = 0068h, eecp_id = 0001h set OS-Semaphore. BIOS-Semaphore being not set. OS-Semaphore being set. Check: BIOSownedSemaphore: 0 OSownedSemaphore: 1 >>> >>> function: ehci_handler: Port Change HCHalted bit set to 0 (OK), ports can be enabled now. >>> >>> function: enablePorts >>> >>> function: resetPort 1 >>> >>> function: resetPort 2 >>> >>> function: resetPort 3 >>> >>> function: resetPort 4 >>> >>> function: resetPort 5 >>> >>> function: resetPort 6 >>> >>> function: resetPort 7 >>> >>> function: resetPort 8 >>> Press key to close this console. <<<
Konsole 1:
PrettyOS [Version 0.0.0.355] Console 1: EHCI Ports -------------------------------------------------------------------------------- >>> >>> function: showPORTSC >>> >>> function: checkPortLineStatus >>> Status of USB Ports <<< port 1: 00001801h, line: 02h J-state port 2: 00001005h, line: 00h SE0,power on, enabled, EHCI owned >>> Press key to start USB-Test. <<<
Konsole 2:
PrettyOS [Version 0.0.0.355] Console 2: EHCI Ports -------------------------------------------------------------------------------- >>> >>> function: showPORTSC >>> >>> function: resetPort 8 >>> >>> function: checkPortLineStatus >>> Status of USB Ports <<< port 1: 00001801h, line: 02h J-state port 2: 00001005h, line: 00h SE0,power on, enabled, EHCI owned >>> Press key to start USB-Test. <<<
Taste auf Konsole 2 bringt einen korrekten USB-Transfer.