aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2024-08-12 08:24:44 +0200
committerMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-05 16:02:11 +0100
commitc173df46a0a12fe52fdf13323f967e9117462096 (patch)
tree386124798c6c7f54ff4c645746bae1ed3214a67a /kernel
downloadfarga-c173df46a0a12fe52fdf13323f967e9117462096.tar.gz
farga-c173df46a0a12fe52fdf13323f967e9117462096.zip
Initial commit
Mainly with the code I took from @popovicu's blog. Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/Makefile20
-rw-r--r--kernel/hello.ld9
-rw-r--r--kernel/hello.s15
-rw-r--r--kernel/infinite.ld9
-rw-r--r--kernel/infinite.s4
5 files changed, 57 insertions, 0 deletions
diff --git a/kernel/Makefile b/kernel/Makefile
new file mode 100644
index 0000000..e943353
--- /dev/null
+++ b/kernel/Makefile
@@ -0,0 +1,20 @@
+CROSS_AS ?= riscv64-suse-linux-as
+CROSS_LD ?= riscv64-suse-linux-ld
+ASFLAGS = -march=rv64g -mabi=lp64
+
+##
+# Targets
+
+.PHONY: infinite
+infinite: clean
+ $(CROSS_AS) $(ASFLAGS) -o infinite.o -c infinite.s
+ $(CROSS_LD) -T infinite.ld infinite.o -o infinite
+
+.PHONY: hello
+hello: clean
+ $(CROSS_AS) $(ASFLAGS) -o hello.o -c hello.s
+ $(CROSS_LD) -T hello.ld hello.o -o hello
+
+.PHONY: clean
+clean:
+ @rm -f *.o infinite hello
diff --git a/kernel/hello.ld b/kernel/hello.ld
new file mode 100644
index 0000000..e4af459
--- /dev/null
+++ b/kernel/hello.ld
@@ -0,0 +1,9 @@
+MEMORY {
+ kernel_space (rwx) : ORIGIN = 0x80200000, LENGTH = 128
+}
+
+SECTIONS {
+ .text : {
+ hello.o(.text.kernel)
+ } > kernel_space
+}
diff --git a/kernel/hello.s b/kernel/hello.s
new file mode 100644
index 0000000..eacd797
--- /dev/null
+++ b/kernel/hello.s
@@ -0,0 +1,15 @@
+.global _start
+.section .text.kernel
+
+_start: li a7, 0x4442434E
+ li a6, 0x00
+ li a0, 12
+ lla a1, debug_string
+ li a2, 0
+ ecall
+
+loop: j loop
+
+ .section .rodata
+debug_string:
+ .string "Hello world\n"
diff --git a/kernel/infinite.ld b/kernel/infinite.ld
new file mode 100644
index 0000000..2eee384
--- /dev/null
+++ b/kernel/infinite.ld
@@ -0,0 +1,9 @@
+MEMORY {
+ kernel_space (rwx) : ORIGIN = 0x80200000, LENGTH = 128
+}
+
+SECTIONS {
+ .text : {
+ infinite.o(.text.kernel)
+ } > kernel_space
+}
diff --git a/kernel/infinite.s b/kernel/infinite.s
new file mode 100644
index 0000000..855f58e
--- /dev/null
+++ b/kernel/infinite.s
@@ -0,0 +1,4 @@
+ .global _start
+ .section .text.kernel
+
+_start: j _start