ESALP ![Build Status](https://travis-ci.org/ESALP/ESALP-1.svg?branch=master)
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.
Project Goals
- No C environment
- ESALP will be written in Rust (and some Assembler of course)
- Flexibility
- More to come
Features
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
- Text-based unit tests powered by TAP
- Multitasking
- More to come
How to Compile
- Install packages, ESALP requires
xargo
, nasm
, grub-mkrescue
, ld
, and a unix environment to build. To run, use qemu
.
- Use
make all
to build ESALP
make run
and you're done!
If you want to run regressions, use make test
Compilation on macOS
ESALP also supports compilation on macOS. As macOS uses mostly Apple's infrastructure rather than linux's, it requires a bit more setup.
Compile Assembly on macOS
- Homebrew
- gcc
- autoconf
- xorriso
- nasm
- MacPorts
- libmpc
- gmp
- mpfr
- 2.5. Optional: Compile libiconv
- Cross-compile Binutils
- Cross-compile GCC
- Compile grub
- Install rustup
- Get the proper nightly build in your folder
- Homebrew
- put a symlink to openssl in /usr/local/include
- Install xargo
- "cargo install xargo"
Running on macOS
- Because we cross-compiled binutils earlier, we need to use
make all cross=yes
and make run cross=yes
Notes:
- 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 prefix x86_64-elf-
will be added to all binutils commands.
int=yes
prints out the registers on an interrupt and reboot=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
Licensing
This code is licensed under the MIT license. See LICENSE for more details.