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

Seiten: [1]
1
Ich bin blöd -.-
Danke für die Lösung meines peinlichen Problems^^.
2
Ich habe auch das standard Linkerscript vom Tutorial verwendet:
http://www.lowlevel.eu/wiki/Teil_4_-_Hello_World

Die Binary werde ich zu Hause nochmal untersuchen.

Edit:
So ich hab mal nen objdump von dem Kernel gemacht:
http://pastie.org/private/jb9uc2xu8eztmjbeiljqa


in der init.c steht auch bloß das hier drin:
//#include "console.h"

void init(void)
{
    //kprintf("Hello World!\n...");
}

Leider kann ich nichts erkennen. Ich meine es fängt ja auch erst alles bei 0x100000 an so wie es im Linker Script steht. Gleich danach sollte er ja auch in die init Funktion springen - eigentlich^^.

Loui
3
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
Seiten: [1]

Einloggen