From 93e83f52e82af21e1572601ea2d1c4a57dab2932 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Wed, 3 Jul 2024 13:21:04 +0200 Subject: [PATCH] Add busybox patch to see debug lines: initrd sh ok The switch_root command seems to hang in the execv() syscall. --- busybox-debug.patch | 68 +++++++++++++++++++++++++++++++++++++++++++++ lagarto-ox.nix | 12 +++----- 2 files changed, 72 insertions(+), 8 deletions(-) create mode 100644 busybox-debug.patch diff --git a/busybox-debug.patch b/busybox-debug.patch new file mode 100644 index 0000000..7e171c3 --- /dev/null +++ b/busybox-debug.patch @@ -0,0 +1,68 @@ +Only in busybox-1.36.1-mod: tags +diff -up -r busybox-1.36.1/util-linux/switch_root.c busybox-1.36.1-mod/util-linux/switch_root.c +--- busybox-1.36.1/util-linux/switch_root.c 2021-09-30 00:04:47.000000000 +0200 ++++ busybox-1.36.1-mod/util-linux/switch_root.c 2024-07-01 16:08:28.336541504 +0200 +@@ -181,6 +181,8 @@ int switch_root_main(int argc UNUSED_PAR + unsigned dry_run = 0; + dev_t rootdev; + ++ printf("HELLO THIS IS SWITCH ROOT STARTING\n"); ++ + // Parse args. '+': stop at first non-option + if (ENABLE_SWITCH_ROOT && (!ENABLE_RUN_INIT || applet_name[0] == 's')) { + //usage:#define switch_root_trivial_usage +@@ -241,12 +243,15 @@ int switch_root_main(int argc UNUSED_PAR + if (stat("/init", &st) != 0 || !S_ISREG(st.st_mode)) { + bb_error_msg_and_die("'%s' is not a regular file", "/init"); + } ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); + statfs("/", &stfs); // this never fails ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); + if ((unsigned)stfs.f_type != RAMFS_MAGIC + && (unsigned)stfs.f_type != TMPFS_MAGIC + ) { + bb_simple_error_msg_and_die("root filesystem is not ramfs/tmpfs"); + } ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); + + if (!dry_run) { + // Zap everything out of rootdev +@@ -258,19 +263,26 @@ int switch_root_main(int argc UNUSED_PAR + bb_simple_perror_msg_and_die("error moving root"); + } + } ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); ++ printf("XCHROOT\n"); + xchroot("."); ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); + // The chdir is needed to recalculate "." and ".." links + /*xchdir("/"); - done in xchroot */ + + // If a new console specified, redirect stdin/stdout/stderr to it + if (console) { ++ printf("REDIRECTING CONSOLE\n"); ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); + int fd = open_or_warn(console, O_RDWR); + if (fd >= 0) { + xmove_fd(fd, 0); + xdup2(0, 1); + xdup2(0, 2); + } ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); + } ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); + + if (dry_run) { + // Does NEW_INIT look like it can be executed? +@@ -280,8 +292,11 @@ int switch_root_main(int argc UNUSED_PAR + if (access(argv[0], X_OK) == 0) + return 0; + } else { ++ printf("SWITCH ROOT LINE %d OK\n", __LINE__); ++ printf("LAUNCHING EXECV\n"); + // Exec NEW_INIT + execv(argv[0], argv); ++ printf("RETURNED FROM EXECV???\n"); + } + bb_perror_msg_and_die("can't execute '%s'", argv[0]); + } diff --git a/lagarto-ox.nix b/lagarto-ox.nix index 9350cd1..5c03360 100644 --- a/lagarto-ox.nix +++ b/lagarto-ox.nix @@ -107,14 +107,10 @@ }; nixpkgs.overlays = [ (final: prev: { - # FIXME: Fails on start - busybox = (prev.busybox.override { -# enableStatic = true; - }).overrideAttrs (old: { - src = /home/Computational/rarias/riscv/busybox-1.36.1; -# #env.NIX_CFLAGS_COMPILE = "-mtune=generic"; -# #env.NIX_DEBUG = 5; - }); + #busybox = prev.busybox.overrideAttrs (old: { + # # Print some debug lines on switch_root to see where it hangs. + # patches = (old.patches or []) ++ [ ./busybox-debug.patch ]; + #}); linuxPackages_latest = prev.linuxPackages_latest; #linuxPackages_latest = prev.linuxPackages_latest.extend (lib.const (ksuper: {