A Simple x86 Operating System written in C.
The Kernel is loaded by Grub2. The boot configuration is located in rootfs/boot/grub/grub.cfg
.
The Kernel is loaded by Grub2 using the Multiboot 2 protocol. The Kernel is loaded at 0x100000
and is loaded in 32-bit mode.
The Kernel parses the MBR and finds its own partition. It does not support extended partitions. Then it setups the filesystem and mounts it.
The Kernel supports FAT12 and FAT16. It can read files and directories. The Kernel cannot write to FAT12/16.
The Kernel supports Ext2. It can read files and directories. The Kernel cannot write to Ext2.
The Kernel supports syscalls via the int 0x80
instruction. Currently the following syscalls are supported:
sys_write
sys_read
sys_open
sys_close
sys_stat
sys_getpid
sys_fork
sys_execve
sys_exit
The Kernel can parse ELF files and execute them. It can also load debug symbols from itself.
Currently the Kernel is built as a single binary. In the future it will be split into modules. The Kernel will load the modules from the filesystem.
The Kernel supports the Intel 82540EM series of network cards. It can send and receive packets. The following protocols are supported:
- ARP
- IPv4
- UDP
- TCP
- DHCP
- DNS
The Kernel is built on top of a primitive libc. It is located in kernel/libc
. There's also a system/libc
which is used by the userspace programs and in the future will generate a shared library.
- Grub2
- Multiboot 2
- MBR Parsing
- FAT12/16
- Ext2
- ISO9660
- x86_64
- Syscalls
- Multitasking
- Virtual Memory
- ELF parsing
- [] Dynamic Linking
- Kernel Modules
- ACPI
- ACPICA
- PCI
- ATA
- ATAPI
- Networking
- Virtual File System
- Init System
- Shell
- Libc