Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - OsDevNewbie

Seiten: [1] 2 3 4
1
Softwareentwicklung / Binutils LD 2.36.1
« am: 14. April 2021, 02:30 »
Hallo zusammen.

Ich habe bis jetzt zuverlässig den binutils ld mit version 2.26 verwendet. Ich dachte mir aber es wird mal Zeit für ein Update auf Version 2.36.1 (die zum jetzigen Zeitpunkt aktuellste Version). Das erstellen des ELF-Linkers und des Cross-Linkers hat auch relativ gut funktioniert. Nur habe ich jetzt Problem, dass beim Linken der Programme für mein OS ich folgende Fehlermeldung bekomme:
~/YourOS/crosstools/env/lib/gcc/x86_64-pc-youros/7.5.0/../../../../x86_64-pc-youros/bin/ld: failed to convert GOTPCREL relocation; relink with --no-relax
Nun ist noch anzumerken, dass ich die Programme an die 512GiB-Grenze (0x8000000000) linke. Das hat bisher gut funktioniert (man muss halt mit -fpic kompilieren). Nur mit dem neuen Linker klappt das nicht mehr. Das passiert auch, wenn ich die selben Objekt-Dateien nehme wie für den 2.26 Linker.

Ich habe dann mal ausprobiert was die Fehlermeldung auch vorschlägt. Also `-Wl,--no-relax` zum Makefile hinzugefügt und siehe da es funktioniert. Nur ich würde gerne Verstehen, warum es ohne dieses Flag nicht funktioniert.

Nach ein paar Nachforschungen habe ich rausgefunden, dass diese Fehlermeldung erscheint bei einem Overflow, da die relative Addressierung in x64 ja trotzdem 32-bit signed ist. Aber der 2.26 Linker hat ja damit auch kein Problem und das Binary ist nur ein paar KB gross.

Weiss jemand von euch was das Problem sein könnte?
2
Das Wiki / PHP Warnungen
« am: 05. April 2017, 17:41 »
Hallo,
als ich heute auf dem Lowlevel-Wiki auf die Dateisystem-Seite gehen wollte wurde ich mit einer PHP-Warnungsmeldung empfangen. Das einzigste, was von der eigentlichen Seite geladen wird ist das Logo. Ich der Server-Administrator sollte sich das mal anschauen.
Ich wollte das hier nur mal mitteilen.
3
Softwareentwicklung / Makefile geteilter Source Code
« am: 02. April 2017, 22:55 »
Hallo zusammen.
Ich verwende seitdem ich angefangen habe meinen Kernel zu Programmieren Eclipse, das für mich automatisch die Makefiles erzeugt und dann alles kompiliert. Ich möchte jetzt umsteigen auf ein eigenes Makefile. Das kann man ja dann in Eclipse verwenden um den Code zu kompilieren. Der Grund für den Umstieg ist, dass man den Kernel auch oihne Eclipse kompilieren können soll.
Das Problem, das ich jetzt aber habe ist, dass ich grosse Teile meiner Standard C Library auch im Kernel verwende (z.B. die Heapverwaltung, printf, usw.). D.h. das Makefile muss den Kernel und die Library kompilieren und dafür entsprechende Macros an den Compiler übergeben. Nur wie geht das in einem Makefile? Geht das überhaupt?
Also das Ziel ist, dass make all das Kernelbinary und die Library erstellt.
Es wäre schön, wenn ich Make verwenden könnte, denn ich denke es ist einfacher zu portieren als CMake oder?
4
Softwareentwicklung / Interrupts durch Syscalls blockiert
« am: 05. May 2016, 20:46 »
Hallo zusammen,

Ich wollte den Performanceunterschied zwischen den Assembler-Instructionen "int" (im Folgenden als Interrupt bezeichet) und "syscall" (im Folgenden als Syscall bezeichet) messen. Dazu habe ich eine Schleife gemacht, die 100'000'000 mal durchlaufen wird. Einmal wird dann ein Interrupt ausgelöst und das andere Mal wird ein Syscall ausgeführt. Vor und nach der Schleife speichere ich die aktuelle Laufzeit des ganzen System ab und gib am Schluss die Differenz der beiden Werte aus, also die gesamte Zeit, die die Schleife benötigt hat. Die Uptime wird vom Handler, der die Interrupts vom PIT handelt, incrementiert. Der PIT löst jede Millisekunde einen Interrupt aus. Das funktioniert soweit sehr gut. In meiner Shell kann man die aktuelle Uptime ausgeben lassen und die stimmt.

Jetzt ist das Problem, dass die Anfangszeit der Schleife immer gleich ist wie die Endzeit, was dazu führt, dass 0ms ausgegeben wird, was nicht stimmen kann, da es schon ein paar Sekunden dauert bis die Schleife beendet ist. Nach ein bisschen Debuggen ist mir aufgefallen, dass während der Schleife keine Timer-Interrupts mehr ausgelöst werden und dadurch wird auch Uptime nicht mehr incrementiert.

Nach der Schleife wird Uptime wieder incrementiert. Dieses Verhalten habe ich sowohl mit Interrupts als auch mit Syscalls.
In den Syscalls und im entsprechenden Interrupt werden Interrupts nicht deaktiviert, also sollte Uptime hoch gezählt werden, was anscheinend nicht der Fall ist.

Wieso gibt es einen "Unterbruch" der Timer-Interrupts? Sind das zu viele Interrupts für die CPU? Aber wieso passiert das dann auch bei Syscall?

Hier die entsprechende Funktion:
static void perftest()
{
size_t i, count;
SIS start, end;
uint64_t time;
printf("Starting performance test:\n");

getSysInfo(&start);
for(i = 0; i < 100000000; i++)
{
asm volatile("int $48": "=a"(count): "D"(61));
}
getSysInfo(&end);
asm volatile("int $48":: "D"(62));
time = end.Uptime - start.Uptime;
printf("Interrupts: %zu in %lums => %f/s\n", count, time, count / (double)(time?:1000.0) * 1000);

getSysInfo(&start);
for(i = 0; i < 100000000; i++)
{
asm volatile("mov %1,%%rdi;syscall": "=a"(count): "i"(61): "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", "r11");
}
getSysInfo(&end);
asm volatile("mov %0,%%rdi;syscall":: "i"(62): "rax", "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", "r11");
time = end.Uptime - start.Uptime;
printf("Syscalls: %zu in %lums => %f/s\n", count, time, count / (double)(time?:1000.0) * 1000);

printf("End of performance test\n");
}
getSysInfo() ist die Funktion die mir die Uptime (und noch andere Infos) zurückgibt.

Hier die entsprechenden Funktionen, die durch Interrupts oder durch Syscalls aufgerufen werden (Funktionsnummer steht im rdi-Register):

static uint64_t count = 0;
static uint64_t perfTest() //Funktion 61
{
return ++count;
}

static void resetPerfTest() //Funktion 62
{
count = 0;
}

Das ganze läuft in meiner Shell im Userspace.

Ich hoffe ihr könnt mir helfen.
Ansonsten wünsche ich euch noch einen schönen Abend.
5
Hallo zusammen,
ich habe seit langem mal wieder mein OS auf realer Hardware laufen lassen. Dabei habe ich bemerkt, dass mein OS nicht alle PCI-Geräte findet. Es findet nämlich den/die S-ATA-Controller des Motherboards nicht. Mein System hat zusätzlich noch eine S-ATA/IDE PCIe Karte eingebaut, da meine CD-ROM Laufwerke über IDE angeschlossen sind, aber das Motherboard keine entsprechenden Anschlüsse besitzt. Diese S-ATA Karte wird erkannt. Wieso werden den die anderen S-ATA Controller nicht erkannt?
Insgesamt erkennt mein OS 21 PCI Geräte darunter fallen, Grafikkarte, Netzwerkkarte, PCI-PCI Bridges, die S-ATA Erweiterungskarte, USB2+3 und PCI-ISA Bridges.
Kann das sein, dass sich die Controller hinter den PCI-ISA Bridges verstecken? Wie und für was verwendet man die?

Ich hoffe jemand kann meine Fragen beantworten.
6
Offtopic / Rutsch ins 2016
« am: 31. December 2015, 14:25 »
Ichwünsche allen einen guten Rutsch ins Jahr 2016.
7
Das Wiki / Das Wiki und https
« am: 09. December 2015, 09:52 »
Hallo zusammen,
ich habe vor kurzem bemerkt, dass das lowlevel-Wiki und das Forum auch über verschlüsseltes http (https) erreichbar ist. Jetzt ist aber immer das Problem, dass es manchmal passiert, dass man immer auf die Addresse Umgeleitet wird, in der der Port 80 hinter der Domain angeben wird (z.B.: https://www.lowlevel.eu:80/wiki/Ausgabe_7), was natürlich nicht funktioniert.
Ausserdem ist es so, dass wenn man https://lowlevel.eu eingibt wird man auf die unverschlüsselte Seite umgeleitet.
Sowieso wäre ich dafür, dass das Lowlevel-Wiki und Lowlevel-Forum nur über https erreichbar sein sollte.

Was denkt ihr dazu?

P.S.: Wer ist eigentlich für die Serververwaltung zuständig?
8
tyndur / Bugs in Programmen von Tyndur
« am: 17. November 2015, 09:29 »
Hallo,
ich habe mal eine der neueren Nightlies (16.11.2015) von Tyndur in VMWare Workstation 12 ausprobiert (die Live-Version, d.h. das iso).
Es sind bei mir dabei verschiedene Bugs aufgetaucht. Einer davon ist beim Booten zu sehen, wo bei mir die Fehlermeldung auftritt "Fehler beim Ausführen von 'config/keyboard.lsh'. Eine weitere Fehlermeldung kommt vom Programm setup. Wenn ich in setup auf den Eintrag "Netzwerk" gehe, dann bekomme ich folgenden Fehler:
Runtime error 2  at $40001516
$40001516
$0251bc00
Das selber passiert wenn ich bei den LPT-Quellen irgendein Eintrag auswähle:
Runtime error 2 at $40000AB5
$40000AB5
$0251FC00
Das Programm "pong" macht glaube ich auch nicht das was es soll. Man kann es starten und dann passiert einfach gar nichts mehr. Ist das normal?

Ich hoffe ich konnte euch ein bisschen Helfen.
9
Softwareentwicklung / Filedeskriptoren und Buffers
« am: 03. November 2015, 23:44 »
Hallo zusammen,

Da jedes Unterprogramm die Filedeskriptoren des Vaterprozesses erbt, was passiert denn, wenn jetzt beide Prozesse gleichzeitig in die gleiche Datei schreiben (Z.B. stdin)?

Ich dachte nämlich, dass ich Dateien einfach in den virtuellen Addressraum "mounte" (mit Shared Memory), so dass ich das auch gleich als Buffer verwenden würde. Ist das möglich oder gibt es da bestimmte Regeln?
10
OS-Design / Streamids
« am: 11. October 2015, 22:32 »
Hallo zusammen,
mir ist aufgefallen, das in allen mir bekannten Systemen (Windows, Mac und Linux) die Stream IDs von jedem Prozess immer von vorne vergeben werden. D.h. wenn ein Prozess eine Datei öffnet, dann bekommt er die ID 3 für den Filedescriptor. Wenn nun ein 2. Prozess eine andere (oder die selbe) Datei öffnet, bekommt er für diese auch wieder die ID 3 zurück.
Ist das irgendwo definiert, dass das so sein soll/muss oder machen diese Systeme das einfach?
Ich gebe nämlich jedem Stream eine andere ID, so dass die IDs eines Prozesses nicht immer mit der 3 anfangen. Ist das ein Sicherheitsrisiko?
11
Softwareentwicklung / ld und hohe Startadresse
« am: 19. September 2015, 19:38 »
Hallo,
ich habe mein Speicher so konzipiert, dass die unteren 512GiB und die oberen 512GiB Kernelspace sind. Der obere Speicherbereich wird allerdings nur zur Verwaltung der Pagingtabellen verwendet. Der Userspace sitzt dazwischen. Programme werden an die Adresse 0x8000000000 geladen und dann ausgeführt. Jetzt habe ich das Problem, dass mir ld immer folgende Fehlermeldung ausgibt:
main.c:(.text+0x30): relocation truncated to fit: R_X86_64_32 against `.rodata'
Es wurde zwar schon hier vermutet, dass 0x8000000000 nicht in 32-bit passt und deshalb diese Meldung ausgegeben wird, aber das macht für mich keinen Sinn, denn diese Meldung wird ja nur für Symbole, also (globale) Variablen oder Funktionen, ausgegeben. Diese werden ja relativ addressiert. Aber eigentlich sollte diese relative Addresse in 32-bit reinpassen, denn das Programm ist sicher kleiner als 4 GiB.

Meine aktuelle Konfiguration für mein Cross-gcc seht ihr hier.

Ich hoffe ihr wisst eine Antwort auf mein Problem.
12
Lowlevel-Coding / Debbuging auf realer Hardware
« am: 24. March 2015, 17:10 »
Hallo,
ich möchte hier mal vorstellen, wie ich auf echter Hardware debugge.
Ich habe mir dazu einen kleinen Debugger in den Kernel eingebaut, der ähnlich aussieht, wie der von Bochs. Er unterstützt folgende Befehle:
  • s: Singlestep
  • c: Ausführung fortsetzen, bis zum nächsten Breakpoint
  • lb: Breakpoint setzen
  • d: Breakpoint löschen
  • info b: Breakpoints anzeigen
  • x: Inhalt an einer bestimmten Adresse anzeigen

Zusätzlich wird bei einer Exception auch der Debugger aufgerufen. Für den Debugger wird der Debuginterrupt (int 1) benutzt. Der Debugger wird dabei wie ein Task behandelt. Beim Debuginterrupt wird einfach ein Taskswitch vorgenommen. Dies ist notwendig, damit Interrupts aktiviert sind.
Ich hatte es mal anders ausprobiert und die Interrupts im Handler aktiviert, aber das hat nicht funktioniert.
Um Breakpoints zu setzen, werden die Debugregister der CPU verwendet. Der Singlestep wird durch ein Flag im Flagregister realisiert.
Was ich noch einbauen möchte ist ein Disassembler. Ich habe aber keinen gefunden und deshalb begonnen selber einen zu schreiben. Er ist aber noch nicht funktionstüchtig. Vielleicht kennt ja einer von euch einen opensource Disassembler.

Wenn ihr euch mal meinen Debugger anschauen möchtet, so könnt ihr das hier tun. Momentan wird einfach nur ein Breakpoint unterstützt. Wie der Interrupthandler aufgebaut ist könnt ihr hier (Zeile 200) einsehen.

Wie debugged ihr auf echter Hardware?
Ich hoffe ich konnte euch einen Lösungsvorschlag geben.

P.S.: Der Debugger hat manchmal seine Problemchen (z.B. wenn man über den x-Befehl auf eine Speicherstelle zugreift, die nicht gemappt ist, dann gibt es einen Page Fault und dann muss man neustarten) also sollte man aufpassen was man macht. Und ich habe ihn bissher auch nur für Kerneldebugging eingesetzt also weiss ich nicht, ob man damit auch Tasks debuggen könnte. Theoretisch sollte es aber möglich sein.
13
Lowlevel-Coding / CDI Treiber auf realer Hardware
« am: 24. March 2015, 14:55 »
Hallo zusammen,
zwischendurch teste ich mein OS immer auf einer realen Maschine. Aber was bissher nie funktioniert hat, waren die CDI-Hardware-Treiber. Ich habe mein OS auf 4 verschiedenen Maschinen getestet. Auf jeder Maschine erkennt er weder das CD-Laufwerk noch irgendein anderes Gerät, das via S-ATA angebunden ist.
Die PCI-Geräte werden von meinem OS richtig erkannt und auch alles andere Funktioniert einwandfrei (Tastatur, usw.).
In meinem OS befinden sich der ATA/ATAPI und AHCI Treiber des CDI. Wurden diese denn schonmal auf realer Hardware getestet oder warum erkennen diese keine Geräte?
14
Softwareentwicklung / GCC für OS compilieren
« am: 16. March 2015, 15:12 »
Hallo liebe Community,
ich möchte gerne den GCC für mein OS compilieren, so dass man mit ihm dann Programme auf meinem OS compilieren kann. Nur wie sage ich dem configure Skript, dass es meine Library verwenden soll?
Ich habe jetzt einfach mal die neueste GCC Version heruntergeladen. Kann man dann überhaupt das configure-Skript verwenden, welches sich im Ordner befindet oder muss man alles selber machen?
Was muss ich sonst noch beachten?

Das ist das erste Programm, das ich portiere und somit mache ich hiermit erste Erfahrungen.

Ich freue mich jetzt schon auf Rückmeldungen. Danke.
15
OS-Design / Konsolen
« am: 02. March 2015, 23:57 »
Hallo liebe Community,
ich implementiere gerade die Konsole(n). Mein Ziel ist es 12 sichtbare Konsolen zu haben und die restlichen sind sogenannte virtuelle Konsolen. Nur weiss ich jetzt nicht, wie man einem (Kind-)Prozess sagen soll, dass er jetzt auf einer anderen Konsole laufen soll.
Wie wird das z.B. bei Linux oder bei Tyndur gemacht?
16
Lowlevel-Coding / Frage zu CDI-Cache
« am: 28. January 2015, 23:59 »
Ich habe mal ne Frage zum Cache, der in CDI implementiert ist.
Wieso wird dieser Cache vom Dateisystemtreiber angelegt und nicht von einem Gerätetreiber? Es wäre eigentlich logischer.
17
Lowlevel-Coding / Fehler in CDI-AHCI Treiber?
« am: 28. January 2015, 15:37 »
Kann es sein dass die ahci_request Funktion nicht funktioniert? Bei mir kommt nämlich kein Interrupt an und im PIC sind alle Interrupts aktiviert.
Vielleicht stimmt bei mir ja etwas nicht. Hier der Quellcode zu meinem OS: https://github.com/Gurgel100/Kernel/tree/develop
Ich hoffe ihr könnt mir helfen.
18
Lowlevel-Coding / CGA ändern der Adresse
« am: 27. January 2015, 13:13 »
Hallo,
um eine Konsole zu implementieren, welche 8 Terminals enthält habe ich mir gedacht ich nutze das Feature der Grafikkarte die Adresse zu ändern. Sobald ich aber die Adresse auf die Adresse 0xB9000 ändere steht nichts am Bildschirm, obwohl dort etwas stehen sollte.
Ich weiss nicht woran es liegt.
Ich hoffe ihr könnt mir helfen.
19
Lowlevel-Coding / FAT CDI-Treiber
« am: 23. January 2015, 13:06 »
Hallo,
ist jemand eigentlich dabei einen FAT32-Treiber für CDI zu schreiben? Sonst würde ich das mal in angriff nehmen.
20
Lowlevel-Coding / Benutzen von Debuggregistern
« am: 18. January 2015, 22:03 »
Hallo,
um meinen Kernelinternen-Debugger zu vervollständigen verwende ich die Debugregister der CPU um Breakpoints zu setzten. Aber sobald ich einen Breakpoint gesetzt habe bleibt die CPU einfach hängen und es passiert einfach nichts mehr. Nicht mal mehr Interrupts werden durchgelassen.
Kennt sich jemand mit Debugregistern aus und/oder kann mir einer helfen wie man das richtig macht?
Ich es sehr.
Seiten: [1] 2 3 4

Einloggen