diff options
Diffstat (limited to 'init')
| -rw-r--r-- | init/Makefile | 21 | ||||
| -rw-r--r-- | init/file_list.txt | 2 | ||||
| -rw-r--r-- | init/hello.c | 8 | ||||
| -rwxr-xr-x | init/little_shell | bin | 0 -> 1896643 bytes | |||
| -rw-r--r-- | init/little_shell.go | 19 | ||||
| -rw-r--r-- | init/shell.c | 32 |
6 files changed, 82 insertions, 0 deletions
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 <stdio.h> +#include <stdlib.h> + +int main(int argc, char *argv[]) +{ + printf("Hello, world!\n"); + exit(0); +} diff --git a/init/little_shell b/init/little_shell Binary files differnew file mode 100755 index 0000000..5e2446c --- /dev/null +++ b/init/little_shell 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 <stdio.h> +#include <unistd.h> + +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; +} |
