Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: woigl am 16. August 2005, 22:15
-
Der Kernel von TeeJay in C funktioniert mal einwandfrei.
Man kann auch Funktionen deklarieren und aus der Main() aufrufen.
Jedoch wenn ich Funktionen in einem separatem Object File deklariere und mittel Header File als EXTERN kennzeichne dann funktioniert es bei BOCHS auber nicht wenn ich es richtig boote. Das resultat ist das er rebootet beim zugriff auf dazugelinke Object Files.
Kann das am linker Skript liegen? Momentan verwende ich dieses von TeeJay's Tutorial.
Bitte um Hilfe da ich bei diesem Problem echt hänge.
-
Moin
Hast du den Funktionsnamen im C Code ohne führenden _ geschrieben?
besitzt der Funktionaname im ASM Code diesen _ ?
-
Moin
Hast du den Funktionsnamen im C Code ohne führenden _ geschrieben?
besitzt der Funktionaname im ASM Code diesen _ ?
nun die main hat diesen Funktionsnamen _main(), aber die Funktion die ich aus der Main aufrufe hat diesen Unterstrich nicht.
Zur Info moechte ich noch sagen das sich die Funktion die ich aus der Main aufrufe sich in einem anderen Object File befindet welches ich mit C und nicht mit ASM geschrieben habe.
-
Also so langsam frage ich mich, ob du nicht eine andere Version von gcc/binutils ausprobieren solltest ...
-
Also so langsam frage ich mich, ob du nicht eine andere Version von gcc/binutils ausprobieren solltest ...
ich verwende CENTOS 3 - sollte schon passen! kann aber später mal versuchen es auf RedHat 9 zu kompilieren...
-
Nun es geht auch nicht mit anderen Linux Kernel...
Also mal mein MemoryMap des Linkers:
ld -s -x -M -T link_kernel.txt -o ./bin/kernel32.bin ./bin/kernel32asm.o ./bin/kernel.o ./bin/crt.o
Memory Configuration
Name Origin Length Attributes
*default* 0x00000000 0xffffffff
Linker script and memory map
0x00010200 phys = 0x10200
.text 0x00010200 0xe00 load address 0x00010200
0x00010200 code = .
*(.text)
.text 0x00010200 0x8 ./bin/kernel32asm.o
0x00010200 start
.text 0x00010208 0x2f ./bin/kernel.o
0x00010208 _main
*fill* 0x00010237 0x1 00
.text 0x00010238 0x1 ./bin/crt.o
0x00010238 _init_video
0x00011000 . = ALIGN (0x1000)
*fill* 0x00010239 0xdc7 00
.data 0x00011000 0x0 load address 0x00011000
0x00011000 data = .
*(.data)
0x00011000 . = ALIGN (0x1000)
.bss 0x00011000 0x0 load address 0x00011000
0x00011000 bss = .
*(.bss)
0x00011000 . = ALIGN (0x1000)
0x00011000 end = .
LOAD ./bin/kernel32asm.o
LOAD ./bin/kernel.o
LOAD ./bin/crt.o
OUTPUT(./bin/kernel32.bin binary)
.rodata.str1.32
0x00011000 0x2c
.rodata.str1.32
0x00011000 0x2c ./bin/kernel.o
.note.GNU-stack
0x00000000 0x0
.comment 0x00000000 0x68
.comment 0x00000000 0x34 ./bin/kernel.o
.comment 0x00000034 0x34 ./bin/crt.o
kann jemand dmait was anfangen?? bzw. laeuft da was falsch?