diff --git a/kernel/Makefile b/kernel/Makefile index 703e179..39644b4 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,14 +1,16 @@ KERNEL = hos -LOAD_ADDRESS = 0x100000 -LDTARGET = elf32-i386 -LDFLAGS = -Ttext $(LOAD_ADDRESS) --oformat $(LDTARGET) +LDFLAGS = -T link.ld .PHONY: clean -all: +all: $(KERNEL) + +$(KERNEL): boot.o + ld $(LDFLAGS) -o $@ $< + +boot.o: boot.asm nasm -f elf -o boot.o boot.asm - ld $(LDFLAGS) -o $(KERNEL) boot.o clean: -rm -f *~ $(KERNEL) *.o diff --git a/kernel/boot.asm b/kernel/boot.asm index 71617c3..833570a 100644 --- a/kernel/boot.asm +++ b/kernel/boot.asm @@ -3,9 +3,7 @@ %define MULTIBOOT_HEADER_FLAGS 0x3 [global start] -[global _start] start: -_start: jmp multiboot_entry align 4 diff --git a/kernel/link.ld b/kernel/link.ld new file mode 100644 index 0000000..8550ce2 --- /dev/null +++ b/kernel/link.ld @@ -0,0 +1,24 @@ +ENTRY(start) +SECTIONS +{ + .text 0x00100000 : { + code = .; _code = .; __code = .; + *(.text) + } + .gnulinkonce : { + *(.gnu.linkonce*) + . = ALIGN(4096); + } + .data : { + data = .; _data = .; __data = .; + *(.data) + *(.rodata) + . = ALIGN(4096); + } + .bss : { + bss = .; _bss = .; __bss = .; + *(.bss) + . = ALIGN(4096); + } + end = .; _end = .; __end = .; +}