Andreas Kling
98f76f0153
Flush the TLB after modifying page tables.
...
This is a very inefficient naive implementation, but it gets us going.
Mapping tasks in and out of a shared address space now totally works.
2018-10-23 11:03:56 +02:00
Andreas Kling
fe237ee215
Lots of hacking:
...
- Turn Keyboard into a CharacterDevice (85,1) at /dev/keyboard.
- Implement MM::unmapRegionsForTask() and MM::unmapRegion()
- Save SS correctly on interrupt.
- Add a simple Spawn syscall for launching another process.
- Move a bunch of IO syscall debug output behind DEBUG_IO.
- Have ASSERT do a "cli" immediately when failing.
This makes the output look proper every time.
- Implement a bunch of syscalls in LibC.
- Add a simple shell ("sh"). All it can do now is read a line
of text from /dev/keyboard and then try launching the specified
executable by calling spawn().
There are definitely bugs in here, but we're moving on forward.
2018-10-23 10:12:50 +02:00
Andreas Kling
b824f15619
Launching an arbitrary ELF executable from disk works! :^)
...
This is so cool! It's a bit messy now with two Task constructors,
but eventually they should fold into a single constructor somehow.
2018-10-22 15:43:02 +02:00
Andreas Kling
befeabd8fe
Okay, with some mucking around, there is now a /bin/id and it runs!
...
It statically links against everything in LibC that it needs.
This will work just fine for a long time to come!
2018-10-22 14:41:54 +02:00
Andreas Kling
63764b3a65
Import very modest Userland.
2018-10-22 14:06:22 +02:00
Andreas Kling
85bcf2ed0f
Add getgid() and getpid() syscalls. Prep for LibC.
2018-10-22 13:55:11 +02:00
Andreas Kling
bae59609e3
Move kprintf to its own file. It has nothing to do with VGA anymore.
2018-10-22 13:20:35 +02:00
Andreas Kling
702d308e67
Oops, StringImpl's "the empty string" global was not always initialized.
...
These "oops forgot to initialize" bugs are getting annoying...
2018-10-22 13:10:08 +02:00
Andreas Kling
c5e55f4737
Use UD2 instead of CLI;HLT for CRASH().
...
This way the kernel prints out a nice register dump so we can find
out where we crashed.
2018-10-22 13:07:06 +02:00
Andreas Kling
a9ca75c98b
Add IRQHandler class that can be subclasses to handle an IRQ.
...
Also move Keyboard to a class implementation using this pattern.
2018-10-22 12:58:29 +02:00
Andreas Kling
8f941561b4
Add ALWAYS_INLINE macro.
2018-10-22 12:55:59 +02:00
Andreas Kling
e4afa2a041
Tweak _test.o to use the putch() syscall.
...
It's still running in kernel space. Once I make it possible for ELFLoader
to set up a ring 3 task, we'll really be cooking!
2018-10-22 11:53:59 +02:00
Andreas Kling
3a3c57357c
Add a sys$exit and make init_stage2 call it when finished.
2018-10-22 11:43:55 +02:00
Andreas Kling
79ffdb7205
A lot of hacking:
...
- More work on funneling console output through Console.
- init() now breaks off into a separate task ASAP.
- ..this leaves the "colonel" task as a simple hlt idle loop.
- Mask all IRQs on startup (except IRQ2 for slave passthru)
- Fix underallocation bug in Task::allocateRegion().
- Remember how many times each Task has been scheduled.
The panel and scheduling banner are disabled until I get things
working nicely in the (brave) new Console world.
2018-10-22 11:15:16 +02:00
Andreas Kling
09fc9c0698
Make Console::m_rows/m_columns const for now.
2018-10-21 23:48:50 +02:00
Andreas Kling
e38f40a83c
Add an InlineLinkedList::containsSlow(T*) helper.
2018-10-21 23:48:27 +02:00
Andreas Kling
fc88368582
Have Console::write() directly call vga_putch.
2018-10-21 22:44:26 +02:00
Andreas Kling
a70bfb87d5
Add a Console device and start refactoring screen output.
2018-10-21 21:59:43 +02:00
Andreas Kling
d5ec18027e
Protect the first 4 KB of memory.
...
This makes null pointers crashy, tremendously useful :^)
2018-10-21 21:59:11 +02:00
Andreas Kling
dd6706a1a1
Fix null deref in contextSwitch().
2018-10-21 21:57:43 +02:00
Andreas Kling
2f99ff801e
Move post-boot kernel stack pointer to 0x4000.
2018-10-21 21:51:12 +02:00
Andreas Kling
46ff281695
Turn the syscall interrupt into a trap (by switching the gate type.)
...
This leaves interrupts enabled while we're in the kernel, which is
precisely what we want.
This uncovered a horrendous problem with kernel tasks silently
overflowing their stacks. For now I've simply increased the stack size
but I need a more MMU-y solution for this eventually.
2018-10-19 11:31:18 +02:00
Andreas Kling
97e0d75bcb
ELFLoader works inside the kernel!
...
We load /_hello.o which just prints out a simple message.
It executes inside the kernel itself, so no fancy userspace process
or anything, but this is still so cool!
2018-10-18 15:46:08 +02:00
Andreas Kling
6ab0649ad6
ksprintf() should null-terminate strings.
2018-10-18 15:24:07 +02:00
Andreas Kling
c149d2a8f0
Build ELFLoader into Kernel.
2018-10-18 15:03:10 +02:00
Andreas Kling
3649638259
Add Regions concept to Task.
2018-10-18 14:55:20 +02:00
Andreas Kling
5b10846bed
Add a simple ELF binary called _test.o to the test fs.
2018-10-18 13:16:30 +02:00
Andreas Kling
f67d695254
More paging stuff.
...
The test userspace process now runs at linear address 0x300000 which is
mapped to a dynamically allocated page from the MemoryManager. Cool!
2018-10-18 13:05:00 +02:00
Andreas Kling
89851a9ded
Use FileHandle from VFS.
2018-10-18 10:28:09 +02:00
Andreas Kling
9d5de91cf3
Actually destroy tasks after they crash.
2018-10-18 00:26:30 +02:00
Andreas Kling
1a801e5737
Hang if we GPF in ring 0.
2018-10-18 00:13:06 +02:00
Andreas Kling
56c1f9db8e
A userspace process can now GPF and the OS goes on!
...
This is really rickety, but it kinda sorta works for my test GPF!
2018-10-17 23:49:32 +02:00
Andreas Kling
77299cf54d
Add basic paging. Only identity maps the bottom 4MB as a start.
2018-10-17 23:13:55 +02:00
Andreas Kling
286e27ef40
Allow running in QEMU with "./run q"
...
The kernel doesn't run in QEMU right now and I don't know why.
2018-10-17 16:58:35 +02:00
Andreas Kling
8ff394f83f
Fix a dumb in buffer_putch.
2018-10-17 16:56:47 +02:00
Andreas Kling
9aa88fe186
Add a PIC::getISR() helper.
2018-10-17 16:54:49 +02:00
Andreas Kling
e0f31d38a2
Add -fno-pic -fno-pie to build flags.
2018-10-17 16:49:30 +02:00
Andreas Kling
f82b25d4f9
Fix some minor build warnings.
2018-10-17 16:48:43 +02:00
Andreas Kling
39fa1eb2c2
Print the contents of motd.txt on boot.
2018-10-17 12:07:39 +02:00
Andreas Kling
705832f387
List the root directory after mounting /.
...
So cool that it works! It's spewing out a bunch of terminal escape sequences
that the OS console obviously doesn't support, but we'll get there too.
2018-10-17 11:47:14 +02:00
Andreas Kling
b05ed591ab
VFS mounts an ext2fs root! :^)
2018-10-17 11:44:06 +02:00
Andreas Kling
d2425495ca
VirtualFileSystem class builds inside Kernel.
2018-10-17 11:40:58 +02:00
Andreas Kling
9171521752
Integrate ext2 from VFS into Kernel.
2018-10-17 10:57:23 +02:00
Andreas Kling
aec8ab0a60
Add the basic character devices to kernel.
2018-10-16 14:33:16 +02:00
Andreas Kling
12e515735b
Add a simple IDEDiskDevice class that implements DiskDevice from VFS.
2018-10-16 14:17:43 +02:00
Andreas Kling
72bb80a9ae
These changes were lying around uncommitted in the old repo.
...
I'm just gonna commit them without too much thinking and then take
it from there.
2018-10-16 11:06:35 +02:00
Andreas Kling
87d41bdca4
If an interrupt comes from the slave PIC, both PICs need an EOI.
2018-10-16 11:05:29 +02:00
Andreas Kling
9396108034
Import the "gerbert" kernel I worked on earlier this year.
...
It's a lot crappier than I remembered it. It's gonna need a lot of work.
2018-10-16 11:02:00 +02:00