803ac0879b32c66473f4f9b7317581d62bff0f66
Previously the build process removed everything and did all the build again on each make invocation. This fixes this behaviour with two changes. First dynamically find the list of files to build using find instead of a manually written list. Then use implicit rules to only build files that need to be built again instead of recompiling everything.
pepperOS: "will never be done"
Trying the kernel
First install the dependencies: sudo apt install python3 xorriso make qemu-system
Also, you have to get an x86_64 toolchain for compilation. The easiest way to do that on most systems is to install it from Homebrew:
brew install x86_64-elf-gcc
Then, to compile the kernel and make an ISO image file: make build-iso
To run it with QEMU, make run
TODO
The basics that I'm targeting are:
Basic utility of what we call a "kernel"
- Implement tasks, and task switching + context switching and spinlock acquire/release
- Load an executable
- Filesystem (TAR for read-only initfs, then maybe read-write using FAT12/16/32 or easier fs) w/ VFS layer
- Getting to userspace (ring 3 switching, syscall interface)
- Porting musl libc or equivalent
Scalability/maintenance/expansion features
- Documentation
- SOME error handling in functions
- Unit tests
- Good error codes (like Linux kernel: ENOMEM, ENOENT, ...)
Optional features
In the future, maybe?
- SMP support (Limine provides functionality to make this easier)
- Parsing the ACPI tables and using them for something
- Replacing the PIT timer with APIC
Thanks
PepperOS wouldn't be possible without the following freely-licensed software:
- the Limine portable bootloader
- Marco Paland's freestanding printf implementation
- Mintuski's Flanterm terminal emulator
...and without these amazing resources:
- the OSDev wiki & forums
- Intel 64 and IA-32 Architectures Software Developer's Manual
- Documentation for the GNU Compiler Collection
Languages
C
97.2%
Assembly
1.7%
Makefile
0.7%
Python
0.3%