From 9137549a42550b3780a4b76c388bedd0b96a0200 Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Tue, 24 May 2011 00:48:56 +0200 Subject: [PATCH] add basic mshell -> help -> exit -> path/to/elf --- kernel/tests.c | 4 ++-- newlib/examples/Makefile | 9 +++++++-- newlib/examples/mshell | Bin 0 -> 92222 bytes newlib/examples/mshell.c | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100755 newlib/examples/mshell create mode 100644 newlib/examples/mshell.c diff --git a/kernel/tests.c b/kernel/tests.c index 35ebecc8..333885b6 100644 --- a/kernel/tests.c +++ b/kernel/tests.c @@ -119,7 +119,7 @@ static int STDCALL join_test(void* arg) int test_init(void) { - char* argv[] = {"/bin/hangman", NULL}; + char* argv[] = {"/bin/mshell", NULL}; //sem_init(&producing, 1); //sem_init(&consuming, 0); @@ -131,7 +131,7 @@ int test_init(void) //create_kernel_task(NULL, consumer, NULL); //create_kernel_task(NULL, ping, NULL); //create_user_task(NULL, "/bin/hello", argv); - create_user_task(NULL, "/bin/hangman", argv); + create_user_task(NULL, "/bin/mshell", argv); //create_user_task(NULL, "/bin/jacobi", argv); return 0; diff --git a/newlib/examples/Makefile b/newlib/examples/Makefile index f63906cb..e184cbf0 100644 --- a/newlib/examples/Makefile +++ b/newlib/examples/Makefile @@ -11,7 +11,7 @@ LDFLAGS = default: all -all: hello tests jacobi hangman +all: hello tests jacobi hangman mshell jacobi: jacobi.o $(CC_FOR_TARGET) -T link.ld -o $@ $(LDFLAGS) $< -lm @@ -37,9 +37,14 @@ hangman: hangman.o $(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ chmod a-x $@.sym +mshell: mshell.o + $(CC_FOR_TARGET) -T link.ld -o $@ $(LDFLAGS) $< + $(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym + $(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ + chmod a-x $@.sym clean: - $(RM) hello tests *.sym *.o *~ + $(RM) hello hangman jacobi mshell tests *.sym *.o *~ depend: $(CC_FOR_TARGET) -MM $(CFLAGS) *.c > Makefile.dep diff --git a/newlib/examples/mshell b/newlib/examples/mshell new file mode 100755 index 0000000000000000000000000000000000000000..f209d3db14aa5441eb244fb17449753b96f15fb1 GIT binary patch literal 92222 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 xa}#G|QJbqSYAr8{Xv}kzX~4@1Q2_e>Q%n($S2N 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≀F>%VRh2DTTv;B{I4>VMlV+G%DJ@tm*bu*L*1UyP z5?`iiGEpKKtHh+f*eChn~JV`Iz*WeUNqp=oOmQ+B}CO<_Y3bNS?A#+uo*`bA%(i(Zv z@Z+zUd;={n$kc41xMbFC;qppNL362QRibr^p)!qZQ>eF0hpyaALzP0ugk zNYY1Pm!?n^PYacmL$66h=sE#?m~&*RuWDAUdaKS(SP)UV+bbHfJWN=3)kIqRu+j)!U&n_<$2Cs*3_)piK>LIvUv*0B<8R^}+=mJc? z=Y7@ul3Pplh(*K9D}|%Tc0_S8V-&UG!H@$!GUPY-&0 sV#ZF6>cNIVmT7j)Fr{m#-jeJ>F7KfV^y!k>;4RmrO7br#7XJ1B02Pc3CjbBd literal 0 HcmV?d00001 diff --git a/newlib/examples/mshell.c b/newlib/examples/mshell.c new file mode 100644 index 00000000..e7a1bb65 --- /dev/null +++ b/newlib/examples/mshell.c @@ -0,0 +1,39 @@ +#include +#include +#include + +void showlogo() { + printf("\n\n"); + printf("================================================================================\n"); + printf(" m(etalsvm)shell\n\n"); + printf(" Copyright 2010 Stefan Lankes, Chair for Operating Systems,\n"); + printf(" RWTH Aachen University\n\n"); + printf("================================================================================\n"); +} + +void help() { + printf("possible commands: \n"); + printf("exit > exit shell \n"); +} + +int main(int argc, char** argv) +{ + char* command = malloc(1024*sizeof(char)); + int size; + system("clear"); + showlogo(); + while(1) { + size = scanf("%s", command); + if(!strcmp(command, "exit")) { + return 0; + } + if(!strcmp(command, "help")) { + help(); + } + else { + char* argv[] = {command, NULL}; + execve(command, argv, NULL); + } + } +} +