From c173df46a0a12fe52fdf13323f967e9117462096 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Mon, 12 Aug 2024 08:24:44 +0200 Subject: Initial commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mainly with the code I took from @popovicu's blog. Signed-off-by: Miquel Sabaté Solà --- init/Makefile | 21 +++++++++++++++++++++ init/file_list.txt | 2 ++ init/hello.c | 8 ++++++++ init/little_shell | Bin 0 -> 1896643 bytes init/little_shell.go | 19 +++++++++++++++++++ init/shell.c | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 82 insertions(+) create mode 100644 init/Makefile create mode 100644 init/file_list.txt create mode 100644 init/hello.c create mode 100755 init/little_shell create mode 100644 init/little_shell.go create mode 100644 init/shell.c (limited to 'init') diff --git a/init/Makefile b/init/Makefile new file mode 100644 index 0000000..71405c3 --- /dev/null +++ b/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/init/file_list.txt b/init/file_list.txt new file mode 100644 index 0000000..9dd8872 --- /dev/null +++ b/init/file_list.txt @@ -0,0 +1,2 @@ +init +little_shell diff --git a/init/hello.c b/init/hello.c new file mode 100644 index 0000000..d4e5892 --- /dev/null +++ b/init/hello.c @@ -0,0 +1,8 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + printf("Hello, world!\n"); + exit(0); +} diff --git a/init/little_shell b/init/little_shell new file mode 100755 index 0000000..5e2446c Binary files /dev/null and b/init/little_shell differ diff --git a/init/little_shell.go b/init/little_shell.go new file mode 100644 index 0000000..7324323 --- /dev/null +++ b/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/init/shell.c b/init/shell.c new file mode 100644 index 0000000..d44b1c7 --- /dev/null +++ b/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