fc57669154f79a48bfd5f004fa98326bca85ecfb
[lunaix-os.git] / lunaix-os / kernel / k_main.c
1 #include <hal/cpu.h>
2 #include <hal/rtc.h>
3 #include <libc/stdio.h>
4 #include <lunaix/mm/kalloc.h>
5 #include <lunaix/mm/vmm.h>
6 #include <lunaix/spike.h>
7 #include <stdint.h>
8
9 extern uint8_t __kernel_start;
10
11 void
12 _kernel_main()
13 {
14     char buf[64];
15
16     printf("Hello higher half kernel world!\nWe are now running in virtual "
17            "address space!\n\n");
18
19     cpu_get_brand(buf);
20     printf("CPU: %s\n\n", buf);
21
22     void* k_start = vmm_v2p(&__kernel_start);
23     printf(
24       "The kernel's base address mapping: %p->%p\n", &__kernel_start, k_start);
25
26     // test malloc & free
27
28     uint8_t** arr = (uint8_t**)lxmalloc(10 * sizeof(uint8_t*));
29
30     for (size_t i = 0; i < 10; i++) {
31         arr[i] = (uint8_t*)lxmalloc((i + 1) * 2);
32     }
33
34     for (size_t i = 0; i < 10; i++) {
35         lxfree(arr[i]);
36     }
37
38     uint8_t* big_ = lxmalloc(8192);
39     big_[0] = 123;
40     big_[1] = 23;
41     big_[2] = 3;
42
43     printf("%u, %u, %u\n", big_[0], big_[1], big_[2]);
44
45     // good free
46     lxfree(arr);
47     lxfree(big_);
48
49     rtc_datetime datetime;
50
51     rtc_get_datetime(&datetime);
52
53     printf("%u/%u/%u %u:%u:%u",
54            datetime.year,
55            datetime.month,
56            datetime.day,
57            datetime.hour,
58            datetime.minute,
59            datetime.second);
60 }