a78562a822550f9f2d107d0f5b5d1c3b6cd0886a
[lunaix-os.git] / lunaix-os / kernel / k_main.c
1 #include <hal/cpu.h>
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/time.h>
7 #include <lunaix/timer.h>
8 #include <stdint.h>
9
10 extern uint8_t __kernel_start;
11
12 LOG_MODULE("LX")
13
14 void 
15 test_timer(void* payload);
16
17 void
18 _kernel_main()
19 {
20     char buf[64];
21
22     kprintf(KINFO "Hello higher half kernel world!\nWe are now running in virtual "
23            "address space!\n\n");
24
25     cpu_get_brand(buf);
26     kprintf("CPU: %s\n\n", buf);
27
28     void* k_start = vmm_v2p(&__kernel_start);
29     kprintf(KINFO "The kernel's base address mapping: %p->%p\n", &__kernel_start, k_start);
30
31     // test malloc & free
32
33     uint8_t** arr = (uint8_t**)lxmalloc(10 * sizeof(uint8_t*));
34
35     for (size_t i = 0; i < 10; i++) {
36         arr[i] = (uint8_t*)lxmalloc((i + 1) * 2);
37     }
38
39     for (size_t i = 0; i < 10; i++) {
40         lxfree(arr[i]);
41     }
42
43     uint8_t* big_ = lxmalloc(8192);
44     big_[0] = 123;
45     big_[1] = 23;
46     big_[2] = 3;
47
48     kprintf(KINFO "%u, %u, %u\n", big_[0], big_[1], big_[2]);
49
50     // good free
51     lxfree(arr);
52     lxfree(big_);
53
54     timer_run_second(1, test_timer, NULL, TIMER_MODE_PERIODIC);
55
56     spin();
57 }
58
59 static datetime_t datetime;
60
61 void test_timer(void* payload) {
62     time_getdatetime(&datetime);
63
64     kprintf(KWARN "%u/%02u/%02u %02u:%02u:%02u\r",
65            datetime.year,
66            datetime.month,
67            datetime.day,
68            datetime.hour,
69            datetime.minute,
70            datetime.second);
71 }