Merge branch 'console-dev'
authorMinep <zelong56@gmail.com>
Sat, 25 Jun 2022 20:46:23 +0000 (21:46 +0100)
committerMinep <zelong56@gmail.com>
Sat, 25 Jun 2022 20:46:23 +0000 (21:46 +0100)
1  2 
lunaix-os/kernel/lxinit.c
lunaix-os/kernel/proc0.c

index 2ac93422844506d72cb21557b75aa938ee1defec,8a19841f5c87c88b0e48b528a7e6a29a5fe01d73..a767ec738e5dd9de408b3519549c3b8f050ff4f3
@@@ -2,13 -2,14 +2,13 @@@
  #include <lunaix/clock.h>
  #include <lunaix/keyboard.h>
  #include <lunaix/lunistd.h>
+ #include <lunaix/lxconsole.h>
  #include <lunaix/mm/kalloc.h>
  #include <lunaix/mm/vmm.h>
  #include <lunaix/proc.h>
 -#include <lunaix/signal.h>
  #include <lunaix/spike.h>
  #include <lunaix/syslog.h>
  #include <lunaix/timer.h>
- #include <lunaix/tty/tty.h>
  
  extern uint8_t __kernel_start;
  
@@@ -18,6 -19,27 +18,6 @@@ LOG_MODULE("INIT"
  #define WAIT_DEMO
  #define IN_USER_MODE
  
 -void __USER__
 -sigchild_handler(int signum)
 -{
 -    kprintf(KINFO "SIGCHLD received\n");
 -}
 -
 -void __USER__
 -sigsegv_handler(int signum)
 -{
 -    pid_t pid = getpid();
 -    kprintf(KWARN "SIGSEGV received on process %d\n", pid);
 -    _exit(signum);
 -}
 -
 -void __USER__
 -sigalrm_handler(int signum)
 -{
 -    pid_t pid = getpid();
 -    kprintf(KWARN "I, pid %d, have received an alarm!\n", pid);
 -}
 -
  void __USER__
  _lxinit_main()
  {
      }
  #endif
  
 -    signal(_SIGCHLD, sigchild_handler);
 -    signal(_SIGSEGV, sigsegv_handler);
 -    signal(_SIGALRM, sigalrm_handler);
 -
 -    alarm(5);
 -
      int status;
  #ifdef WAIT_DEMO
      // 测试wait
@@@ -41,7 -69,7 +41,7 @@@
          kprintf("I am child, I am about to terminated\n");
          _exit(1);
      }
 -    pause();
 +    wait(&status);
      pid_t child = wait(&status);
      kprintf("I am parent, my child (%d) terminated normally with code: %d.\n",
              child,
      for (size_t i = 0; i < 5; i++) {
          pid_t pid = 0;
          if (!(pid = fork())) {
 -            signal(_SIGSEGV, sigsegv_handler);
              sleep(i);
              if (i == 3) {
                  i = *(int*)0xdeadc0de; // seg fault!
              }
-             tty_put_char('0' + i);
-             tty_put_char('\n');
+             kprintf(KINFO "%d\n", i);
              _exit(0);
          }
          kprintf(KINFO "Forked %d\n", pid);
  
      while ((p = wait(&status)) >= 0) {
          short code = WEXITSTATUS(status);
 -        if (WIFSIGNALED(status)) {
 -            kprintf(KINFO "Process %d terminated by signal, exit_code: %d\n",
 -                    p,
 -                    code);
 -        } else if (WIFEXITED(status)) {
 +        if (WIFEXITED(status)) {
              kprintf(KINFO "Process %d exited with code %d\n", p, code);
          } else {
              kprintf(KWARN "Process %d aborted with code %d\n", p, code);
          }
          if ((keyevent.state & KBD_KEY_FPRESSED) &&
              (keyevent.keycode & 0xff00) <= KEYPAD) {
-             tty_put_char((char)(keyevent.keycode & 0x00ff));
+             console_write_char((char)(keyevent.keycode & 0x00ff));
              // FIXME: io to vga port is privileged and cause #GP in user mode
              // tty_sync_cursor();
          }
diff --combined lunaix-os/kernel/proc0.c
index 79ef12e9e46e49da80ae6eff80cf7d08d8340a4c,cece3687e4abd30e0c9949d87e34ccedf49498a9..61a6dfc16164e44fe1e1ab318f558613f64c4020
@@@ -1,6 -1,7 +1,7 @@@
  #include <arch/x86/boot/multiboot.h>
  #include <lunaix/common.h>
  #include <lunaix/lunistd.h>
+ #include <lunaix/lxconsole.h>
  #include <lunaix/mm/pmm.h>
  #include <lunaix/mm/vmm.h>
  #include <lunaix/peripheral/ps2kbd.h>
@@@ -31,17 -32,11 +32,17 @@@ unlock_reserved_memory()
  void
  __do_reserved_memory(int unlock);
  
 +//#define DEMO_SIGNAL
 +
  void __USER__
  __proc0_usr()
  {
      if (!fork()) {
 +#ifdef DEMO_SIGNAL
 +        asm("jmp _signal_demo_main");
 +#else
          asm("jmp _lxinit_main");
 +#endif
      }
  
      while (1) {
@@@ -90,12 -85,6 +91,6 @@@ init_platform(
  {
      assert_msg(kalloc_init(), "Fail to initialize heap");
  
-     // Fuck it, I will no longer bother this little 1MiB
-     // I just release 4 pages for my APIC & IOAPIC remappings
-     // for (size_t i = 0; i < 3; i++) {
-     //     vmm_del_mapping(PD_REFERENCED, (void*)(i << PG_SIZE_BITS));
-     // }
      // 锁定所有系统预留页(内存映射IO,ACPI之类的),并且进行1:1映射
      lock_reserved_memory();
  
  
      syscall_install();
  
+     console_start_flushing();
      unlock_reserved_memory();
  
      for (size_t i = 0; i < (uintptr_t)(&__init_hhk_end); i += PG_SIZE) {