From ab03d3be21f229be8c28dba292d5da237a929a73 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Wed, 28 Aug 2024 22:25:56 +0200 Subject: Restructure the whole thing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It will be something more than just messing around with RISC-V stuff. Signed-off-by: Miquel Sabaté Solà --- arch/riscv/init/Makefile | 21 +++++++++++++++++++++ arch/riscv/init/file_list.txt | 2 ++ arch/riscv/init/hello.c | 8 ++++++++ arch/riscv/init/initramfs.cpio | Bin 0 -> 4959232 bytes arch/riscv/init/little_shell.go | 19 +++++++++++++++++++ arch/riscv/init/shell.c | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 82 insertions(+) create mode 100644 arch/riscv/init/Makefile create mode 100644 arch/riscv/init/file_list.txt create mode 100644 arch/riscv/init/hello.c create mode 100644 arch/riscv/init/initramfs.cpio create mode 100644 arch/riscv/init/little_shell.go create mode 100644 arch/riscv/init/shell.c (limited to 'arch/riscv/init') diff --git a/arch/riscv/init/Makefile b/arch/riscv/init/Makefile new file mode 100644 index 0000000..71405c3 --- /dev/null +++ b/arch/riscv/init/Makefile @@ -0,0 +1,21 @@ +CROSS_CC ?= riscv64-suse-linux-gcc +CROSS_LD ?= riscv64-suse-linux-ld +CCFLAGS = -static + +## +# Targets + +.PHONY: hello +hello: clean + $(CROSS_CC) $(CCFLAGS) -o init hello.c + cpio -o -H newc < file_list.txt > initramfs.cpio + +.PHONY: shell +shell: clean + $(CROSS_CC) $(CCFLAGS) -o init shell.c + GOOS=linux GOARCH=riscv64 go build little_shell.go + cpio -o -H newc < file_list.txt > initramfs.cpio + +.PHONY: clean +clean: + @rm -f *.o init initramfs.cpio diff --git a/arch/riscv/init/file_list.txt b/arch/riscv/init/file_list.txt new file mode 100644 index 0000000..9dd8872 --- /dev/null +++ b/arch/riscv/init/file_list.txt @@ -0,0 +1,2 @@ +init +little_shell diff --git a/arch/riscv/init/hello.c b/arch/riscv/init/hello.c new file mode 100644 index 0000000..d4e5892 --- /dev/null +++ b/arch/riscv/init/hello.c @@ -0,0 +1,8 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + printf("Hello, world!\n"); + exit(0); +} diff --git a/arch/riscv/init/initramfs.cpio b/arch/riscv/init/initramfs.cpio new file mode 100644 index 0000000..802848e Binary files /dev/null and b/arch/riscv/init/initramfs.cpio differ diff --git a/arch/riscv/init/little_shell.go b/arch/riscv/init/little_shell.go new file mode 100644 index 0000000..7324323 --- /dev/null +++ b/arch/riscv/init/little_shell.go @@ -0,0 +1,19 @@ +package main + +import ( + "bufio" + "fmt" + "os" +) + +func main() { + fmt.Println("Hello world from Go!") + + reader := bufio.NewReader(os.Stdin) + + for { + fmt.Print("Enter your command: ") + line, _ := reader.ReadString('\n') + fmt.Printf("Your command is: %s", line) + } +} diff --git a/arch/riscv/init/shell.c b/arch/riscv/init/shell.c new file mode 100644 index 0000000..d44b1c7 --- /dev/null +++ b/arch/riscv/init/shell.c @@ -0,0 +1,32 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + pid_t pid = fork(); + + if (pid == -1) { + printf("Unable to fork!"); + return -1; + } + + if (pid == 0) { + // This is a child process. + int status = execl("/little_shell", "irrelevant", NULL); + + if (status == -1) { + printf("Forked process cannot start the little_shell"); + return -2; + } + } + + int count = 1; + + while (1) { + printf("Hello from the original init! %d\n", count); + count++; + sleep(10); + } + + return 0; +} -- cgit v1.2.3