Uses new Rust 2021
|0.9.27||Nov 26, 2022|
|0.9.23||Oct 28, 2022|
|0.9.8||May 31, 2022|
|0.9.7||Feb 7, 2022|
|0.1.0||Nov 24, 2020|
#34 in Operating systems
481 downloads per month
Used in fewer than 12 crates
Core files for the Xous microkernel operating system.
This repository contains everything necessary to build the Xous kernel from source. It consists of the following projects:
- kernel: core memory manager, irq manager, and syscallhandler
- loader: initial loader used to start the kernel
- tools: programs used to construct a final boot image
- docs: documentation on various aspects of Xous
- emulation: Renode scripts used to emulate Xous
- xous-rs: userspace library
- Xous requires its own Rust target,
riscv32imac-unknown-xous-elf. If you run
cargo xtaskfrom the command line, you should be prompted to install the target automatically if it does not already exist.
- You may need to remove the
target/directory before building, if
rustccontinues to behave like it can't find the
xoustarget even after it is installed.
- If you plan on doing USB firmware updates, you'll need
pyusb(updates). Note that
pyusbhas name space conflicts with similarly named packages, so if updates aren't working you may need to create a
venvor uninstall conflicting packages.
- If you are doing development on the digital signatures with the Python helper scripts, you will need:
pycryptodome(signing - PEM read),
cryptography(signing - x509 read),
pynacl(signing - ed25519 signatures) (most users won't need this).
- Some system packages are needed, which can be installed with
sudo apt install libssl-dev libxkbcommon-devor similar
- If you receive an error about
feature resolver is required, try installing a newer version of
By default the
xtask resolver runs a check to confirm that your local files
match the ones referenced in
crates.io. For a handful of core crates, the
build preferentially runs from what is on
crates.io, so local changes have
no effect until they are pushed as an update to an existing crate. If you see
an error complaining about local source files not being published, make sure
you have the correct patches in place in your top level
and bypass the check with
Quickstart using Hosted Mode
You can try out Xous in a "hosted mode" wherein programs are compiled for your native platform and are run locally as processes within your current operating system. System calls are replaced with network calls to a kernel that simply shuffles messages around.
Xous uses the xtask convention,
where various complex build commands are stored under
This allows for us to create arbitrarily complex build sequences
without resorting to
make (which is platform-dependent),
sh (which requires a lot of external tooling), or another build
To build a set of sample programs and run them all using the kernel for communication, clone this repository and run:
cargo xtask run
This will build several servers and a "shell" program to control them
all. Most notably, a
graphics-server will appear and kernel messages
will begin scrolling in your terminal.
Quickstart using an emulator
Xous uses Renode as the preferred emulator, because it is easy to extend the hardware peripherals without recompiling the entire emulator.
Then, build Xous:
cargo xtask renode-image
This will compile everything in
release mode for RISC-V, compile the tools
require to package it all up, then create an image file.
Finally, run Renode and specify the
xous-release.resc REnode SCript:
Renode will start emulation automatically, and will run the same set of programs as in "Hosted mode".
Generating a hardware image
To build for real hardware, you must specify an
.svd file. This
file is generated by the SoC build process and describes a single
Betrusted core. These addresses will change as hardware is modified,
so if you distribute a modified Betrusted core, you should be sure
to distribute the
The UTRA abstracts the details of the register
locations, by wrapping them in logical names that don't change.
For Precursor, the SVD files are tracked inside
Since each soc.svd can potentially change with a git reference, a gitref
is coded into the filename by convention.
Generally, one can create an image for hardware using the following command:
cargo xtask app-image
And it will pull from the default soc.svd configuration.
The currently selected config is set by the constant
in xtask/src/main.rs; it is one of the first constants
near the top.
If you have built your own custom soc.svd file, the most convenient way to update
to this is to simply replace the file referenced in the default with yours,
and then run
cargo build inside the
utralib directory (not in the Xous
root -- the
build command must happen inside the directory to force a
regeneration of the generated UTRA bindings). This will likely result
in a complaint when you run
xtask that your local tree does not match what
is checked into
git; if you are building from your own configuration,
that is correct, and thus you should add
--no-verify to your
to suppress the check.
The resulting images are in your target directory (typically
with the names
xous.img (for the kernel) and
loader.bin (for its bootloader). The corresponding
gateware is in
precursors/soc_csr-<gitref>.bin. These can be written to your
device by following the update guide.
This project is funded through the NGI0 PET Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 825310.