This is a toy project.
I rewrote the UEFI headers from the specification (UEFI Specs. v.2.6) so that this UEFI application wouldn't require any libraries to compile.
This project requires mtoc
to finish compilation (converts the MachO executable to a Portable Executable format with the EFI required header). You can compile it as part of the developer tools from OpenSource Apple.
Testing is performed using QEMU emulation together with the OVMF boot-loader, which is part of the tianocore EDK II package.
My goals:
- Create a simple OS that prints "BoOS booted" and nothing else.
- Get
clang
to run on BoOS. - Slowly work my way towards and implement some core POSIX features.
You can use the boilerplate version if you want to start your own kernel and OS using macOS and clang
for your development environment. However, the UEFI headers might have been updated since then, so you might want to copy these from the latest version.
Resources I read through or used:
- OSDev website and data
- EUFI specs
- A x64 OS #1: UEFI (Blog post for hello world kernel)
- BIOS Interrupt table
- WikiBook X86 Assembly
- QEMU emulation - I use this for loading and testing the kernel.
- tianocore EDK II package - for the OVMF testing UEFI boot loader.
- OpenSource Apple used to convert MachO to a UEFI compliant PE.
- There's an MIT course with an educational OS project I hadn't read yet.
- Github book listing for OS development.