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] 4 5 6
41
Lowlevel-Coding / Re: Problem beim Linken vom C++ Kernel
« am: 10. October 2008, 21:11 »
Zitat
extern "c" void int00();
Geht nicht, er meckert folgendes:
language string '"c"' not recognized
Zitat
oder im asm die labels nach C++-Standard benennen
wie macht man das?
42
Lowlevel-Coding / Re: Problem beim Linken vom C++ Kernel
« am: 10. October 2008, 17:43 »
Ich sehe schon, dass es mit C/C++ auch nicht ganz so einfach ist.
Jetzt hab die IDT in c realisiert, jedoch hab ich da noch ein Problem mit globalen Funktionen.
Ich hab eine Test Funktion in asm geschrieben:
global  int00

...

int00:
iret
und in der cpp Datei auch deklariere
extern void int00();und mit (unsigned int) int00 verwende ich das.
Und im Linkscript hab ich auch
ENTRY(int00)hinzugefügt (ich weis nicht, ob das erforderlich ist)

aber der Linker prangert folgendes an: undefined reference to '__Z5int00v'Wo muss ich den alles die Funktion hinschreiben

Wie muss ich das den richtig machen.
43
Lowlevel-Coding / Re: Problem beim Linken vom C++ Kernel
« am: 07. October 2008, 18:47 »
Ich weis nicht genau, was ‘Stub‘ ist, aber ich schätze du meinst dass:
Int_xy:
call funktion  ;funktion ist eine c Funktion
        iret
OK, das kann man machen. Darauf bin ich eigentlich auch gekommen, aber ich hab mir gedacht, dass es Vielleich eine andere Möglichkeit dazu gibt, weil für den Compiler das keine große Schwierigkeit sein sollte.
44
Lowlevel-Coding / Re: Problem beim Linken vom C++ Kernel
« am: 07. October 2008, 17:31 »
Ja hab den Fehler gefunden, hab vergessen Die Funktionen in die Klasse einzubinden (Klasse::Funktion).
Danke.
Ich wüsste gern noch etwas anderes gibt es eine Möglichkeit, dass eine C/C++ Funktion zwingen kann mit IRET statt RET zurückspringt, dass ganze währe für Interrupts sehr nützlich. Vielleicht gibt es ja eine Möglichkeit.
45
Lowlevel-Coding / Problem beim Linken vom C++ Kernel
« am: 07. October 2008, 13:04 »
Ich wollte ein C++ Kernel zum laufen bringen, doch mit dieser Fehlermeldung kann ich nicht richtig deuten, weil ich mich mit dem Linken nicht so auskenne.

Die Fehlermeldung:
ld -T Link.ld -o Kernel.bin
Video.o:Video.cpp:(.text+0x294): undefined reference to `__ZN6CVideo6memcpyEPvPKvj'
Video.o:Video.cpp:(.text+0x2ce): undefined reference to `__ZN6CVideo6memsetEPvij'
Video.o:Video.cpp:(.text+0x309): undefined reference to `__ZN6CVideo6memsetEPvij'
Die Datei Link.ld:
/*Link.ld*/
OUTPUT_FORMAT("binary")
INPUT (kernel32.obj Kernel.o Video.o)
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 = .;
}
Die anderen Dateien sind die aus dem c++ Kernel Tutorial.
46
Lowlevel-Coding / Re: Merkwürdiger c Fehler
« am: 06. October 2008, 14:18 »
OK
ich denke, ich lasse das ersteinmal so, weil ich dann genau weis, dass der
c Kernel dort ist, womit der c Kernel leicht verschoben werden kann.
Außerdem soll doch der gcc mit gemischten 16 und 32 Bit Code nicht so zu recht kommen, soviel ich weis.
47
Lowlevel-Coding / Re: Merkwürdiger c Fehler
« am: 05. October 2008, 16:54 »
Also ich zeig einfach mal meine Batch Datei und den Link Script.

nasm -f bin -o boot_1.bin boot_1.asm
nasm -f bin -o h_os_1_1.bin h_os_1_1.asm
nasm -f aout -o kernel32.obj kernel32.asm

gcc -ffreestanding -c -Wall -o ckernel.obj kernel.c

ld -T link.txt -o c32kernel.bin

copy /y/b/v boot_1.bin + h_os_1_1.bin + c32kernel.bin d:\Programme\Bochs-2.3.5\h_os\h_os_1.img

cd ..
d:
cd d:\Programme\Bochs-2.3.5\h_os
..\bochsdbg.exe -q -f bochsrc.bxrc

OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x10200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}
48
OS-Design / Re: Was gibt es alles im LongMode nicht mehr?
« am: 05. October 2008, 16:39 »
OK. Das ist dann soweit klar.
Danke  :-)
49
Lowlevel-Coding / Re: Merkwürdiger c Fehler
« am: 05. October 2008, 16:15 »
Das mit dem Breakpoint funktioniert mit dem genannten. :-)

Mit dem anderren, da hab ich den Teil, der den ProtectMode Einschaltet, auf eine konstante länge gesetzt (mit times …) und diese länge, dann im Link Script aufaddiert.
jmp PMODE3

times 0x200-($-$$) db 0
PMODE3:

.text  0x10200 : {
50
OS-Design / Re: Was gibt es alles im LongMode nicht mehr?
« am: 05. October 2008, 16:03 »
Zitat
Als einzige Ausnahme lasse ich mal die VESA BIOS Extensions gelten.
Genau die meine ich, ich hätte mich wohl besser ausdrücken sollen, also kann man das noch benutzen? (ist mir jetzt noch immer nicht so klar)
51
OS-Design / Was gibt es alles im LongMode nicht mehr?
« am: 05. October 2008, 15:05 »
Ich weis, dass es Hardware Multitasking nicht mehr gibt, auch den Virtual 8086 Mode soll es nicht mehr geben, können jetzt BIOS Funktionen noch irgendwie benutzt werden?
Und welche Sachen gibt es außerdem nicht mehr?
52
Lowlevel-Coding / Re: Merkwürdiger c Fehler
« am: 05. October 2008, 13:21 »
OK er Optimiert das dann tatsächlich weg.
Und weiter liegt es an der Adresse, die gelinkt worden ist (der teil, wo der ProtectMode eingeschaltet wird), was mich nur Wundert, da der Rest Funktionierte.
Eine Frage hab ich noch wie kann ich bei Bochs einen Break Point auf z.B. Adresse (Im ProtectMode) 0x8:0x10000  so hab ich das schon ausprobiert :
vb 0x8:0x10000   oder b 0x10000.
53
Lowlevel-Coding / Merkwürdiger c Fehler
« am: 04. October 2008, 14:02 »
Ich wollte den c Kernel weiter versuchen, das laden und linken funktioniert auch, aber er zeigt zwar etwas an, aber anderer Zeichen, mit einer anderen Länge.  Wenn ich jetzt statt der Schleife  n mal den Inhalt der Schleife stehen habe funktioniert es. Somit kann dass ja irgend wie kein Falscher Zeiger sein, sondern das weis ich ja nicht. Ich hoffe jemand hat eine Idee woran das liegen könnte.
So erstelle ich das (nur ein Teile)
gcc -ffreestanding -c -Os -Wall -o ckernel.obj kernel.c

Hier ist der Code:
int main()
{
int i=0;
char *Text = "Das ist ein Test"; 
char *Video = (char*)0xB8000; 

while(*Text) 

*Video++ = *Text;
*Video++ = 7;
Text++;
i++;
}
return i; //nur zur Überprüfung
}
54
Lowlevel-Coding / Frage zu assembler und c
« am: 03. February 2007, 15:59 »
Ich hab ein paar Frage in Bezug auf c (gcc) und assembler.
Unterstützt der gcc auch 16Bit Code? Ich hab nämlich Labels und Makros, die ich für 16Bit und 32Bit brauche also mit *.obj und extern und global. :?
Andre Frage was ist „return a;“ in assembler Code (ret)? :?
Und wo gibt man c bei einem Funktionsaufruf  die Parameter mit? :?
55
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 20. January 2007, 11:56 »
Jedenfalls gibt er mir beim Linken, wenn ich das so umändere, eine Fehlermeldung:
kernel32.obj:kernel32.obj:(.text+0x4): relocation truncated to fit: 16 against '_main'
56
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 19. January 2007, 19:20 »
Das mit der Funktion funktioniert jetzt  :-) und mit der anderen Sache weis ich ja nicht ob das so ausreicht? :?
57
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 19. January 2007, 16:06 »
Ja oben hab ich eine null zu viel. Und die Funktion geht immer noch nicht Fehlermeldung:
E:\djgpp\tem\ccHDZZXh.s: Assembler messages:
E:\djgpp\tem\ccHDZZXh.s:54: Error: suffix or operands invalid for ‚in’

58
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 19. January 2007, 14:21 »
Ich kann ja mal die txt zeigen, welche Ld aufruft. Ich weis die meisten Befehl für den Liker nicht deswegen könnte es sein das da ein oder mehrere Fehler ist oder sind. Damit meine ich besonders (.text  0x200) aber als ich das nach .text  0x10000 funktionierte es aber nicht. Und Funktionen lassen sich richtig aufrufen.  :?

OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x200: {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}

Und dann noch eine Frage was ist hier dran Falsch:  :?
char inp(char Port)
{
char Daten;
asm("inb %0,%1":"=a"(Daten):"d"(Port));
return Daten;
}
59
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 16:45 »
Klapp super :-). Eine frage noch bei „in und out“ bei in ist das zweite ja wohl as Ziel „in $0x64, %al\n“ und bei Out? Wie ist das da?
Und wie kann ich C variablen mit asm kombinieren?
Int o; //z. B.
o = 20;
asm(
“mov o,%eax\n“);
60
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 16:27 »
Der gcc Compiler von GNU Version 2.
Seiten: 1 2 [3] 4 5 6

Einloggen