ChaOS is an SMP-aware kernel that we are doing as a part of our studies at Epitech.
make
gcc
orclang
(latest version, ideally)grub-mkrescue
andlibisoburn
(usually packed with other binaries asgrub
)mtools
dialogs
qemu
(cpu emulator) optional
If you are using apt-get
as your package manager (Debian
, Ubuntu
etc.), you can use this command to install all dependencies:
apt-get install qemu grub-pc-bin xorriso mtools
If you are using pacman
as your package manager (ArchLinux
, Manjaro
etc.), you can use this command:
pacman -Syu dialog qemu grub libisoburn mtools
If you are using portage
as your package manager (Gentoo
), you can use this command instead:
emerge --ask sys-boot/libisoburn sys-fs/dosfstools sys-fs/mtools
If you are using an other package manager, well... Good luck! :p
First, tune as you wish the kernel's configuration with
make config
Then, build the kernel:
make kernel
To build a complete iso with grub installed (suitable for USB flash drives or virtual machines), run
make iso
If you want to run ChaOS through QEMU even if it's boring & useless right now, run
make run
- Kernel options
- Kernel architecture
- Kernel placed in high-addresses
- Boot
- Multiboot
- Paging setup
- GDT setup
- IDT setup
- TSS setup
- SMP setup
- Basic drivers
- VGA
- Serial
- PS/2 Keyboard
- Memory
- Physical Memory Management
- Virtual Memory Management (
mmap()
,munmap()
etc.) - Virtual segments of memory
- Kernel heap (
kalloc()
,kfree()
,krealloc()
)
- ELF Program execution (
exec()
) - Syscall interface and userspace (ring 3)
- Multi process / threads
- Scheduling
- User Threads
- Kernel threads
- Processes (mix of
clone()
,exec()
andexit()
)
- Initrd loading, reading and writing
- Device abstraction
- Filesystem
- Directory listing (
opendir()
,readdir()
,closedir()
) - Creating and removing files/directories (
mkfile()
,mkdir()
,remove()
) - File basic IO operations (
open()
,read()
,write()
,close()
) - File advanced IO operations (
pipe()
,dup()
) - File informations (
stat()
)
- Directory listing (
- User space programs (init, tty, shell, basic binaries such as
echo
,ls
,rm
,mkdir
etc.) - Virtual filesystems (
/proc
,/dev
)
Fork me!