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 all
to build ESALP make run
and 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=yes
andmake 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=yes
to both make commands, the prefixx86_64-elf-
will be added to all binutils commands. int=yes
prints out the registers on an interrupt andreboot=no
stops qemu from rebooting. If you're stuck in an infinite reboot loop,make run int=yes reboot=no
could be helpful- If kvm is your thing, run with
kvm=yes
This code is licensed under the MIT license. See LICENSE for more details.