Commit Graph

1101 Commits

Author SHA1 Message Date
6bacded5cf Update build system 2022-10-02 17:01:30 +02:00
f8a72f15c8 Adjust build system to be more flexible and to work with the new toolchain 2022-10-02 12:44:32 +02:00
c76ecdf07c Moon 0.8-dev 2022-10-01 17:35:10 +02:00
ac6fdce737 Add 2 new syscalls (sys_version, sys_gettid) 2022-10-01 17:30:31 +02:00
ba4806f9d3 Syscall: do not send user programs' output to the serial console 2022-10-01 15:53:55 +02:00
87cb41e549 Separate the logging stack into toggleable backends, to disable console logging once boot finishes. 2022-10-01 15:35:11 +02:00
0e46ea8ada Finally, a text renderer that actually works. We can now see the kernel messages without a serial port :) 2022-10-01 14:27:45 +02:00
008bdf505c Rename gfx.cpp to paint.cpp 2022-10-01 13:09:43 +02:00
30411b4b78 Fix hackiness in converting a uint32_t to a Color, by providing a function to do so 2022-10-01 13:08:47 +02:00
03db57bbf9 Sanity checks 2022-10-01 12:32:09 +02:00
66bee86a8b Scheduler: add a load_user_task function that directly loads a file from the initrd 2022-10-01 12:28:32 +02:00
1c4383dea4 Add an apps/ folder and build-system to build userspace apps which can now be loaded from the initrd 2022-10-01 12:17:16 +02:00
9012ccc49e Remove _userspace and move the idle task to assembly 2022-10-01 12:16:30 +02:00
6e6cf5b2b0 Add an ELF Loader!! 2022-10-01 12:15:56 +02:00
53d36be339 Add a much-needed get_blocks_from_size function 2022-10-01 12:13:38 +02:00
e769cb45a7 MemoryManager: add get_page_at and get_pages_at functions to map any physical memory at a fixed virtual address (inverse of get_mapping and get_mappings) 2022-10-01 12:12:50 +02:00
87f67b255e Moon 0.7-dev 2022-09-29 20:09:39 +02:00
ef5994e389 Proper userspace program 2022-09-29 20:06:18 +02:00
522d74b65d Add is_user_address and is_kernel_address functions 2022-09-29 19:30:42 +02:00
9716891eff do not fault in the userspace demo >.< 2022-09-29 19:20:31 +02:00
f25014a8ed refine syscalls 2022-09-29 19:17:43 +02:00
46f459337c Interrupts: Remove ensure_handler and use a more reliable way of detecting if we are in a handler 2022-09-29 18:35:51 +02:00
6c036dfe99 Modify the userspace task 2022-09-27 19:51:01 +02:00
692221dd9e GO FAST WHEEEEEEEEEEEEEEEE (pit tick 1 time per millisecond, so 1ms accuracy instead of 2ms like before) 2022-09-25 22:00:36 +02:00
40e8aa9ff6 Show something on the framebuffer on unsupported type, so that we can know something is going on 2022-09-25 22:00:00 +02:00
07d6fe388d Fix naming 2022-09-25 21:43:28 +02:00
f1a7138568 User mode (with a few syscalls)
IT ACTUALLY WORKS NOW.

Why wasn't it working? Oh, because I was not setting already present page tables's permissions to user mode. Just a little bug. THAT I SPENT DAYS TRYING TO FIND

Anyways, it works now. Such a relief...
2022-09-25 20:35:05 +02:00
2b700f3c1d Moon 0.6-dev 2022-09-25 18:16:49 +02:00
57bb1164e9 change 4 pages of stack per stack to a #define 2022-09-25 18:13:20 +02:00
d3527b8824 Use new and delete in Scheduler 2022-09-25 18:12:12 +02:00
ae9967c462 Add new and delete C++ operators 2022-09-25 18:12:03 +02:00
19dff40ee2 Scheduler: track total CPU time of tasks 2022-09-25 17:49:51 +02:00
3fd1b6773d Panic: Only dump stack trace if InitRD is initialized 2022-09-25 17:41:34 +02:00
a078a11dde Move PMM and VMM initialization into MemoryManager::init 2022-09-25 17:38:17 +02:00
0858db73bd Add with_value_of and with_value to MSR 2022-09-25 17:29:33 +02:00
4e62566c48 Add with_value_of and with_value to MSR 2022-09-25 17:28:38 +02:00
aee4e55fdd add a proper kernel panic 2022-09-25 16:56:00 +02:00
6fc7608c35 main: remove kmalloc/kfree example 2022-09-24 23:18:44 +02:00
059bf86ddf Scheduler: use kmalloc and kfree 2022-09-24 23:18:33 +02:00
704a23d0ad Sanity checks 2022-09-24 23:09:39 +02:00
6bd3529f32 Port liballoc to get proper kmalloc/kcalloc/krealloc/kfree functions.
Yes, that's not completely-from-scratch.
But let's be honest, am I going to do everything from scratch? Probably not. I'm not making my own bootloader.
And making a proper smaller-than-4-KB allocator is not something I want to do.
Plus, liballoc works perfectly in this rewrite, seeing as the MM code actually works, instead of leaking all your poor memory
And liballoc_{lock, unlock} can be actually defined, since we have spinlocks here!
2022-09-24 22:40:59 +02:00
2511b7d7a1 Add optional (compile-opt-in) debug logging to the MemoryManager (which helped catch the bug that got fixed in the previous commit) 2022-09-24 22:38:07 +02:00
a0af8fa432 QUICK BUGFIX: Shift PDE.Address to the left by 12 bits in VMM::getPhysical, to return the actual physical address 2022-09-24 22:35:19 +02:00
a2d23efd1b Move files with their headers in include/misc/ into src/misc/ 2022-09-24 21:46:09 +02:00
3891d0c52e Rename KernelMemoryManager to MemoryManager
Kind of a more catchy name, isn't it?
2022-09-24 21:45:13 +02:00
57b330e907 get_symbol_name: handle case where sys/moon.sym is not present in the initial ramdisk 2022-09-24 21:38:36 +02:00
f640e3d248 symbol_strlen: stop at null terminator as well as newline 2022-09-24 21:36:29 +02:00
a9444ec5e3 Provide a default symbol for get_symbol_name 2022-09-24 21:31:03 +02:00
46b7dab847 Remove RangeAllocator and make a PMM namespace 2022-09-24 21:27:45 +02:00
198f4196c4 Add an MSR utility struct 2022-09-24 20:48:27 +02:00
56ace11bb1 Copy "hello.size" bytes from hello instead of 512, who knows what there is in there... 2022-09-23 18:03:20 +02:00
7b8d30aacd Add a Device class to PCI and a PCITypes file for string names for PCI device types 2022-09-23 18:01:07 +02:00
8a93c53277 Add a Device class to PCI 2022-09-23 17:24:45 +02:00
c3e5251687 Some more userland and font failing 2022-09-23 16:41:43 +02:00
523b252960 Moon 0.4-dev 2022-09-22 08:17:02 +02:00
11dd165a8e Scheduler: add proper support for user tasks (still faults though) 2022-09-22 08:14:04 +02:00
543fe2885f Add support for user pages 2022-09-22 07:57:30 +02:00
ec01dc2927 Scheduler: Change fixed Task array for (highly inefficient) memory allocation, add userspace task support (which as memory is mapped kernel-only instantly crashes), and support for exiting a task (marking it as exited and reaping it later) 2022-09-21 21:06:00 +02:00
c6c2e286e7 Prepare our GDT for userspace 2022-09-21 21:04:15 +02:00
ee49caa6d3 Interrupts: ensure is_in_handler is true if we know we are in a handler 2022-09-21 21:03:49 +02:00
4401b31440 Remove ds from context, no need for it in x86_64, use ss instead 2022-09-21 21:03:24 +02:00
1b3b93d8bb StackTracer: add a trace_with_ip that prints the symbol name of the saved instruction pointer, for use in interrupts 2022-09-21 21:00:15 +02:00
3a69551dcc StackTracer: only trace frames within the kernel address space 2022-09-21 20:59:41 +02:00
d54ed0dc8b Make ASSERT, PANIC and TODO show a backtrace and scheduler tid if initialized 2022-09-21 20:56:40 +02:00
af8e5aca64 Add basic PCI driver 2022-09-21 17:57:02 +02:00
49ddb47ad4 Reorganize structure 2022-09-21 17:56:53 +02:00
e83d4c8ac9 Use a faster PIT tick rate 2022-09-21 07:29:44 +02:00
4f360693bd Make the demo reboot when you press a key 2022-09-20 20:51:59 +02:00
29f0253e5b Little colorful demo 2022-09-20 20:49:31 +02:00
1dce3a0cf7 Give 1 tick of CPU time to the idle task 2022-09-20 20:48:49 +02:00
5a271eaab2 Moon 0.4-dev 2022-09-20 20:05:32 +02:00
ddbe9b8b8b Few small adjustments to the scheduler 2022-09-20 20:02:08 +02:00
1c12cf016e Add a Scheduler.
Finally.

Just Round Robin with sleeping, but it's still awesome. I think this can finish v0.3, with a few adjustments.
2022-09-20 19:58:04 +02:00
e6c6a1677a Rename "SavedContext" to "Context"
Seemed like a more appropriate name.
2022-09-20 19:56:43 +02:00
063b6345ee Make reboot and shutdown disable interrupts before proceeding
This is getting important now that I've made a Scheduler (yay!!) *will get added next commit*
2022-09-20 19:54:49 +02:00
5ee8e17b76 Ensure we are in an interrupt in the interrupt handler 2022-09-20 17:16:23 +02:00
d0d2d4381c Add a is_in_handler function to validate being in an interrupt handler 2022-09-20 17:16:07 +02:00
3a796eb64c Remove semicolon from macro 2022-09-20 16:56:43 +02:00
d1141dd713 Don't need this header 2022-09-20 16:55:32 +02:00
590740e72a Change moon_version() to use a constant expression 2022-09-20 16:38:32 +02:00
1c1aa96293 Add a moon_version function that returns the full version string 2022-09-20 16:34:24 +02:00
6967fa9117 Update config.h to use a .cpp file that will be recompiled when it changes 2022-09-20 16:30:34 +02:00
15883c2dd3 Guard MOON_SUFFIX in config.h 2022-09-20 16:22:03 +02:00
7f1731ca2c Moon 0.3-dev 2022-09-19 21:13:45 +02:00
ee8c2759a6 Got a stack tracer working!! 2022-09-19 21:11:43 +02:00
9d3030763b We can fetch a symbol's name from its address!! 2022-09-19 20:54:05 +02:00
d79596f21b Add a tool to auto-generate a symbol map, borrowed from SerenityOS :) 2022-09-19 20:35:24 +02:00
d8bfb76eef Try to make TextRenderer work... still failing
I can now safely call try_initialize() in early_init though
2022-09-19 20:17:37 +02:00
86e4fce654 Separate conditions for easier debugging 2022-09-19 19:04:14 +02:00
31460fe148 I.... think I fixed the initrd code? 2022-09-19 17:06:08 +02:00
245d5e514d Optimizations in Spinlock.asm 2022-09-19 16:36:34 +02:00
cb311c4981 Add initrd/boot/moon.elf and Luna.iso to the clean Makefile target 2022-09-18 20:20:51 +02:00
99e681aeb4 Forgot to add volatile
Did I check to see if it compiled before making the previous commit? Yes, of course, why are you asking? ...
2022-09-18 20:16:46 +02:00
d4a982306f Add spinlocks 2022-09-18 20:15:19 +02:00
be31f2c017 Moon 0.2-dev 2022-09-18 17:16:44 +02:00
a42c4bd2da Add -fno-omit-frame-pointer to CFLAGS 2022-09-18 17:13:56 +02:00
aad9aa1db5 Start the call stack with a null RBP before calling _start 2022-09-18 17:03:29 +02:00
4921db7b97 Clear rax register, just in case 2022-09-18 15:24:16 +02:00
cbac61d184 Rename _test_rdseed to asm_test_rdseed 2022-09-18 15:23:08 +02:00
48fae4a971 Cache RDSEED and RDRAND presence 2022-09-18 15:22:43 +02:00
183c3236d4 Fix terminology in keyboard IRQ 2022-09-18 09:47:58 +02:00
f7e7a6661d Use kernel logging in interrupts instead of plain old printf() 2022-09-18 09:43:58 +02:00
783af21a7e We are not using C 2022-09-18 09:43:29 +02:00
59ab8c016d Load a bare-bones TSS for CPU0 2022-09-17 17:40:35 +02:00
355ca6ea9f Change initrd/sys/config 2022-09-15 18:42:59 +02:00
9d19765b0e Add the ability to toggle loglevels in KernelLog 2022-09-15 18:42:38 +02:00
18140a55ec Make strstr take a const char* as a needle instead of a char* 2022-09-15 18:42:18 +02:00
0b278b2be2 Make divisor in PIT.cpp static 2022-09-15 18:12:43 +02:00
f33178a320 Log random number generation initialization 2022-09-15 18:07:17 +02:00
3e2c413b6a add module to stack.cpp 2022-09-14 19:02:36 +02:00
efb28d3258 Randomness and stack protection!! 2022-09-14 18:54:40 +02:00
db4c8e96b8 commit 2022-09-14 17:55:24 +02:00
0cb59ee17f please work please 2022-09-11 08:23:32 +02:00
d418842a48 Update TextRenderer to use kerrorln 2022-09-10 22:17:18 +02:00
f98a45aefe Updated InitRD to use virtual mappings 2022-09-10 22:15:19 +02:00
4aeada05d3 Remove unused drawing files 2022-09-10 18:44:14 +02:00
6a0cf7cf98 New framebuffer class!! 2022-09-10 18:42:40 +02:00
e3e2952661 Consistent naming 2022-09-10 18:06:46 +02:00
fe672e6a18 Use appropriate logging functions 2022-09-08 17:03:17 +02:00
1ab0f7291b Add kdbg and kdbgln 2022-09-08 17:02:40 +02:00
9de9eacb1d add strstr 2022-09-08 17:02:16 +02:00
f3f9756106 Remove unused headers in main.cpp 2022-09-08 16:30:15 +02:00
276d20a33d Remove log/Address.h, since Log.h has variadic functions now 2022-09-08 16:26:24 +02:00
d1498a5e82 Change module of RSDT from "acpi/rsdt" to "acpi" 2022-09-08 16:23:39 +02:00
76a3ceab32 Replace kinfoln with kwarnln where appropriate 2022-09-08 16:22:46 +02:00
3da3fd2c11 Update messages 2022-09-08 16:18:11 +02:00
929962efc9 Fixed size counting in RangeAllocator
Which was displaying VERY wrong sizes beforehand. (Number of regions * 4096 instead of number of bytes)
2022-09-07 20:01:44 +02:00
b4484e951d LOTS MORE LOGGING. which is great, of course. 2022-09-07 19:41:08 +02:00
0cc3900e88 Make building with debug symbols conditional in the Makefile 2022-09-07 15:05:57 +02:00
c2391cee5d Added config.h 2022-09-07 15:02:54 +02:00
aa6c578a3c Fix bug in internal_printf 2022-09-07 15:02:38 +02:00
e936a143d3 MAKE LOG FUNCTIONS VARIADIC!! 2022-09-07 15:02:23 +02:00
1820286d8b stuff 2022-09-07 10:33:22 +02:00
97aef95daa Fix format specifiers 2022-09-06 18:31:27 +02:00
c9e13f0128 Add attribute(format) to *printf to detect ill-formed calls to those functions 2022-09-06 18:25:38 +02:00
bd0a24097f Add a KernelMemoryManager namespace to wrap PMM + VMM 2022-09-06 18:08:15 +02:00
0fbc68ca88 Finish VMM 2022-09-06 13:49:17 +02:00
8bff2ee0f5 Add a RangeAllocator which serves as a physical memory allocator 2022-09-06 13:21:54 +02:00
716974a916 Add a minimal shutdown method, that only works on emulators (at least for now) 2022-09-06 12:13:43 +02:00
a8aca62771 Remove loop from the end of reboot since hang is now noreturn as well 2022-09-06 12:13:20 +02:00
003c730117 Make hang() noreturn 2022-09-06 12:12:55 +02:00
99192204fe Update main.cpp with new functionality 2022-09-06 11:48:06 +02:00
a1659aa127 Add a reboot() function
This reboot function first tries to reboot using ACPI, then pulsing the CPU's RESET line through the keyboard, then triple-faulting. If we're still there, it halts.
2022-09-06 11:47:55 +02:00
aa673e1402 Add FADT header 2022-09-06 11:47:00 +02:00
5b132e3197 Fix FindTable method to work properly with RSDT instead of XSDT 2022-09-06 11:46:47 +02:00
f7f8c1068a Move SDTHeader to separate file 2022-09-06 11:46:26 +02:00
78fe37ddb3 Move declaration of IDTR to header 2022-09-06 11:44:37 +02:00
6a6be3292d Memory::get_system and Memory::get_usable 2022-09-05 17:13:12 +02:00
1367e88d88 Finally implement %l and %z format modifiers
Finally, we can use %zx with a 64-bit number instead of %x%x with 2 32-bit values split from a 64-bit number!
2022-09-05 16:59:45 +02:00
b47b86884f Removed InitRD test code from main.cpp 2022-09-05 16:29:32 +02:00
1b727a66ea Ready. Set. Go! 2022-09-05 16:13:51 +02:00