diff --git a/README.md b/README.md index ad2f942..6227d65 100644 --- a/README.md +++ b/README.md @@ -264,11 +264,16 @@ Is the default BusyBox `/init` too bloated for you, minimalism freak? No problem, just use the `init` kernel boot parameter: - ./runqemu -e 'init=/init_hello.out' + ./runqemu -e 'init=/sleep_forever.out' Remember that shell scripts can also be used for `init` : - ./runqemu -e 'init=/init.sh' + ./runqemu -e 'init=/count.sh' + +Also remember that if your init returns, the kernel will panic, there are just two non-panic possibilities: + +- run forever in a loop or long sleep +- `poweroff` the machine ## Debugging diff --git a/kernel_module/user/README.md b/kernel_module/user/README.md index 2213b5e..453ce4a 100644 --- a/kernel_module/user/README.md +++ b/kernel_module/user/README.md @@ -14,8 +14,8 @@ These programs can also be compiled and used on host. 1. [usermem](usermem.c) 1. [pagemap_dump](pagemap_dump.c) 1. inits - 1. [init_hello](init_hello.c) - 1. [init_poweroff](init_poweroff.c) + 1. [sleep_forever](sleep_forever.c) + 1. [poweroff](poweroff.c) 1. [uio_read](uio_read.c) 1. Module tests 1. [anonymous_inode](anonymous_inode.c) diff --git a/kernel_module/user/init_hello.c b/kernel_module/user/init_hello.c deleted file mode 100644 index 17eb2b3..0000000 --- a/kernel_module/user/init_hello.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Replacement init example for when we feel like running - * a single non-interactive single executable Linux distro. */ - -#include -#include - -int main(void) { - puts(__FILE__); - while (1) - sleep(0xFFFFFFFF); -} diff --git a/kernel_module/user/init_poweroff.c b/kernel_module/user/poweroff.c similarity index 58% rename from kernel_module/user/init_poweroff.c rename to kernel_module/user/poweroff.c index 1e651e4..f306573 100644 --- a/kernel_module/user/init_poweroff.c +++ b/kernel_module/user/poweroff.c @@ -1,5 +1,6 @@ /* Userspace is for the weak. Die. - * https://stackoverflow.com/questions/28812514/how-to-shutdown-linux-using-c-or-qt-without-call-to-system */ + * https://stackoverflow.com/questions/28812514/how-to-shutdown-linux-using-c-or-qt-without-call-to-system + * BusyBox's /sbin/poweroff is under init/halt.c, but it does extra crap like killing init, so I don't trust it. */ #include #include diff --git a/kernel_module/user/sleep_forever.c b/kernel_module/user/sleep_forever.c new file mode 100644 index 0000000..4725548 --- /dev/null +++ b/kernel_module/user/sleep_forever.c @@ -0,0 +1,10 @@ +/* Sleeping beauty, your prince is called Ctrl + C. */ + +#include +#include + +int main(void) { + puts(__FILE__); + while (1) + sleep(0xFFFFFFFF); +} diff --git a/rootfs_overlay/init.sh b/rootfs_overlay/init.sh deleted file mode 100755 index 3ee0be9..0000000 --- a/rootfs_overlay/init.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# Can init be a sh script? Yes. -# Sure, why not: https://unix.stackexchange.com/questions/174062/init-as-a-shell-script/395375#395375 -echo 'hello init.sh' -while true; do - sleep 1 -done