wm: teppich

Download patch

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. */
+}