| Autor |
Nachricht |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12180
|
Erhard Henkes Mitglied
16:02:36 29.11.2009 Titel: |
|
Zitieren |
Version 35:
http://prettyos.svn.sourc ....... ?view=rev&revision=35
- NULL als (void*) 0 redefiniert, wie in C üblich (vorher nur 0)
- NULL in paging.c ausgetauscht gegen 0 (wegen error: cast pointer to integer)
- itoa und reverse von K&R (siehe wikipedia), strcpy von wikipedia
- Rotierender ASCII Stern wurde umgefärbt und nach unten rechts in Statusleiste verschoben
- 2-Klausel-BSD-Lizenz und Disclaimer in os.h und ckernel.c für weitere Diskussionen erstmalig eingefügt, aber ganz unten wie abgesprochen (einmalig!)
Offenes Problem:
In char* getCurrentDateAndTime(char* pStr) muss wie folgt
| C++: | | int i; for(i=0;i<80;++i){pStr[i] = 0;} | |
der als Zeiger übergebene DateAndTime-String gelöscht werden. Ansonsten geht die Ausgabe schief und das OS stürzt wegen buffer overflow ab. Der Fehler liegt nicht in strcpy oder itoa, soweit ich das bisher sehe, also entweder in der Funktion selbst oder in strcat.
Der work-around funktioniert aber gut. |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 16:05:16 29.11.2009, insgesamt 1-mal bearbeitet |
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12180
|
Erhard Henkes Mitglied
18:41:07 29.11.2009 Titel: |
|
Zitieren |
Version 36:
http://prettyos.svn.sourc ....... ?view=rev&revision=36
- Kleiner Bug beim Auslesen von Root Dir behoben (Punkt zwischen Name und Extension wurde immer beim ersten Mal nicht gesetzt, jetzt dann, wenn Eintrag nicht Volume Label ist)
Lob an unseren Chef-Tester Cuervo, dem aufgefallen ist, dass da BOOT2SYS steht anstelle BOOT2.SYS, wenn das Label leer war
Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/PrettyOS_rev36.PNG |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 02:27:21 30.11.2009, insgesamt 3-mal bearbeitet |
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12180
|
Erhard Henkes Mitglied
19:30:12 29.11.2009 Titel: |
|
Zitieren |
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12180
|
Erhard Henkes Mitglied
21:31:58 30.11.2009 Titel: |
|
Zitieren |
Version 38:
http://prettyos.svn.sourc ....... ?view=rev&revision=38
Heute ist mal wieder Spaß angesagt:
- Modul gags.h/c mit fahrendem Zug (aus wikipedia) <--- unbedingt ansehen!
Dass dieses Modul nichts in einem "bare bone" Kernel zu suchen hat, ist mir selbstverständlich klar! Das war nur ein Test für das Feature Laufband. Ich habe eine einfache Idee - ohne großen API-Aufwand - gesucht für ein Programm, das man von der Floppy Disk laden und im User-Space laufen lassen kann. Das kam dabei heraus.
Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/FahrenderZug.PNG
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include "os.h"
#include "gags.h"
// Zug als Beispiel übernommen aus
// http://de.wikipedia.org/wiki/ASCII-Art#Allgemeine_Beispiele
// TODO: eigene ASCII-Art erzeugen
char* line1 = " _______ _______ <>_<> " ;
char* line2 = " (_______) |_|_|_|_|_|_|| [] [] | .---|'\"`|---. " ;
char* line3 = "`-oo---oo-'`-oo-----oo-'`-o---o-'`o\"O-OO-OO-O\"o' " ;
void showTrain(int8_t val)
{
int i;
char temp1,temp2,temp3;
switch(val)
{
case 1:
temp1 = line1[79];
temp2 = line2[79];
temp3 = line3[79];
for(i=79;i>0;--i)
{
line1[i] = line1[i-1];
line2[i] = line2[i-1];
line3[i] = line3[i-1];
}
line1[0] = temp1;
line2[0] = temp2;
line3[0] = temp3;
k_printf(line1,46,0xE);
k_printf(line2,47,0xE);
k_printf(line3,48,0xE);
break;
default:
break;
}
} | |
-----------------------------------------------
Version 39:
http://prettyos.svn.sourc ....... ?view=rev&revision=39
- Laufband ("fahrender Zug") im Kernel aus Effizienzgründen entfernt (auskommentiert) :xmas1:
| C++: | | // showTrain(1); // TODO: transfer to user space as elf exec format; k_printf as syscall | |
-----------------------------------------------
Version 40:
http://prettyos.svn.sourc ....... ?view=rev&revision=40
- gags.h/c im Kernel entfernt
- syscalls ergänzt
- showInfo(val) testweise im User-Bereich eingebaut; Laufband-Funktion noch nicht vorhanden (TODO: separate Task)
- makefile korrigiert im User-Bereich |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 12:31:55 06.12.2009, insgesamt 5-mal bearbeitet |
|
 |
Badestrand
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
|
Badestrand Mitglied
16:54:14 12.12.2009 Titel: |
|
Zitieren |
Der Zug ist mega cool!
Version 41: Unterstriche in den Ordnernamen und das Präfix "k_" in Funktionsnamen entfernt. |
|
|
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12180
|
Erhard Henkes Mitglied
16:04:01 13.12.2009 Titel: |
|
Zitieren |
Version 42:
http://prettyos.svn.sourc ....... ?view=rev&revision=42
- getCurrentSeconds() in userlib.h/c nachgerüstet (program.c wird jetzt kompiliert) <--- Dank an Cuervo für das Auffinden dieses Fehlers
- gags.h/c im Kernel gelöscht (Funktion ist in program.c)
| Zitat: | | Der Zug ist mega cool! | Thanks! |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 16:18:45 13.12.2009, insgesamt 1-mal bearbeitet |
|
 |
Badestrand
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
|
Badestrand Mitglied
17:43:38 13.12.2009 Titel: |
|
Zitieren |
Version 43:
http://prettyos.svn.sourc ....... ?view=rev&revision=43
- In start.asm aus user/user_program_c das Ausnullen der BSS entfernt, ist afaik sowieso schon auf 0 und ergab bei mir wegen Integer-Underflow in ecx 'nen fiesen Fehler.
- Noch zwei oder drei Funktionen mit "k_"-Präfix gefunden und korrigiert.
- kernel/gdt.inc gelöscht, da anscheinend ungenutzt (dann auch stage2_bootloader/gdt2.inc wieder in gdt.inc umbenannt)
- mingw32-make.exe, nasmw.exe, CreateFloppyImage.exe, BootDisk2BootStick.exe, dd.exe und bochs.bxrc in Ordner "tools"
- Das Erstellen des Images, Entfernen aller .o-Dateien jetzt in globalem makefile
- Aufrufen von Bochs, Qemu oder das Bauen der Diskette in Batch-File. Die Batch-Datei kann "einfach so" aufgerufen werden, dann kompiliert alles. Wird als Parameter "bochs" übergeben, wird das Image in Bochs ausgeführt. Wird (evtl zusätzlich) "disc" übergeben, wird alles auf die Diskette geschrieben. Für Qemu und anderes können wir auch noch was basteln. Und das ganze noch als Shellskript für die Linuxer schreiben, ist bisher nur als Stub vorhanden.
TODO:
Der Stack der User-Prozesse muss vom Kernel gesetzt werden, jeder braucht auch seinen eigenen Stack. In unserem User-Programm zumindest wird der Stack händisch auf 0x60000 gesetzt. Erhard, du kennst dich in dem Tasking-Modul doch aus, magst du mal probieren, jedem Prozess seinen eigenen Stack zu geben? Irgendwo unter 0xC0000000 oder so..
@Erhard: Wird "quickformat_Floppy_A.bat" noch gebraucht? |
Zuletzt bearbeitet von Badestrand am 17:44:35 13.12.2009, insgesamt 1-mal bearbeitet |
|
 |
Badestrand
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
|
Badestrand Mitglied
17:58:39 13.12.2009 Titel: |
|
Zitieren |
Version 44 & 45: Minimale Änderungen. U.a. die Linux-Version von CreateFloppyImage hinzugefügt. Ging aber nicht so einfach, weil einmal ein Ordner mit demselben Namen existiert hatte, schien SVN zu stören. Egal, es heißt jetzt CreateFloppyImage2. |
|
|
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12180
|
Erhard Henkes Mitglied
18:52:57 13.12.2009 Titel: |
|
Zitieren |
Version 45 baut so nicht auf:
| Zitat: |
G:\OSDev\PrettyOS\trunk\Source>tools\mingw32-make OS=WINDOWS
nasmw -f bin stage1_bootloader/boot.asm -Istage1_bootloader/ -o stage1_bootloader/boot.bin
nasmw -f bin stage2_bootloader/boot2.asm -Istage2_bootloader/ -o stage1_bootloader/boot2.bin
rm *.o -f
i586-elf-gcc user/user_program_c/*.c -c -Iuser/user_program_c -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin
i586-elf-ld *.o -T user/user_program_c/user.ld -Map user/user_program_c/kernel.map -nostdinc -o user/user_program_c/program.elf
c:\crosstools\bin\i586-elf-ld.exe: warning: cannot find entry symbol _start; defaulting to 01400000
rm *.o -f
tools/make_initrd user/init_rd_img/test1.txt file1 user/init_rd_img/test2.txt file2 user/init_rd_img/test3.txt file3 user/user_program_c/program.elf shell
writing file user/init_rd_img/test1.txt->file1 at 0x1304
writing file user/init_rd_img/test2.txt->file2 at 0x1327
writing file user/init_rd_img/test3.txt->file3 at 0x134a
writing file user/user_program_c/program.elf->shell at 0x1910
mv initrd.dat kernel/initrd.dat
rm *.o -f
i586-elf-gcc kernel/*.c -c -Ikernel/include -std=c99 -march=i386 -mtune=i386 -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude
nasmw -O32 -f elf kernel/data.asm -Ikernel/ -o data.o
nasmw -O32 -f elf kernel/flush.asm -Ikernel/ -o flush.o
nasmw -O32 -f elf kernel/interrupts.asm -Ikernel/ -o interrupts.o
nasmw -O32 -f elf kernel/kernel.asm -Ikernel/ -o kernel.o
nasmw -O32 -f elf kernel/process.asm -Ikernel/ -o process.o
i586-elf-ld *.o -T kernel/kernel.ld -Map kernel/kernel.map -nostdinc -o kernel/kernel.bin
rm *.o -f
tools/CreateFloppyImage2 PrettyOS FloppyImage.bin stage1_bootloader/boot.bin stage2_bootloader/boot2.bin kernel/kernel.bin
Cannot open the file 'stage2_bootloader/boot2.bin'
mingw32-make: *** [ckernel] Error -1
|
Wenn ich build.bat disc in der Konsole eingebe, wird boot2.sys nicht kopiert.
boot2.bin landet in stage1_bootloader :xmas2:
---------------------------------------------------------
Notwendige Korrektur:
makefile, , Zeile 26/27:
| Code: | boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
$(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE2DIR)/boot2.bin | |
boot.asm, Zeile 264:
| Assembler: | | ImageName db "BOOT2 BIN" | |
boot.asm, Zeile 268:
| Assembler: | | msgFailure db 0x0D, 0x0A, "BOOT2.BIN MISSING", 0x0D, 0x0A, 0 | |
boot2.asm, Zeile 26:
| Assembler: | | msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN", 0x0D, 0x0A, 0x0A, 0 | |
Dann startet aber der Kernel immer noch nicht! |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 19:54:57 13.12.2009, insgesamt 9-mal bearbeitet |
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12180
|
Erhard Henkes Mitglied
20:03:34 13.12.2009 Titel: |
|
Zitieren |
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|