From: Minep Date: Sat, 25 Jun 2022 20:46:23 +0000 (+0100) Subject: Merge branch 'console-dev' X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/commitdiff_plain/db4d7d52fa00cc2fd3f25d971f57b73406d816ba?ds=sidebyside;hp=-c Merge branch 'console-dev' --- db4d7d52fa00cc2fd3f25d971f57b73406d816ba diff --combined lunaix-os/kernel/lxinit.c index 2ac9342,8a19841..a767ec7 --- a/lunaix-os/kernel/lxinit.c +++ b/lunaix-os/kernel/lxinit.c @@@ -2,13 -2,14 +2,13 @@@ #include #include #include + #include #include #include #include -#include #include #include #include - #include 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() { @@@ -31,6 -53,12 +31,6 @@@ } #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, @@@ -61,12 -89,12 +61,11 @@@ 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); @@@ -74,7 -102,11 +73,7 @@@ 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); @@@ -100,7 -132,7 +99,7 @@@ } 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 79ef12e,cece368..61a6dfc --- a/lunaix-os/kernel/proc0.c +++ b/lunaix-os/kernel/proc0.c @@@ -1,6 -1,7 +1,7 @@@ #include #include #include + #include #include #include #include @@@ -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(); @@@ -118,6 -107,8 +113,8 @@@ syscall_install(); + console_start_flushing(); + unlock_reserved_memory(); for (size_t i = 0; i < (uintptr_t)(&__init_hhk_end); i += PG_SIZE) {