alma is a toy kernel written in C++ for x86_64 machines with the mere purpose of learning OS development
- f. Sustancia o parte principal de cualquier cosa.
Note: GIF quality is vastly reduced and native executions look clear
- Install qemu:
Ubuntu:
apt install qemu-system-x86 qemu-system-gui
Arch Linux:
pacman -S qemu qemu-arch-extra
-
Find a build to test https://ls.ecomaikgolf.com/alma/builds/
-
Download a build with wget:
wget https://ls.ecomaikgolf.com/alma/builds/CHANGEME.tar.gz
tar xf CHANGEME.tar.gz
cd CHANGEME
- Run
qemu-system-x86_64 -machine q35 -cpu qemu64 -m 256M -bios bios.bin -netdev user,id=user.0 -device rtl8139,netdev=user.0,mac=ca:fe:c0:ff:ee:00 -object filter-dump,id=f1,netdev=user.0,file=log.pcap -boot d -cdrom alma.iso
If you want to run it in real hardware, flash it to a USB device:
sudo dd bs=4M if=alma.iso of=/dev/CHANGEME conv=fdatasync status=progress
Remember that you must have certain hardware for it to work (PS2 keyboard, RTL8139 NIC, PCIe...). Even with that, running in real hardware is a dark dark place... things can go wrong.
- Download the alma build vm .ova (a 6.31GB Xubuntu 20.04 virtualbox VM ready to compile)
- Compile with the "Build Alma" icon
- Run with the "Run Alma" icon
- Update (pull) with the "Update Alma" icon
Note: Instructions tested on Ubuntu 20.04
- Install dependencies
apt install nasm iasl cmake make qemu-system-x86 qemu-system-gui git uuid-dev python python3-distutils bash texinfo bison flex build-essential mtools
make -C toolchain/
- EDKII build can be manually disabled if a compiled binary is provided or not using UEFI
- posix-uefi build can be manually disabled if bootloader is not going to be built (default behaviour)
cmake -B build
orcmake -B build -GNinja
make -C build run
orninja -C build run
- Github:
[email protected]:ecomaikgolf/alma.git
,https://github.com/ecomaikgolf/alma.git
- Gitlab:
[email protected]:ecomaikgolf/os-dev.git
,https://gitlab.com/ecomaikgolf/os-dev.git
- Selfhost:
[email protected]:alma.git
Please explain them to me: me 𝒂𝒕 ecomaikgolf ꓒσ𝗍 c0m
Take into acccount this is a Bachelor Final Project and has been developed under the pressure of a deadline among other subjects. Some things could be improved, for example, with better (and more complex) data structures, but it's not the goal of the project.
Q: Muh tons of dependencies
A: I'm compiling binutils, gdb, edk2 and posix-uefi from source
Q: 6.31GB VM
A: I can't do more. Xubuntu + "zeroed" free memory before exporting so it can be compressed.
Q: Frequently asked questions?
A: More like preanswered questions
- https://wiki.osdev.org/Main_Page
- https://youtu.be/NpcGMuI7hxk
- https://0xax.gitbooks.io/linux-insides/content/Interrupts/
- https://youtu.be/mpPbKEeWIHU
- https://www.iaik.tugraz.at/teaching/materials/os/tutorials/paging-on-intel-x86-64/
- https://git.musl-libc.org/cgit/musl/tree
- https://maskray.me/blog/2021-11-07-init-ctors-init-array
- https://blog.llandsmeer.com/tech/2019/07/21/uefi-x64-userland.html
The list is longer but I can't put each site where I read something. This list is a good place to start
Ernesto Martínez García
- me 𝒂𝒕 ecomaikgolf ꓒσ𝗍 c0m
C79F 01CE 017F 57A4 FBBB 4E22 33DD FB0A EB94 20CB
- https://ecomaikgolf.com/
- https://twitter.com/ecomaikgolf