by rust-osdev

rust-osdev / bootimage

Tool to create bootable disk images from a Rust OS kernel.

257 Stars 30 Forks Last release: Not found Other 331 Commits 58 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Creates a bootable disk image from a Rust OS kernel.


> cargo install bootimage


First you need to add a dependency on the


# in your Cargo.toml

[dependencies] bootloader = "0.6.4"

Note: At least bootloader version

is required since
bootimage 0.7.0
. For earlier bootloader versions, use
bootimage 0.6.6

If you want to use a custom bootloader with a different name, you can use Cargo's rename functionality.


Now you can build the kernel project and create a bootable disk image from it by running:

cargo bootimage --target your_custom_target.json [other_args]

The command will invoke

cargo build
, forwarding all passed options. Then it will build the specified bootloader together with the kernel to create a bootable disk image.


To run your kernel in QEMU, you can set a

bootimage runner
as a custom runner in a
[target.'cfg(target_os = "none")']
runner = "bootimage runner"

Then you can run your kernel through:

cargo xrun --target your_custom_target.json [other_args] -- [qemu args]

All arguments after

are passed to QEMU. If you want to use a custom run command, see the Configuration section below.



has built-in support for running unit and integration tests of your kernel. For this, you need to use the
feature of Rust as described here.


Configuration is done through a through a

table in the
of your kernel. The following options are available:
# The cargo subcommand that will be used for building the kernel.
# For building using the `cargo-xbuild` crate, set this to `xbuild`.
build-command = ["build"]
# The command invoked with the created bootimage (the "{}" will be replaced
# with the path to the bootable disk image)
# Applies to `bootimage run` and `bootimage runner`
run-command = ["qemu-system-x86_64", "-drive", "format=raw,file={}"]

Additional arguments passed to the run command for non-test executables

Applies to bootimage run and bootimage runner

run-args = []

Additional arguments passed to the run command for test executables

Applies to bootimage runner

test-args = []

An exit code that should be considered as success for test executables

test-success-exit-code = {integer}

The timeout for running a test through bootimage test or bootimage runner (in seconds)

test-timeout = 300

Whether the -no-reboot flag should be passed to test executables

test-no-reboot = true


Licensed under either of

  • Apache License, Version 2.0 (LICENSE-APACHE or
  • MIT license (LICENSE-MIT or

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.