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.


Nachrichten - rizor

Seiten: 1 [2] 3 4 ... 27
21
Lowlevel-Coding / Relocatable ELF
« am: 14. September 2012, 07:51 »
Hi zusammen,

ich bastel mir gerade einen ELF-Loader, der relocatable ELFs behandeln soll.
Irgendwie scheint sich die Section-Header-String-Table aber anders zusammen zu setzen, als bei normalen ELFs.
Der Section-Name-Index lässt sich in der Shstrtbl nicht finden.
Muss ich für solche Fälle woanders nachschauen?

Grüße,
rizor
22
Softwareentwicklung / Grub unter CentOS
« am: 21. August 2012, 22:53 »
Hi zusammen,

ich habe mal meine Entwicklungsumgebung geändert und irgendwie funktioniert mein Floppy-Skript nicht mehr,
seitdem ich CentOS verwende.

Hier das Skript:
#generate the image
dd of=$Image bs=1024 seek=1440 count=0
mkdosfs $Image

#copy the image
mkdir -p /mnt/floppy
mount -oloop $Image /mnt/floppy
mkdir -p /mnt/floppy/grub
cp $Grub/stage* /mnt/floppy/grub/
cp $Kernel /mnt/floppy/
#generate menu.lst
sed -e "s/%%KERNEL%%/Kernel/" Scripts/Grub/GrubV1.lst.in > /mnt/floppy/grub/menu.lst
umount /mnt/floppy

#install grub
grub --batch --no-floppy <<EOT 1>/dev/null || exit 1
device (fd0) $Image
install (fd0)/grub/stage1 (fd0) (fd0)/grub/stage2 p (fd0)/grub/menu.lst
quit
EOT

Es ist nicht möglich eine bootfähige Floppy zu erstellen.
Wenn ich das Skript von Hand abarbeite, bekomme ich bei dem `install`-Befehl den Error 21: Selected disk does not exist

Hat einer von euch Erfahrung mit CentOS?

rizor
23
Lowlevel-Coding / Re: div64
« am: 21. August 2012, 21:48 »
Stimmt... Danke. Hatte ich nicht bedacht.
Jetzt klappt es, nachdem ich den ASM-Compiler überschrieben habe.
24
Lowlevel-Coding / Re: div64
« am: 21. August 2012, 21:24 »
Ich verwende AS von CentOS.
Der scheint aber recht komisch konfiguriert zu sein, da er keine normalen Flags akzeptiert.
Mein ganzes Build-System wird in dem Fall von CMake aufgesetzt.
Also kann es auch daran liegen.

Hier die Flags:
/usr/bin/as  -Wall -Wextra -ansi -pedantic-errors -Wconversion -Wmissing-braces -Wswitch -Wno-long-long -fno-builtin -fvisibility=hidden -fPIC -O0 -g -m32
25
Lowlevel-Coding / div64
« am: 21. August 2012, 17:13 »
Hi zusammen,

ich habe ein Problem mit meiner Assembler-Funktion zur Division einer 64-bit Zahl.

Hier der Code:
__asm__ volatile("div %%ecx"
                 "xchg %%ebx, %%eax;"
                 "div %%ecx;"
                 "xchg %%edx, %%ebx;" : "=a"(quot), "=b"(rem)
                                      : "a"(high), "b"(low),
                                        "c"(base), "d"(0));

Als Fehlermeldung bekomme ich ein "invalid register constraint".
Hatte gesehen, dass in Tyndur dann =A verwendet wird.
Da bekomme ich aber die Meldung, dass er das Register nicht in BREG finden kann.
Übersehe ich da was, oder ist mein GCC komisch eingestellt?

rizor
26
Softwareentwicklung / Re: Archiv in Datei linken
« am: 18. August 2012, 15:49 »
Habe ich jetzt auch gemacht.
Bei drei kleineren Modulen dauert der Linkvorgang schon ca. 5 Minuten.
Mit einem Object-File ist es viel schneller.
27
Softwareentwicklung / Re: Archiv in Datei linken
« am: 17. August 2012, 11:59 »
Naja, wenn man von vorn herein auf Plattformunabhängigkeit setzt, dann sollte man sich ja nicht auf den Bootloader verlassen.
Außerdem soll es ein System werden, das an sich nichts kann und dann nur durch die Module mit Leben gefüllt wird.
Genau genommen besteht der Kernel nur aus Modulen.
Und da es zu so frühen Stadien keine HDD-Treiber etc. gibt, kommt das alles in die initrd.
28
Softwareentwicklung / Re: Archiv in Datei linken
« am: 17. August 2012, 10:29 »
Stimmt, das könnte auch noch funktionieren.
Ich möchte das so machen, damit ich unabhängig vom Bootloader bin.
29
Softwareentwicklung / Re: Archiv in Datei linken
« am: 16. August 2012, 13:34 »
Ja, sowas in der Art.
Habe das jetzt durch ein eingebettetes Linker-Skript gemacht.
Ein Skript wandelt das Tar in ein Skript um, dass in den Linker eingebunden wird.
Für die erste Version ist das i.O., auch wenn er etwas lange baut.

Wenn es dann mal komplexer wird, wird das dann auch anders gemacht.
30
Softwareentwicklung / Re: Archiv in Datei linken
« am: 16. August 2012, 12:05 »
Das Problem daran ist, dass er die Datei nicht beachtet, da er mit dem Dateiformat nichts anfangen kann.
Es ist ein TAR.
31
Softwareentwicklung / Archiv in Datei linken
« am: 15. August 2012, 14:31 »
Hallo zusammen,

endlich finde ich mal wieder Zeit an meinem Kernel zu arbeiten.
Wie kann ich eine beliebige Datei in eine Sektion meines Kernels linken?
Ich weiß, dass das mit dem NASM geht, aber den möchte ich nicht verwenden.

Grüße,
rizor
32
Lowlevel-Coding / Re: APIC FIFO size
« am: 30. April 2012, 12:43 »
Interrupts werden nicht der Reihenfolge nach abgearbeitet.
Bei Emulatoren vermutlich schon, aber ich bezweifel, dass die reale Hardware das garantiert.
Interrupts werden entsprechend ihres Levels abgearbeitet.

Du brauchst dafür keinen Grub-Code. Der macht viel zu viel Zeug.
Bau dir einfach kleinen Code, der sofort in den PM springt und dann den Scheduler anspringt oder auf einen Interrupt wartet.
Dann ist alles auch schon fertig.
Der Code muss halt nur gegen Adressen unterhalb der 1MB-Grenze gelinkt werden und dann vom Kernel auch an die entsprechende Stelle geladen werden.
33
Lowlevel-Coding / Re: APIC FIFO size
« am: 30. April 2012, 10:43 »
Wenn ich das richtig deute, sind das keine echten Queues.
Sondern es kann passieren, dass wenn du in einem Interrupt-Handler einen STI machst, dass der selber Handler dann nochmal von der CPU aufgerufen werden kann (nested interrupts).
Mit der Einführung von Priority-Levels ändert sich das Konzept auch nicht großartig, außer dass das Ganze durch verschiedene Levels definiert werden kann.

Aber ein Software-Interrupt wird da mit Sicherheit nicht eingetragen.
Wieso solltest du im Kernel-Space einen Software-Interrupt machen?
Bei einem User-Space-Handler sind die Interrupts meistens aktiv und somit funktionieren dann auch wieder Software-Interrupts, die nicht gequeued werden müssen.
34
OS-Design / Re: Monotholitisher Kernel oder Microkernel
« am: 02. April 2012, 22:06 »
micromonolithische Modularhybrid
Interressant... das scheint ein toller mix zu sein :wink:

Klingt auf jeden Fall nach einer sehr geilen und einheitlichen API.
Wenn du einen Kernelspace-Treiber ohne Probleme in den Userspace ziehen kannst :D
35
OS-Design / Re: Monotholitisher Kernel oder Microkernel
« am: 01. April 2012, 00:37 »
Was taljeth mit kaputter Kernel meint? Seine eigenen Projekte?
tyndur natürlich :wink:

Immer schön in die Nierengegend ;)
36
Der Fehler ist komisch, aber nimm besser mal das goto raus. Du hast den Punkt nirgendwo definiert und hlt; stoppt die CPU.
37
Softwareentwicklung / Re: Dokumentation
« am: 16. March 2012, 20:35 »
Source-Code-Dokumentation? Falls ja, dann nimm Doxygen.
Ansonsten Plain-ASCII-Texte
38
Lowlevel-Coding / Re: Paging und Multitasking
« am: 16. March 2012, 08:42 »
Wenn dein Ring-3 Task Schreibzugriff im Kernel braucht, ist das definitiv nicht gut. Sowas sollte über Syscalls gelöst werden.
Ist denn dein TSS richtig gesetzt?
39
Lowlevel-Coding / Re: Paging und Multitasking
« am: 15. March 2012, 18:30 »
Also es gibt neues: Das mit dem Pagefault konnte ich beheben. Es war noch ein Fehler bezüglich des Kontextwechsels im Code. Die 2 Stacks (Userstack und Interruptstack) der Tasks werden nun nur für den jeweiligen Task (NICHT für den Kernel) gemappt. Ist das in Ordnung oder muss der Kernel Zugriff auf den Interruptstack haben?

Der hat da auch so Zugriff drauf. Der Kernel darf alles machen.
Es bleibt halt zu überlegen, ob der User Zugriff auf den Stack haben sollte. Aber das ist mehr eine sicherheitsrelevante Frage.

So weit, so gut, jetzt habe ich ein neues Problem: Ich bekomme einen General Protection Fault bei iret, bevor mein Task aufgerufen wird (Speicherkontext ist zu diesem Zeitpunkt schon gewechselt). Woran könnte das liegen (mein Interrupthandler (insbesondere der Assemblerteil) sieht im Wesentlichen so aus, wie der im Tutorial)?

Lässt sich nicht pauschal beantworten, aber ich würde mal vermuten, dass es daran liegt, dass du die Segment-Register nicht richtig setzt.
40
Lowlevel-Coding / Re: Paging und Multitasking
« am: 07. March 2012, 23:36 »
Hm, mir ist schon klar, warum der Kernel und die verschiedenen Tasks je einen egenen Stack haben sollten, aber warum braucht ein Task nach dem Tutorial von hier zwei Stacks (User Stack und Stack)?
Das liegt daran, dass einmal der User-Thread einen Stack braucht und dann der Kernel, wenn er einen Interrupt behandeln muss.
Auf den Stack des Kernels werden dann die Register des Tasks gelegt.

Würde nicht einer reichen?
Nein, denn sonst könnte ein Thread den CPU-Frame eines anderen Threads verändern. Das darf nicht passieren.

Wenn ich schon beide brauche, für wen müssen diese jeweils gemappt sein?
Einer sollte für den User-Tasks RW gemappt sein (aber NICHT executable) und der andere sollte RW gemappt für den Kernel sein.

Und ich hätte noch eine andere Frage. Wie kann ich möglichst einfach herausfinden, welche Codestelle zu einer bestimmten Adresse, die der Instruction Pointer beinhaltet, gehört? Welche Tools gibt es hierfür?
objdump bewirkt da Wunder. Da kannst du dann nach der Adresse suchen. Es gibt auch ein Flag für objdump, das dir den dazugehörigen C-Code zeigt. Fällt mir aber grad nicht ein.

Sorry, falls meine vielen Fragen etwas nervig sein sollten, aber ich verzweifle echt an diesem Multitasking...
Dafür brauchst du dich nicht entschuldigen, denn wie willst du es sonst lernen ;)

Grüße,
rizor
Seiten: 1 [2] 3 4 ... 27

Einloggen