1278cec065
VFS: Add a 'type' flag to Nodes, implement EISDIR
2022-10-11 17:48:11 +02:00
da2ede3450
Kernel, libc, userspace: Implement file descriptors
...
Kernel: Implement a descriptor struct which stores the opened node and read offset, and give each task 8 of those.
Implement three syscalls: sys_read, sys_open and sys_close (sys_write still writes to the console instead of using a fd, for now)
Implement three new errors: ENOENT, EBADF and EMFILE.
libc: Implement the new errors, and the new syscalls in syscall().
Also fix _RETURN_WITH_ERRNO() to set errno correctly, which was making strerror() return null, thus crashing perror().
userspace: make init demonstrate the new file API.
2022-10-10 20:21:39 +02:00
63b2de4e3c
Basic FDs
2022-10-10 19:00:24 +02:00
bbe7c6e658
VFS: Implement resolve_path and form the initial ramdisk's VFS properly
...
Finally, resolve_path: a function which takes a path (/etc/fstab for example), and walks the VFS:
In this case, it would start with the root FS node, and ask it: "do you have a directory/file named etc?"
The node could say 'yes', 'no', or 'i'm not a directory, I'm a file' (should not be the case for the VFS root, but for the other ones it could be)
If it says yes, we continue and ask the child if it has a file named fstab. Etc...
2022-10-10 18:44:43 +02:00
2be70d0bc1
VFS: Use 64-bit numbers in read()
...
There is no need for any kind of 32-bit compatibility.
2022-10-09 21:30:38 +02:00
8158ddc94f
VFS: be more verbose
2022-10-09 21:19:22 +02:00
b38c52f8c7
more vfs stuff
2022-10-08 21:35:19 +02:00
f3d7e220ac
The beginnings of a VFS implementation!!
2022-10-08 21:22:46 +02:00
f83a6ace51
Kernel, libc: Add support for providing a status code to exit()
...
The exit() libc function already accepted an integer, but didn't pass it on to the kernel since we had no mechanism for it to do that.
Now, the kernel stores a task's exit status to display it later (and in the future, return it to userspace via wait()/waitpid())
2022-10-08 17:56:40 +02:00
abcf1b6118
Define PAGE_SIZE as 4096 and use it everywhere instead of using 4096 as a magic number
2022-10-08 14:52:28 +02:00
ce6ec3585c
Kernel, libc: Add ENOSYS
...
This error is returned by the kernel/C Library when an attempt is made to use a system call that doesn't exist.
2022-10-08 14:18:25 +02:00
a086ec514b
Remove the Superblock.h file which has never been used.
...
This file was included for a future Ext2 implementation. It should be included when said Ext2 implementation is actually started.
2022-10-08 13:28:30 +02:00
71e15e94af
Kernel, libc and userspace: Add basic errno support.
...
Kernel: Add an errno.h header with definitions for each header,
and return those, negated, from syscalls when there is an error.
mmap() returns an invalid address with errno encoded, instead of
returning a negated errno; this address is encoded as ffffffffffffffEE
where EE is errno in hex.
libc: make syscall() return -1 and set errno on error, instead of
returning the raw return value of the system call. Also, add mmap()
and munmap() wrappers in sys/mman.h :).
userspace: make the memeater program show the value of errno
when allocating memory fails.
Things to improve: add perror() and strerror() to make the errno
experience even better! >.<
2022-10-08 12:06:09 +02:00
dc389da74e
Implement an ELFImage struct
...
This struct allows us to keep track of what memory is used by the loaded executable. For some reason, freeing this memory when the task exits triggers a kernel page fault, so I'm not doing that right now.
2022-10-07 17:54:05 +02:00
594d79143e
Kernel: enable -Wconversion
2022-10-06 17:13:34 +02:00
952d8fa294
Be more strict with warnings
2022-10-05 17:34:22 +02:00
8f310dd307
PMM: Map the page bitmap to kernel heap once the PMM and VMM are both initialized
2022-10-04 18:36:09 +02:00
dae2ff8d50
Add mmap and munmap syscalls, and thus, add malloc and free to libc!! (yet again, thanks to the wonderful liballoc)
2022-10-02 20:45:04 +02:00
1ecd24f5d6
Kernel: Add SSE support (enable SSE on boot and save context (user tasks only) on task switch)
2022-10-02 18:53:54 +02:00
8e6741ebd6
Rename SYS_version to SYS_getversion
2022-10-02 17:25:56 +02:00
ac6fdce737
Add 2 new syscalls (sys_version, sys_gettid)
2022-10-01 17:30:31 +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
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
66bee86a8b
Scheduler: add a load_user_task function that directly loads a file from the initrd
2022-10-01 12:28:32 +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
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
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
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
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
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
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
3891d0c52e
Rename KernelMemoryManager to MemoryManager
...
Kind of a more catchy name, isn't it?
2022-09-24 21:45:13 +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
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
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
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
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
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
d0d2d4381c
Add a is_in_handler function to validate being in an interrupt handler
2022-09-20 17:16:07 +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
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
31460fe148
I.... think I fixed the initrd code?
2022-09-19 17:06:08 +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
783af21a7e
We are not using C
2022-09-18 09:43:29 +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
efb28d3258
Randomness and stack protection!!
2022-09-14 18:54:40 +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
1ab0f7291b
Add kdbg and kdbgln
2022-09-08 17:02:40 +02:00
9de9eacb1d
add strstr
2022-09-08 17:02:16 +02:00
276d20a33d
Remove log/Address.h, since Log.h has variadic functions now
2022-09-08 16:26:24 +02:00
b4484e951d
LOTS MORE LOGGING. which is great, of course.
2022-09-07 19:41:08 +02:00
c2391cee5d
Added config.h
2022-09-07 15:02:54 +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
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
003c730117
Make hang() noreturn
2022-09-06 12:12:55 +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
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
1b727a66ea
Ready. Set. Go!
2022-09-05 16:13:51 +02:00