A toy OS written in Rust. The name is a reference to the old logo of a certain rust removal product.
So far, it is not much more than a UEFI bootloader with some in-progress support for ACPI (including an AML parser and interpreter).
This is mainly a personal learning project to get familiar with Rust, as well as to update my knowledge about OS internals and hardware that's newer than the PC/AT. 🙃
Tested on macOS and Linux.
- Rust 1.86.0 nightly toolchain
- QEMU 5.1
- bash, for the QEMU launcher script
- Python 3.2+ for booting 32-bit Arm only
In order to edit the ACPI parser integration tests, you will also need tools documented at acpi/tests/parse/README.md.
Suggested additional tools:
Note that when building, running, or testing with Cargo, the build settings will depend on your current directory due to the provided Cargo configuration files:
- From the main directory, Cargo will build for your host system by default, using the prebuilt standard Rust libraries from your toolchain.
- From the
uefi/
directory, Cargo will compile the standard rust libraries for the specified--target
, which isx86_64-unknown-uefi
by default. This is configured inuefi/.cargo/config.toml
.
cargo build
To build the kernel for the target system:
(cd kernel && cargo build --target target-specs/<ARCH>-unknown-kernel.json)
# Or alternatively, from outside the kernel/ directory:
cargo build --package tartan-kernel -Z build-std \
--target kernel/target-specs/<ARCH>-unknown-kernel.json
Where <ARCH>
is one of:
x86_64
i686
aarch64
arm
To build the UEFI bootloader for the target system:
(cd uefi && cargo build --target target-specs/<ARCH>-unknown-uefi.json)
# Or alternatively, from outside the uefi/ directory:
cargo build --package tartan-uefi -Z build-std \
--target uefi/target-specs/<ARCH>-unknown-uefi.json
The UEFI application (a PE image) will be emitted at
target/<ARCH>-unknown-uefi/debug/tartan-uefi.efi
.
Note that for the arm
target, the PE image does not have the "machine type" expected by
the UEFI runtime, so it will not boot as-is. This is fixed with a Python script when
booting via cargo run
(see below), but you will have to manually fix it if you deploy
the application yourself. See uefi/script/boot.sh
.
./uefi/script/build-and-boot.sh <ARCH>
This builds the kernel and UEFI bootloader and then launches the UEFI application in QEMU
using uefi/script/boot.sh
.
cargo test
Runs tests on your host system. There is currently no support for running the tests on the target architecture in QEMU.
cargo doc --open
Documentation from the latest build is available at https://tartan.cimbul.com/.
cargo clippy --all-targets
© Copyright 2020 Tim Yates
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
I would be willing to release this under a more permissive license if someone finds it useful, but I don't expect that to be the case.