ref: bde44feca3fd7d9bf18732e478e379c39705efdd
author: mkf <mkf@cloud9p.org>
date: Thu Nov 9 05:15:15 EST 2023
import sources
--- /dev/null
+++ b/.gitignore
@@ -1,0 +1,2 @@
+*.o
+*.elf
--- /dev/null
+++ b/Makefile
@@ -1,0 +1,32 @@
+# teppich
+
+CC=i686-linux-gnu-gcc-11
+LD=i686-linux-gnu-ld.bfd
+AS=i686-linux-gnu-as
+
+CFLAGS=-O0 -g -nostdinc -I./include/ -ffreestanding
+ASFLAGS=-g
+LDFLAGS=-T linker.ld
+
+QEMU=qemu-system-i386
+QFLAGS=-kernel teppich.elf -m 16M -serial stdio
+
+K= \
+ pc/kern.o\
+ pc/boot.o\
+
+all: teppich.elf
+
+%.o: %.c %.h
+ $(CC) $(CFLAGS) -c $< -o $@
+%.o: %.s
+ $(AS) $(ASFLAGS) $< -o $@
+
+teppich.elf: ${K}
+ $(LD) $(LDFLAGS) -o $@ ${K}
+
+clean:
+ rm -f *.o *.elf ${K}
+
+qemu: teppich.elf
+ $(QEMU) $(QFLAGS) teppich.elf
\ No newline at end of file
--- /dev/null
+++ b/linker.ld
@@ -1,0 +1,43 @@
+/* The bootloader will look at this image and start execution at the symbol
+ designated as the entry point. */
+ENTRY(_start)
+
+/* Tell where the various sections of the object files will be put in the final
+ kernel image. */
+SECTIONS
+{
+ /* Begin putting sections at 1 MiB, a conventional place for kernels to be
+ loaded at by the bootloader. */
+ . = 1M;
+
+ /* First put the multiboot header, as it is required to be put very early
+ early in the image or the bootloader won't recognize the file format.
+ Next we'll put the .text section. */
+ .text BLOCK(4K) : ALIGN(4K)
+ {
+ *(.multiboot)
+ *(.text)
+ }
+
+ /* Read-only data. */
+ .rodata BLOCK(4K) : ALIGN(4K)
+ {
+ *(.rodata)
+ }
+
+ /* Read-write data (initialized) */
+ .data BLOCK(4K) : ALIGN(4K)
+ {
+ *(.data)
+ }
+
+ /* Read-write data (uninitialized) and stack */
+ .bss BLOCK(4K) : ALIGN(4K)
+ {
+ *(COMMON)
+ *(.bss)
+ }
+
+ /* The compiler may produce other sections, by default it will put them in
+ a segment with the same name. Simply add stuff here as needed. */
+}