Hallo alle zusammen,
anhand des Tutorials im Wiki habe ich versucht einen kleinen Kernel in C zu schreiben. Das Hello World hat eigentlich noch ganz gut geklappt, aber als ich jetzt noch die kprintf Funktion implementiert habe streikt der Kernel.
Nach dem Kompilieren des Kernels bekomme ich beim Überprüfen mit mbchk folgende Meldung:
$ mbchk kernel
kernel: No Multiboot header.
Mein Multiboot Header ist der selbe wie aus dem Wiki:
.section .multiboot
#define MB_MAGIC 0x1badb002
#define MB_FLAGS 0x0
#define MB_CHECKSUM -(MB_MAGIC + MB_FLAGS)
.align 4
.int MB_MAGIC
.int MB_FLAGS
.int MB_CHECKSUM
.section .text
.extern init
.global _start
_start:
mov $kernel_stack, %esp
call init
jmp .
.section .bss
.space 8192
kernel_stack:
Das Makefile habe ich etwas abgeändert:
SRCS = $(shell find -name '*.[cS]')
OBJS = $(addsuffix .o,$(basename $(SRCS)))
CC = gcc
LD = ld
ASFLAGS = -m32
CFLAGS = -m32 -Wall -g -fno-stack-protector -nostdinc -I include -std=c99
LDFLAGS = -melf_i386 -Tkernel.ld --nmagic
kernel: $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^
%.o: %.S
$(CC) $(ASFLAGS) -c -o $@ $^
clean:
rm $(OBJS)
.PHONY: clean
Ich habe den C Standard auf c99 gesetzt und das ld Kommando um "--nmagic" erweitert weil ich in einem anderen Thread gelesen habe dass es etwas nützen soll was in meinem Fall leider auch nicht funktioniert hat.
Hat jemand noch eine Idee an was das liegen könnte?
Vielen Dank schonmal.
MfG
Loui