Don't use the 'busybox' binary as a trampoline to start a shell. Instead, invoke the shell directory using a pathname pointing to the shell binary: /bin/bash. Also, rename the monitor function to invoke a shell from, "mon_bb" to "mon_shell". Add a monitor commands 'bash' and 'sh' to invoke the shell as, '/bin/bash'.
Tested: Build and run Akaros. Change-Id: I56be992292b28762c9925b9b40f2d765ca1e1313 Signed-off-by: Dan Cross <[email protected]> --- kern/include/monitor.h | 2 +- kern/src/init.c | 7 +++---- kern/src/manager.c | 2 +- kern/src/monitor.c | 10 ++++++---- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/kern/include/monitor.h b/kern/include/monitor.h index 92a1f28..887058b 100644 --- a/kern/include/monitor.h +++ b/kern/include/monitor.h @@ -31,7 +31,7 @@ int mon_measure(int argc, char **argv, struct hw_trapframe *hw_tf); int mon_trace(int argc, char **argv, struct hw_trapframe *hw_tf); int mon_monitor(int argc, char **argv, struct hw_trapframe *hw_tf); int mon_fs(int argc, char **argv, struct hw_trapframe *hw_tf); -int mon_bb(int argc, char **argv, struct hw_trapframe *hw_tf); +int mon_shell(int argc, char **argv, struct hw_trapframe *hw_tf); int mon_alarm(int argc, char **argv, struct hw_trapframe *hw_tf); int mon_msr(int argc, char **argv, struct hw_trapframe *hw_tf); int mon_db(int argc, char **argv, struct hw_trapframe *hw_tf); diff --git a/kern/src/init.c b/kern/src/init.c index 6f21ec6..9ab93fc 100644 --- a/kern/src/init.c +++ b/kern/src/init.c @@ -208,12 +208,11 @@ static int run_init_script(void) /* Initialize l_argv with its first three arguments, but allocate space * for all arguments as calculated above */ - int static_args = 3; + int static_args = 2; int total_args = vargs + static_args; char *l_argv[total_args]; - l_argv[0] = ""; - l_argv[1] = "busybox"; - l_argv[2] = "ash"; + l_argv[0] = "/bin/bash"; + l_argv[1] = "bash"; /* Initialize l_argv with the rest of the arguments */ int i = static_args; diff --git a/kern/src/manager.c b/kern/src/manager.c index fe442ad..677e5ef 100644 --- a/kern/src/manager.c +++ b/kern/src/manager.c @@ -272,7 +272,7 @@ void manager_waterman() { static bool first = true; if (first) - mon_bb(0, 0, 0); + mon_shell(0, 0, 0); smp_idle(); assert(0); } diff --git a/kern/src/monitor.c b/kern/src/monitor.c index 7749f89..f24c87b 100644 --- a/kern/src/monitor.c +++ b/kern/src/monitor.c @@ -62,7 +62,9 @@ static command_t commands[] = { { "trace", "Run some tracing functions", mon_trace}, { "monitor", "Run the monitor on another core", mon_monitor}, { "fs", "Filesystem Diagnostics", mon_fs}, - { "bb", "Try to run busybox (ash)", mon_bb}, + { "sh", "Try to run a shell (bash)", mon_shell}, + { "bash", "Try to run a shell (bash)", mon_shell}, + { "bb", "Try to run a shell (bash)", mon_shell}, { "alarm", "Alarm Diagnostics", mon_alarm}, { "msr", "read/write msr: msr msr [value]", mon_msr}, { "db", "Misc debugging", mon_db}, @@ -990,10 +992,10 @@ int mon_fs(int argc, char **argv, struct hw_trapframe *hw_tf) return 0; } -int mon_bb(int argc, char **argv, struct hw_trapframe *hw_tf) +int mon_shell(int argc, char **argv, struct hw_trapframe *hw_tf) { - char *l_argv[3] = {"", "busybox", "ash"}; - return mon_bin_run(3, l_argv, hw_tf); + char *l_argv[2] = {"/bin/bash", "bash"}; + return mon_bin_run(2, l_argv, hw_tf); } int mon_alarm(int argc, char **argv, struct hw_trapframe *hw_tf) -- 2.8.0.rc3.226.g39d4020 -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
