Note: This describes the layout of the Tock 2.0 libtock-rs crates, not the Tock 1.0 crates. Not all of the Tock 2.0 crates have been merged into this repository yet.
This document gives an overview of the crates in this repository, and is intended to be useful to libtock-rs newcomers.
libtockNote: libtock is currently called libtock2, as libtock is already a Tock 1.0 crate.
libtock provides the default libtock-rs experience. It re-exports all of the drivers libtock-rs provides, and provides usable defaults for panic handling and memory allocation. It should be easy to build a Tock application that only has one direct dependency: libtock.
In order to be easy to use, libtock has a hard dependency on libtock_runtime, and therefore cannot be used in a unit test environment. If you want to unit test code that uses libtock-rs, you should depend on the individual libraries rather than libtock.
Although these crates have yet to be uploaded to crates.io, they likely will be uploaded in the future. Therefore, to avoid name collisions, most crates in this repository have a name that begins with libtock. Crates that are only intended for internal use (e.g. syscall_tests, which tests code internal to libtock_platform) do not have the libtock_ prefix.
The directory names of libtock_ crates do not contain the libtock_ prefix.
libtock_platformIn order to unit test libtock-rs code, we need a way to run libtock-rs on our development machines (and in CI). Ironically, that means most crates in libtock-rs are platform independent. libtock_platform provides the tools that allow code to run in both a unit test environment and in real Tock apps. It consists primarily of the Syscalls trait and supporting machinery.
libtock_runtime and libtock_unittestIn order to run libtock-rs code, you need a libtock_platform::Syscalls implementation. Multiple implementations exist that work in different environments:
libtock_runtime provides a syscall interface that uses a real Tock kernel. This is the crate to use in Tock process binaries.libtock_unittest provides a fake kernel for use in unit tests.In addition, libtock_runtime provides the linker script and Rust runtime needed to start a Tock process binary. libtock_unittest relies on std to provide a runtime.
Each Rust binary must have exactly one panic handler (note that std provides a panic handler for binaries that depend on it). The following crates provide a #[panic_handler] implementation for Tock process binaries:
libtock_panic_debug provides useful diagnostics in the event of a panic, at the expense of code size. This is the panic handler used by libtock.Driver crates provide interfaces to specific Tock APIs:
| Crate | Tock API |
|---|---|
libtock_console | Console |
libtock_low_level_debug | Low-Level Debug |