Commit Graph

67 Commits

Author SHA1 Message Date
97461c7c1f Prepare for moon 0.11 2022-10-14 19:49:52 +02:00
cdb73836b0 Some more multiple address space stuff
This page-faults. This is because the memory where the ELF should be is all zeroes, which the CPU tries to interpret.
2022-10-14 17:37:51 +02:00
26211bd49f It (almost) works now
The only thing doing weird stuff is exec(), so that's commented out and throws ENOSYS right now.

But we have two user tasks running in parallel, isolated from each other!
2022-10-14 16:46:00 +02:00
24272c57ef Almost there! 2022-10-13 21:55:51 +02:00
ee712432bd Some more multiple address space stuff
This page-faults. This is because the memory where the ELF should be is all zeroes, which the CPU tries to interpret.
2022-10-13 21:14:39 +02:00
229b06c63b Add basic address space infrastructure 2022-10-13 19:19:51 +02:00
0c451e504e Kernel: Mounting /dev MUST succeed 2022-10-11 19:53:55 +02:00
04da26bff5 kernel: add a few comments 2022-10-11 19:51:24 +02:00
0131193379 ELFLoader, Scheduler: Transition to use VFS
We should start to drop the old InitRD API, which only allows for files to be loaded from the initrd, and which forces pathnames to be relative (bin/init)
With VFS, we can load any kind of file from any kind of filesystem, and using paths that make sense (/bin/init)
2022-10-11 19:33:48 +02:00
86b50a6aa0 Remove random demos
Cool, but cumbersome in practice: have to continually restart until I get the demo I want.

So let's stick to init for now.
2022-10-11 19:25:19 +02:00
0a7d4a530d VFS, DeviceFS: Implement a device filesystem
For now, we just have a version device. (this will allow us to get rid of sys_getversion!!)
More should be implemented soon.
2022-10-11 19:21:16 +02:00
4aa3da8c12 VFS: Add basic mount(), unmount() and mkdir() functions (not accessible to userspace yet) 2022-10-11 18:23:00 +02:00
7a097f16ea apps: add a new example app which does all kinds of stdio misbehaving >.< 2022-10-11 17:31:06 +02:00
667d308fc3 kernel/main.cpp: remove obsolete reference to _userspace 2022-10-11 17:30:40 +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
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
b7ee746da3 Kernel: Enable even more warnings 2022-10-07 18:10:20 +02:00
594d79143e Kernel: enable -Wconversion 2022-10-06 17:13:34 +02:00
5d8b825659 Add a few example apps/demos in C, and make the kernel choose a random one to demonstrate every boot 2022-10-03 21:24:38 +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
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
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
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
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
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
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
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
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
29f0253e5b Little colorful demo 2022-09-20 20:49:31 +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
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
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