Endangered Soaring African Lynx-Pidgeon is a work in progress OS by Calvin Lee and JJ Garzella
It is an implimentation of Phillipp Oppermann's Blog OS, go check out that repository and his blog for more details.
- No C environment
- ESALP will be written in Rust (and some Assembler of course)
- Flexibility
- More to come
Right now it doesn't do much, but more is added every day!
Current features:
- Interaction
- Can print to the VGA text buffer (in 255 different colors!)
- Simple PS/2 keyboard driver
- with multiple keyboard maps
- Can print to the serial bus
- Memory
- Simple paging
- With physical frame allocation and deallocation
- Kernel space heap
- Simple paging
- Text-based unit tests powered by TAP
- Multitasking
- Basic kernel threads
- More to come
- Install packages, ESALP requires
xargo,nasm,grub-mkrescue,ld, and a unix environment to build. To run, useqemu. - Use
make allto build ESALP make runand you're done!
If you want to run regressions, use make test
ESALP also supports compilation on macOS. As macOS uses mostly Apple's infrastructure rather than linux's, it requires a bit more setup.
- Homebrew
- gcc
- autoconf
- xorriso
- nasm
- MacPorts
- libmpc
- gmp
- mpfr
- 2.5. Optional: Compile libiconv
- Cross-compile Binutils
- use phil's page: http://os.phil-opp.com/cross-compile-binutils.html
- include option --program-prefix
- Cross-compile GCC
- use OSDev page: http://wiki.osdev.org/GCC_Cross-Compiler
- include option --program-prefix
- Compile grub
- use OSDev page on grub: http://wiki.osdev.org/GRUB#Installing_GRUB2_on_Mac_OS_X
- put in platform-specific tools
- Install rustup
- Get the proper nightly build in your folder
- Homebrew
- cmake
- openssl
- put a symlink to openssl in /usr/local/include
- Install xargo
- "cargo install xargo"
- Because we cross-compiled binutils earlier, we need to use
make all cross=yesandmake run cross=yes
- If your system binutils is not x86_64-elf format, for example in macOS (see above), you need to cross-compile binutils. By adding
cross=yesto both make commands, the prefixx86_64-elf-will be added to all binutils commands. int=yesprints out the registers on an interrupt andreboot=nostops qemu from rebooting. If you're stuck in an infinite reboot loop,make run int=yes reboot=nocould be helpful- If kvm is your thing, run with
kvm=yes
This code is licensed under the MIT license. See LICENSE for more details.