2 #include <lunaix/syslog.h>
3 #include <lunaix/mm/kalloc.h>
4 #include <lunaix/mm/vmm.h>
5 #include <lunaix/spike.h>
6 #include <lunaix/clock.h>
7 #include <lunaix/timer.h>
8 #include <lunaix/keyboard.h>
9 #include <lunaix/tty/tty.h>
10 #include <lunaix/lunistd.h>
11 #include <lunaix/proc.h>
13 extern uint8_t __kernel_start;
18 test_timer(void* payload);
23 // 这里是就是LunaixOS的第一个进程了!
24 for (size_t i = 0; i < 10; i++)
27 if (!(pid = fork())) {
30 // kprintf(KINFO "Process %d\n", i);
35 kprintf(KINFO "Forked %d\n", pid);
40 kprintf(KINFO "Hello higher half kernel world!\nWe are now running in virtual "
41 "address space!\n\n");
44 kprintf("CPU: %s\n\n", buf);
46 void* k_start = vmm_v2p(&__kernel_start);
47 kprintf(KINFO "The kernel's base address mapping: %p->%p\n", &__kernel_start, k_start);
49 // no lxmalloc here! This can only be used within kernel, but here, we are in a dedicated process!
50 // any access to kernel method must be done via syscall
52 struct kdb_keyinfo_pkt keyevent;
55 if (!kbd_recv_key(&keyevent)) {
59 if ((keyevent.state & KBD_KEY_FPRESSED) && (keyevent.keycode & 0xff00) <= KEYPAD) {
60 tty_put_char((char)(keyevent.keycode & 0x00ff));
69 static datetime_t datetime;
71 void test_timer(void* payload) {
72 clock_walltime(&datetime);
74 kprintf(KWARN "%u/%02u/%02u %02u:%02u:%02u\r",