diff options
Diffstat (limited to 'arch/riscv/kernel')
| -rw-r--r-- | arch/riscv/kernel/Makefile | 20 | ||||
| -rw-r--r-- | arch/riscv/kernel/hello.ld | 9 | ||||
| -rw-r--r-- | arch/riscv/kernel/hello.s | 15 | ||||
| -rw-r--r-- | arch/riscv/kernel/infinite.ld | 9 | ||||
| -rw-r--r-- | arch/riscv/kernel/infinite.s | 4 |
5 files changed, 57 insertions, 0 deletions
diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile new file mode 100644 index 0000000..e943353 --- /dev/null +++ b/arch/riscv/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/arch/riscv/kernel/hello.ld b/arch/riscv/kernel/hello.ld new file mode 100644 index 0000000..e4af459 --- /dev/null +++ b/arch/riscv/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/arch/riscv/kernel/hello.s b/arch/riscv/kernel/hello.s new file mode 100644 index 0000000..eacd797 --- /dev/null +++ b/arch/riscv/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/arch/riscv/kernel/infinite.ld b/arch/riscv/kernel/infinite.ld new file mode 100644 index 0000000..2eee384 --- /dev/null +++ b/arch/riscv/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/arch/riscv/kernel/infinite.s b/arch/riscv/kernel/infinite.s new file mode 100644 index 0000000..855f58e --- /dev/null +++ b/arch/riscv/kernel/infinite.s @@ -0,0 +1,4 @@ + .global _start + .section .text.kernel + +_start: j _start |
