summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Halle <niklas@niklashalle.net>2020-04-28 11:50:23 +0200
committerNiklas Halle <niklas@niklashalle.net>2020-04-28 11:50:23 +0200
commit0cf88f665b00962e9fa93f0d52977c1437d034c9 (patch)
treee1fabd2009cd83d40ea34f5def8c7c8c7844b928
parentb917ccf417c2f6299ce69f87415f54a6a752018a (diff)
downloadbetriebssysteme-0cf88f665b00962e9fa93f0d52977c1437d034c9.tar.gz
betriebssysteme-0cf88f665b00962e9fa93f0d52977c1437d034c9.zip
adapted dir structure to exercise modualities
-rw-r--r--.gitignore1
-rw-r--r--01_exercise/Makefile28
-rw-r--r--01_exercise/bootloader.c23
-rw-r--r--01_exercise/linker.ld34
-rw-r--r--Makefile53
-rw-r--r--folien/praktikum1.pdf (renamed from praktikum/praktikum1.pdf)bin143089 -> 143089 bytes
-rw-r--r--folien/praktikum2.pdfbin0 -> 124527 bytes
-rw-r--r--main.c21
8 files changed, 86 insertions, 74 deletions
diff --git a/.gitignore b/.gitignore
index 7623090..2c56edf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
.idea
*.o
*_exe
+cmake-build-debug/
diff --git a/01_exercise/Makefile b/01_exercise/Makefile
new file mode 100644
index 0000000..4bf8198
--- /dev/null
+++ b/01_exercise/Makefile
@@ -0,0 +1,28 @@
+#!/usr/bin/make
+.SUFFIXES:
+SRC = bootloader.c
+TAR = bootloader.bin
+PCK = lab-1.zip
+
+CFLAGS = -m32 -c -Os -march=i686 -ffreestanding -Wall -Werror
+LFLAGS = -m elf_i386 -static -Tlinker.ld -nostdlib --nmagic
+
+%.o: %.c
+ $(CC) $(CFLAGS) $^ -o $@
+
+%.elf: %.o
+ $(LD) $(LFLAGS) -o $@ $^
+
+%.bin: %.elf
+ objcopy -O binary $^ $@
+
+all: $(TAR)
+
+run: $(TAR)
+ qemu-system-x86_64 -drive format=raw,file=$^
+
+pack:
+ zip $(PCK) Makefile *.c *.h *.s
+
+clean:
+ $(RM) $(RMFILES) $(TAR) $(PCK)
diff --git a/01_exercise/bootloader.c b/01_exercise/bootloader.c
new file mode 100644
index 0000000..a5806e4
--- /dev/null
+++ b/01_exercise/bootloader.c
@@ -0,0 +1,23 @@
+/* needs to stay the first line */
+asm(".code16gcc\njmp $0, $main");
+
+/* space for additional code */
+
+void main(void)
+{
+ asm(
+ "mov $0x007, %%ebx;"
+ "mov $0xE4E, %%eax; int $0x10;"
+ "mov $0xE69, %%eax; int $0x10;"
+ "mov $0xE63, %%eax; int $0x10;"
+ "mov $0xE65, %%eax; int $0x10;"
+ "mov $0xE20, %%eax; int $0x10;"
+ "mov $0xE42, %%eax; int $0x10;"
+ "mov $0xE6F, %%eax; int $0x10;"
+ "mov $0xE6F, %%eax; int $0x10;"
+ "mov $0xE74, %%eax; int $0x10;"
+ "mov $0xE73, %%eax; int $0x10;"
+ "jmp .;"
+ ::: "eax", "ebx"
+ );
+}
diff --git a/01_exercise/linker.ld b/01_exercise/linker.ld
new file mode 100644
index 0000000..b02f05e
--- /dev/null
+++ b/01_exercise/linker.ld
@@ -0,0 +1,34 @@
+ENTRY(main);
+SECTIONS
+{
+ . = 0x7C00;
+ .text : AT(0x7C00)
+ {
+ _text = .;
+ *(.text);
+ _text_end = .;
+ }
+ .data :
+ {
+ _data = .;
+ *(.bss);
+ *(.bss*);
+ *(.data);
+ *(.rodata*);
+ *(COMMON)
+ _data_end = .;
+ }
+ .sig : AT(0x7DFE)
+ {
+ SHORT(0xaa55);
+ }
+ /DISCARD/ :
+ {
+ *(.note*);
+ *(.iplt*);
+ *(.igot*);
+ *(.rel*);
+ *(.comment);
+ *(.eh_frame);
+ }
+}
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 647ebcd..0000000
--- a/Makefile
+++ /dev/null
@@ -1,53 +0,0 @@
-# if $CC is not set, use gcc as a sensible default
-CC ?= gcc
-RM ?= rm -fv
-
-# if $CFLAGS is not set, be very pedantic and compile
-# as C11, that should catch some common errors, also
-# fortify the source, which is a must for security.
-CFLAGS ?= -Wall \
- -D_FORTIFY_SOURCE=2 \
- -Wextra -Wcast-align -Wcast-qual -Wpointer-arith \
- -Waggregate-return -Wunreachable-code -Wfloat-equal \
- -Wformat=2 -Wredundant-decls -Wundef \
- -Wdisabled-optimization -Wshadow -Wmissing-braces \
- -Wstrict-aliasing=2 -Wstrict-overflow=5 -Wconversion \
- -Wno-unused-parameter \
- -pedantic -std=c11
-
-CFLAGS_DEBUG := -g3 \
- -O \
- -DDEBUG
-
-CFLAGS_RELEASE := -O2 \
- -DNDEBUG \
- -march=native \
- -mtune=native \
- -ftree-vectorize
-
-# the default target is debug
-all: debug
-
-# clean target, removing all .o and the executable
-clean:
- $(RM) *o bs_exe
-
-# when the target is debug,
-# add CFLAGS_DEBUG to CFLAGS
-debug: CFLAGS += $(CFLAGS_DEBUG)
-debug: clean bs_exe
-
-# when the target is release,
-# add CFLAGS_RELEASE to CFLAGS
-release: CFLAGS += $(CFLAGS_RELEASE)
-release: clean bs_exe
-
-bs_exe: main.o
- $(CC) $^ -o $@ $(CFLAGS)
-
-# when looking for something that ends in .o, look
-# for the same thing ending in .c and run gcc on it
-%.o: %.c
- $(CC) -c $< $(CFLAGS)
-
-.PHONY: debug release clean \ No newline at end of file
diff --git a/praktikum/praktikum1.pdf b/folien/praktikum1.pdf
index 09a176c..09a176c 100644
--- a/praktikum/praktikum1.pdf
+++ b/folien/praktikum1.pdf
Binary files differ
diff --git a/folien/praktikum2.pdf b/folien/praktikum2.pdf
new file mode 100644
index 0000000..132d4a5
--- /dev/null
+++ b/folien/praktikum2.pdf
Binary files differ
diff --git a/main.c b/main.c
deleted file mode 100644
index db72bf9..0000000
--- a/main.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <stdio.h>
-
-#if !defined(NDEBUG)
- #define TRACE(MSG) \
- fprintf(stderr, "%s\n", #MSG)
-#else
- #define TRACE(MSG)
-#endif
-
-int main(int argc, char *argv[]) {
- TRACE(pre assembly);
- __asm__("imul %%eax, %%eax"
- :
- :
- :
- );
- TRACE(post assembly);
- return 0;
-}
-
-/* https://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html */ \ No newline at end of file