Hello, World!
Navigate to and run the hello world Microkit example:
cd workspaces/microkit/hello-world
make simulate
Here is its source:
#![no_std]
#![no_main]
use sel4_microkit::{debug_println, protection_domain, Handler, Infallible};
#[protection_domain]
fn init() -> impl Handler {
debug_println!("Hello, World!");
HandlerImpl
}
struct HandlerImpl;
impl Handler for HandlerImpl {
type Error = Infallible;
}
The sel4_microkit
crate implements a Rust language runtime for Microkit protection domains, and implements the Microkit API.
It is written in pure Rust, and does not link against libmicrokit
.
The Event Handler
The #[protection_domain]
attribute macro declares a function to be the protection domain's initialization function.
The entrypoint function must have a signature of the form:
fn() -> T
where
T: sel4_microkit::Handler
An implementation of the Handler
trait is used by the runtime as the event handler for the protection domain's main loop.
The
notified
,
protected
,
and
fault
methods correspond to their equivalents in <microkit.h>
.
The default implementations of these methods just panic.
Our event handler, which we've called HandlerImpl
, is the simplest possible Handler
implementation.
Language Runtime
As detailed in its rustdoc, the #[protection_domain]
attribute macro takes the same parameters as #[root_task]
.
Furthermore, the sel4_microkit
crate supports all of the same Rust language runtime elements that we explored in Chapter 2, including
sel4_microkit::panicking::catch_unwind()
and
sel4_microkit::panicking::set_hook()
.