From 9137549a42550b3780a4b76c388bedd0b96a0200 Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Tue, 24 May 2011 00:48:56 +0200 Subject: [PATCH 1/3] 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); + } + } +} + From f54b06a807a6aaac81454ecfa78fa978aa6865a9 Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Tue, 24 May 2011 17:23:10 +0200 Subject: [PATCH 2/3] add the ability to start apps (still buggy) --- newlib/examples/hello.c | 6 +----- newlib/examples/mshell | Bin 92222 -> 92222 bytes newlib/examples/mshell.c | 26 ++++++++++++++++++++------ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/newlib/examples/hello.c b/newlib/examples/hello.c index fd357d5f..f65ce176 100644 --- a/newlib/examples/hello.c +++ b/newlib/examples/hello.c @@ -27,10 +27,6 @@ extern int errno; int main(int argc, char** argv) { - int i; - char* str = (char *)malloc(40000 * sizeof(char)); - scanf("%s", str); - printf("SCANF: %s", str); - fflush(NULL); + printf("test!"); return errno; } diff --git a/newlib/examples/mshell b/newlib/examples/mshell index f209d3db14aa5441eb244fb17449753b96f15fb1..5d9d80cfafe38ea5fbe3ad3470475d93ed4811ec 100755 GIT binary patch delta 8034 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 diff --git a/newlib/examples/mshell.c b/newlib/examples/mshell.c index e7a1bb65..3389c610 100644 --- a/newlib/examples/mshell.c +++ b/newlib/examples/mshell.c @@ -1,6 +1,10 @@ -#include #include +#include #include +#include +#include +#include +#include void showlogo() { printf("\n\n"); @@ -19,7 +23,8 @@ void help() { int main(int argc, char** argv) { char* command = malloc(1024*sizeof(char)); - int size; + int size, status = 0; + pid_t pid; system("clear"); showlogo(); while(1) { @@ -29,11 +34,20 @@ int main(int argc, char** argv) } if(!strcmp(command, "help")) { help(); - } - else { - char* argv[] = {command, NULL}; - execve(command, argv, NULL); + } else { + //pid = fork(); + //if (pid == 0) { //child + char* newargv[] = {command, NULL}; + char* newenv[] = {"USER=root", "PATH=/bin:/sbin:/usr/bin", "PWD=/", "TEMP=/tmp", NULL}; + + execve(command, newargv, newenv); + return errno; + //} else { + // wait(&status); + // printf("Beendet"); + //} } } + return errno; } From af0728a57d702142a1c976defae1f4372c51eb24 Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Tue, 24 May 2011 18:54:53 +0200 Subject: [PATCH 3/3] add the feature to start elf-files --- newlib/examples/mshell | Bin 92222 -> 92300 bytes newlib/examples/mshell.c | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/newlib/examples/mshell b/newlib/examples/mshell index 5d9d80cfafe38ea5fbe3ad3470475d93ed4811ec..84ece8f546d98b9d080388f99178a9d683c3fa54 100755 GIT binary patch delta 7558 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 W*0xM1$1OAF%$rs7>civ@=Dz_bYskg` delta 7288 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 C_f8-H diff --git a/newlib/examples/mshell.c b/newlib/examples/mshell.c index 3389c610..af4ee6fe 100644 --- a/newlib/examples/mshell.c +++ b/newlib/examples/mshell.c @@ -28,6 +28,7 @@ int main(int argc, char** argv) system("clear"); showlogo(); while(1) { + printf("$ "); size = scanf("%s", command); if(!strcmp(command, "exit")) { return 0; @@ -35,17 +36,16 @@ int main(int argc, char** argv) if(!strcmp(command, "help")) { help(); } else { - //pid = fork(); - //if (pid == 0) { //child + pid = fork(); + if (pid == 0) { //child char* newargv[] = {command, NULL}; char* newenv[] = {"USER=root", "PATH=/bin:/sbin:/usr/bin", "PWD=/", "TEMP=/tmp", NULL}; execve(command, newargv, newenv); return errno; - //} else { - // wait(&status); - // printf("Beendet"); - //} + } else { + wait(&status); + } } } return errno;