Ver Fonte

Server: Add TTYServer, a rudimentary text console manager

This should probably call out to a login program at some point. Right now
it just puts a root terminal on tty{1,2,3}.

Remember not to leave your Serenity workstation unattended!
Conrad Pankoff há 6 anos atrás
pai
commit
67a4256a98

+ 1 - 0
Kernel/build-root-filesystem.sh

@@ -97,6 +97,7 @@ cp ../Servers/LookupServer/LookupServer mnt/bin/LookupServer
 cp ../Servers/SystemServer/SystemServer mnt/bin/SystemServer
 cp ../Servers/WindowServer/WindowServer mnt/bin/WindowServer
 cp ../Servers/AudioServer/AudioServer mnt/bin/AudioServer
+cp ../Servers/TTYServer/TTYServer mnt/bin/TTYServer
 cp ../Shell/Shell mnt/bin/Shell
 cp ../Libraries/LibHTML/tho mnt/bin/tho
 echo "done"

+ 22 - 1
Kernel/init.cpp

@@ -142,11 +142,32 @@ VFS* vfs;
 
     auto* system_server_process = Process::create_user_process("/bin/SystemServer", (uid_t)100, (gid_t)100, (pid_t)0, error, {}, {}, tty0);
     if (error != 0) {
-        dbgprintf("init_stage2: error spawning SystemServer: %d\n", error);
+        kprintf("init_stage2: error spawning SystemServer: %d\n", error);
         hang();
     }
     system_server_process->set_priority(Process::HighPriority);
 
+    auto* tty1_process = Process::create_user_process("/bin/TTYServer", (uid_t)0, (gid_t)0, (pid_t)0, error, { "/bin/TTYServer", "tty1" }, {}, tty1);
+    if (error != 0) {
+        kprintf("init_stage2: error spawning TTYServer for tty1: %d\n", error);
+        hang();
+    }
+    tty1_process->set_priority(Process::HighPriority);
+
+    auto* tty2_process = Process::create_user_process("/bin/TTYServer", (uid_t)0, (gid_t)0, (pid_t)0, error, { "/bin/TTYServer", "tty2" }, {}, tty2);
+    if (error != 0) {
+        kprintf("init_stage2: error spawning TTYServer for tty2: %d\n", error);
+        hang();
+    }
+    tty2_process->set_priority(Process::HighPriority);
+
+    auto* tty3_process = Process::create_user_process("/bin/TTYServer", (uid_t)0, (gid_t)0, (pid_t)0, error, { "/bin/TTYServer", "tty3" }, {}, tty3);
+    if (error != 0) {
+        kprintf("init_stage2: error spawning TTYServer for tty3: %d\n", error);
+        hang();
+    }
+    tty3_process->set_priority(Process::HighPriority);
+
     current->process().sys$exit(0);
     ASSERT_NOT_REACHED();
 }

+ 1 - 0
Kernel/makeall.sh

@@ -25,6 +25,7 @@ build_targets="$build_targets ../Servers/SystemServer"
 build_targets="$build_targets ../Servers/LookupServer"
 build_targets="$build_targets ../Servers/WindowServer"
 build_targets="$build_targets ../Servers/AudioServer"
+build_targets="$build_targets ../Servers/TTYServer"
 build_targets="$build_targets ../Libraries/LibAudio"
 build_targets="$build_targets ../Libraries/LibGUI"
 build_targets="$build_targets ../Libraries/LibHTML"

+ 23 - 0
Servers/TTYServer/Makefile

@@ -0,0 +1,23 @@
+include ../../Makefile.common
+
+TTYSERVER_OBJS = \
+    main.o
+
+APP = TTYServer
+OBJS = $(TTYSERVER_OBJS)
+
+DEFINES += -DUSERLAND
+
+all: $(APP)
+
+$(APP): $(OBJS)
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -lcore
+
+.cpp.o:
+	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
+
+-include $(OBJS:%.o=%.d)
+
+clean:
+	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+

+ 16 - 0
Servers/TTYServer/main.cpp

@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char** argv)
+{
+    if (argc < 2)
+        return -1;
+
+    dbgprintf("Starting console server on %s\n", argv[1]);
+
+    while (true) {
+        dbgprintf("Running shell on %s\n", argv[1]);
+        int rc = system("/bin/Shell");
+        dbgprintf("Shell on %s exited with code %d\n", argv[1], rc);
+    }
+}