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 - Hauke

Seiten: [1] 2 3 ... 6
1
Lowlevel-Coding / Re: Booloader mit GRUB
« am: 07. September 2012, 18:48 »
Ja OK, das war noch was fehlte, danke.

/grub/menu.lst:
timeout 0
title OS-Name
kernel /kernel.bin
boot
2
Lowlevel-Coding / Re: Booloader mit GRUB
« am: 06. September 2012, 17:57 »
Wenn ich
kernel /kernel.bin
boot
im grub-Menü aufrufe
wird der Kernel gestartet.

Ist zwar noch nicht ganz wie es soll, aber wenigstens geht das dann doch.
3
Lowlevel-Coding / Re: Booloader mit GRUB
« am: 06. September 2012, 15:46 »
So gefunden wurde es hier:
  • /usr/lib/grub/i386-pc/stage1
  • /usr/lib/grub/i386-pc/stage2
  • /boot/boot/grub/stage1
  • /boot/boot/grub/stage2
Und in der Skriptdatei habe ich es auf 3. und 4. geändert.
Und anstelle von kernel muss doch kernel.bin kopiert werden.

Hier weiß ich nicht, ob das alles OK ist:
grub> device (fd0) floppy.img

grub> root (fd0)

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/fat_stage1_5" exists... no
 Running "install /grub/stage1 (fd0) /grub/stage2 p /grub/menu.lst "... succeed
ed
Done.

Der Inhalt des Image sieht so aus:
grub
   stage1
   stage2
kernel.bin

z.B. fehlt menu.lst
Bootbar ist das Medium nur es wird grub anstelle des Kernels gestartet.
4
Lowlevel-Coding / Booloader mit GRUB
« am: 06. September 2012, 12:22 »
Hallo

Ich wollte endlich mal GRUB, anstelle meins minimalistischen Bootloaders verwenden.

Ich weiß nicht, ob GRUB legacy richtig installiert ist.
Grub wird schon einmal gestartet und die befehle danach auch, nur /boot/grub/section1  oder /boot/grub/section2 gibt es nicht, was das Hauptproblem ist.
Hier (http://wiki.ubuntuusers.de/GRUB) steht auch , dass ab Ubuntu 9.10 die hier beschriebene GRUB legacy nicht mehr benutz wird.  (Ubuntu 12 habe ich installiert)
Ich kenne mich mit GRUB nur oberflächig aus.

Hier einmal installierte Pakete, die mit dem Suchbegriff „grub“ in verbinden stehen.
PaketInstallierte Versionneuste VersionBeschreibung
grub0.97-29ubuntu66   0.97-29ubuntu66    GRand Unified Bootloader (alte Variante)
grub-common1.99-21 ubuntu3.1   1.99-21 ubuntu3.1   GRand Unified Bootloader (common files)
grub-legacy-doc0.97-29ubuntu66   0.97-29ubuntu66   Dokumentation für GRUB (alte Version)
grub-pc-bin1.99-21 ubuntu3.1   1.99-21 ubuntu3.1   GRand Unified Bootloader, version 2 (PC/BIOS binaries)

Zur Sicherheit schicke hier noch mal die Konsolenausgabe und kurzes Shell skript nach http://www.lowlevel.eu/wiki/GRUB#Linux

0+0 Datensätze ein
0+0 Datensätze aus
0 Bytes (0 B) kopiert, 2,1922e-05 s, 0,0 kB/s
mkdosfs 3.0.12 (29 Oct 2011)
cp: Aufruf von stat für »/boot/grub/stage*“ nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für »kernel“ nicht möglich: Datei oder Verzeichnis nicht gefunden

#!/bin/sh
clear
nasm -f elf -o kernel_asm.o kernel.asm
gcc -m32 -ffreestanding -o kernel_c.o -c kernel.c -Wall -Werror -nostdinc
ld -T link.ld -o kernel.bin kernel_asm.o kernel_c.o

dd of=floppy.img bs=1024 seek=1440 count=0
mkdosfs floppy.img

sudo mount -oloop floppy.img /mnt
sudo mkdir /mnt/grub
sudo cp /boot/grub/stage* /mnt/grub
sudo cp kernel /mnt
sudo umount /mnt

Und die Ausgabe von GRUB
grub> device (fd0) floppy.img

grub> root (fd0)

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 15: File not found

Im Netz und im Forum habe ich dazu nichts nützliches finden können.
5
Lowlevel-Coding / Re: Paging und Speichermanagment
« am: 06. May 2010, 11:20 »
OK Anders geht das wohl nicht. Gut. :-)

Das daraus folgende Problem hab ich glaub ich selbst gelöst.

Wie ich das mache, damit der Kernel und der Adressraum für das jeweilige Programm nicht im Weg stehen.
Ich lasse das Programm der jeweiligen Tasks im virtuellen Adressraum über den Kernel Adressen anfangen.
6
Lowlevel-Coding / Re: Paging und Speichermanagment
« am: 03. May 2010, 16:30 »
Wenn die (oder das) Pagedirectory vor dem iret sich ändert, sind das ungültige Werte, das ist ja mein Theoretisches (gedankliches) Problem, das nach dem iret erst darauf bezogen werden soll. Oder wie soll das sonst gehen?
7
Lowlevel-Coding / Re: Paging und Speichermanagment
« am: 03. May 2010, 12:25 »
Also wenn ich jetzt z. B. diese letzten Befehle Software Multitasking habe
mov cr3, eax
no_mult_task:

mov al, 0x20 ;EOI-Wert in AL ablegen
out 0x20, al ;EOI an Master-PIC senden

pop edi
pop esi
pop ebx
pop eax
pop es
pop ds

sti
iret
dann wird doch nach dem ändern von cr3 alles ungültig sein ? :?
8
Lowlevel-Coding / Paging und Speichermanagment
« am: 30. April 2010, 14:39 »
Hallo

Ich hab ein paar Fragen zum Paging und Speichermanagment.

Ich hab hier erst einmal Aufgeschrieben, wie ich mir mein Speichermanagement vorstelle.

Jeder Task bekommt eine eigene PageDirektory. (Natürlich auch PageTabellen)  Eine PageDirektory und PageTabellen für das OS um auf gesamten Speicher zugreifen zu können. Eifachhalber mape ich das hier Linear (Virtuelle Adresse ist dann gleich = Physischer, VA == PA) bei jeder Speicherzuweisung (vom erstellen von Tasks oder ähnlichem), wird in die OS PD eingetragen(mit gemappt). (weis nicht, ob das, dass Beste ist, jedoch währes was anderes komplizierter, denke ich).

Ein Problem habe ich da auch noch, für Interups brauch ich ja ein Stack (für andere OS Dinge wohl auch), bei der PD  mit dem linear gemappten. Ich denke das ich das so gelöst habe, das ich an den Untersten Einträgen (höchsten Adressen) der PD den Stack einrichte, der aber nicht (linear gemapt ist, bekommt Speicherseiten zugewiesen. (Aber das OS brauch ja nicht so viel Platz für den Stack).

Jetzt zum wichtigen Teil meiner Frage:
Mein Software Multitasking muss ich noch umschreiben, damit es auch fürs Paging geht.
Ich hab ein bisschen im Forum gelesen, das beim neu Laden vom CR3 (PD) Register, die Adressierung sich nicht sofort ändert (wegen dem Cache). Wie bekomme ich das hin, dass das CR3 Register geladen wird und nach dem iret Befehl an der Richtigen Speicherstelle Ausgeführt wird?
Ich muss ja für den nächsten Task seine PD laden (CR3 Register).
Das weis ich nicht, wie da genau gehen soll.  :?
9
Lowlevel-Coding / Re: new Operator
« am: 11. February 2010, 14:23 »
OK Danke erst einmal,
ich muss jetzt mal schauen, wie ich das einbaue.
10
Lowlevel-Coding / new Operator
« am: 09. February 2010, 12:07 »
Hallo

Ich wollte mal fragen, wie man den new Operator (und delete wohl auch) implementieren kann (K* = new K(...)), der Linker (ld) hat mir schon gesagt, dass die funktion _Znwm implementiert werden muss. (also dass er die Funktion _Znwm nicht gefunden hat).
Das funktioniert ja denke ich mal ähnlich wie bei den Statischen Construktor.

extern void(*_CTOR_LIST__)();
void(**constructor)() = &_CTOR_LIST__;
int total = *(int*)constructor;
constructor++;
while(total != 0)
{
(*constructor)();
total--;
constructor++;
}

Aber, wie ich das genau machen muss, weis ich nicht.
11
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 15. September 2009, 16:44 »
OK das lag wirklich am falschen GDB.
Nur habe ich noch folgende Probleme:

Damit der gdb die gesamte Symboltabelle hat linke ich auch noch mit  OUTPUT_FORMAT(elf32-i386), die ich dann mit file … lade. Einzeln kann ich sie auch laden, nur die Objektdatein von NASM nicht. (siehe aufruf oben)
Reading symbols from kernel32.obj...(no debugging symbols found)...done.
Dann wird nicht bei einem Breakpoint auf z. B. auf die Main Funktion angehalten.
(gdb) file Kernel.bin
Reading symbols from Kernel.bin...done.
(gdb) break main
Breakpoint 1 at 0x108be: file Kernel.cpp, line 34.
Jedoch funktionier das wenn ich einen breakpoint auf eine direkte Adresse setze wie z. B.
(gdb) break 0x10200
Function "0x10200" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Ich denke das geht auch nur wie.  :?

Der veränderte Funktionsumfang, hat wohl, mit dem Modus zu tun, in dem der GDB läuft.
(gdb) run
The "remote" target does not support "run".  Try "help target" or "continue".
Der Qemu Monitor füllt diese Lücke ja wieder auf.
12
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 13. September 2009, 17:59 »
OK das geht jetzt wieder nur das mit dem gdb noch nicht welche Datei muss ich da denn jetzt angeben.
(gdb) file …
… Kernel.o": not in executable format: File format not recognized
Er gibt diese Fehlermeldung bei alle Dateien aus.

Was noch sein kann, dass GDB mit falschen Einstellungen gestartet wird. Hier die Präambel.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i386-pc-msdosdjgpp --target=djgpp"..."
13
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 12. September 2009, 18:46 »
Ich denke das liegt am Linker Scipt, die Funktionen müssen da nur anders heißen.
...
ENTRY(start)
SECTIONS
{
.text 0x10200 :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
__CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
*(.ctors) LONG(0) __CTOR_END__ = .;
__DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
*(.dtors) LONG(0) __DTOR_END__ = .;

data = .; _data = .; __data = .;
*(.data)
. = ALIGN(4096);
}

.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}

end = .; _end = .; __end = .;
}
Nur weis ich nicht genau in was ich das ändern muss (also wie das aussehen soll)
14
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 12. September 2009, 15:53 »
Mit selber schreiben sind wohl die Funktionen dso_handle, … gemeint nur im nicht ELF Format (also vorher) hat er die Funktionen gekannt, das ergibt für mich nicht so einen richtigen Sinn.  :?
15
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 12. September 2009, 15:12 »
OK ich hab das jetzt wieder so i586-elf-ld -T Link.ld -o Kernel.bin(wie ich das vorher hatte), nur der Fehler ist noch der gleiche. (natürlich ist der Parameter wohl nicht der Grund des Fehlers)
16
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 12. September 2009, 12:17 »
OK da ich ja das ELF Format brauche, hab ich das jetzt fast hinbekommen nur beim Linken noch nicht ganz.
Folgende Fehlermeldung hab ich noch. Dazu sei noch gesagt, dass ich das C++ Kernel  Tutorial benutzt habe.
i586-elf-ld -shared-ffreestanding -T Link.ld -o Kernel.bin
Kernel.o: In function `__static_initialization_and_destruction_0(int, int)':
Kernel.cpp:11: undefined reference to `___dso_handle'
Kernel.cpp:11: undefined reference to `___cxa_atexit'
Kernel.cpp:13: undefined reference to `___dso_handle'
Kernel.cpp:13: undefined reference to `___cxa_atexit'
Kernel.cpp:15: undefined reference to `___dso_handle'
Kernel.cpp:15: undefined reference to `___cxa_atexit'
 

Mit diesem Aufruf  ohne den Schaltern -fleading-underscore hatte ich ähnliche Fehlermeldungen nur. Das betraf (soweit ich das gesehen habe) C Funktionsaufrufe von Assembler aus.

Hier noch einmal Ausschnitte der Aufrufe der Objekt Dateien.
nasm -f elf -o kernel32.obj kernel32.asm
i586-elf-g++ -x  c++ -c Kernel.cpp -g -m32  -fleading-underscore -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions –Wall

Am an Anfang des Linker Scipts bin ich mir noch nicht sicher ob OUTPUT_FORMAT(elf32-i386) oder OUTPUT_FORMAT("binary") hinnein soll.
17
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 02. September 2009, 19:46 »
Zitat
IIRC must du deine "kernel.sys" angeben, nicht das Image.
Zitat
Was ist der "kernel.sys"
Also es gibt zwei Teile Bootloader ,Startteil des OS (PM usw.) und dann der C++ Teil der halt gelinkt. Dort sollten dann auch die Debuginformationen enthalten sein und wenn ich diesen Teil mit file … übergebe geht das auch nicht.

Ich weis ja nicht was genau gemeint ist.
18
Lowlevel-Coding / Re: c / c++ Debuggen
« am: 02. September 2009, 18:59 »
OK  erst einmal noch einmal zum Aufruf.
qemu -L .\ -fda h_os.img -m 32 -s -S (nur um noch mal sicher zu gehen)
Ich schätze er macht das dann auch was er tun soll.

und zum gdb aufruf:
(gdb) file h_os.img
..h_os.img": not in executable format: File format not recognized
Gibt er das aus.

Es ist mir klar was das bedeuten soll, nur wie mach ich das damit gdb das akzeptiert?
Und der andere Befehl geht auch nicht (liegt wohl daran dass der erste Befehl nicht geht)
(gdb)  target remote localhost:1234
localhost:1234: No such file or directory (ENOENT).
19
Lowlevel-Coding / c / c++ Debuggen
« am: 01. September 2009, 19:32 »
Ich suche eine möglichkeit besser zu debuggen sprich inerhalb von c / c++ Funktionen wie z. B. bei beim gdb mit exen möglich ist.
Ich hab gelesen, das dass in verbindung mit Qemu möglich ist, jedoch kenne ich mich mit Qemu nicht so richtig aus (ich benutze eigentlich bochs). Mit Qemumanger unter Windows ist das einfache starten ja nicht schwer nur wie der lokalen Server einrichtet wird weis ich nicht, nur dass ich irgendwie den –s Paramter hinneinbekommen muss.
Ein Konsolenbefehl, in dem ich –s hineingefügt habe sieht so aus, nur weis ich nicht wie ich merke, dass das funktioniert hat.
"D:\Programme\QemuManager\qemu\qemu.exe" -L "D:\Programme\QemuManager\qemu" -M "pc" -m 32 -cpu "qemu32" -vga cirrus -serial vc -parallel vc -name "h_os" -drivefile="D:\Programme\Bochs-2.3.7\h_os\h_os.img",index=0,if=floppy -boot a -soundhw es1370 -net nic,vlan=0,model=rtl8139 -net user,vlan=0  -vnc :1 -k de -usbdevice tablet -localtime
20
Lowlevel-Coding / Re: Ringwechsel und VM86
« am: 07. April 2009, 12:37 »
Ja der Int15h benutzt out.
Ich musste mein Multitasking für Taktwechsel und VM wechsel richtig einrichten. (hat leider etwas zu lange gedauert), jedenfalls geht was Herunterfahren nicht es wird nur ein Software Reset gemacht.  (sagt mir Bochs), aber der Rest funktioniert.

Deshalb nochmals vielen Dank.
 :-)
Seiten: [1] 2 3 ... 6

Einloggen