Asoooooooo, jo denn. Also es geht um meinen Kernel. Der ist ja eine ELF32 (mit 32 Bit und 64 Bit Code). Den 64 Bit Code bringe ich mit USE64 in fasm zum laufen. Die Page Tables und den Kernel-Stack habe ich in die Section .bss verfrachtet. So sieht das dann aus:
section '.bss'
kstack: times 4000h db 0
PML4: times 512*8 db 0
;usw.
KernelEnd: ;das Ende des Kernels (oben steht KernelStart, die beiden brauche ich um die Speichergröße zu berechnen, damit ich nacher in der Speicherverwaltung den Speicher als belegt markieren kann).
Die linker.ld sieht so aus:
ENTRY (_start)
SECTIONS{
. = 0x00100000;
.text :{
*(.text)
}
.text64 ALIGN (0x1000) : {
*(.test64)
}
.rodata ALIGN (0x1000) : {
*(.rodata)
}
.data ALIGN (0x1000) : {
*(.data)
}
.bss ALIGN (0x1000) : {
_sbss = .;
*(COMMON)
*(.bss)
_ebss = .;
}
}
Wenn ich ehrlich bin habe ich den Script nur zusammenkopiert, da es mit schwer fehlt die Syntax zu verstehen. Evtl. ist da ja was falsch.
Jo linken tu ich dann mit: ld -m elf_i386 -T linker.ld -o kernel loader.o kernel.o
-m ist nötig, damit er auch eine ELF32 macht und keine ELF64. Dann sagt ld halt immer:
warning: section `.bss' type changed to PROGBITS
Tja und ich habe keine Ahnung wieso. Hoffentlich könnt ihr mir helfen. Habe schon versucht hinter dem Section '.bss' ein readable und writeable zu schreiben, hat aber auch nichts gebracht.
vielen dank!!!