commit | 4d27d242cb64b6b0a264bc5fb174b2e10f4fca20 | [log] [tgz] |
---|---|---|
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | Fri Mar 13 17:23:20 2020 +0000 |
committer | GitHub <noreply@github.com> | Fri Mar 13 17:23:20 2020 +0000 |
tree | 33b5e18632644aa3665be8793d16ed7cddb14925 | |
parent | 6271253867a783ed6f2fe7d66c0ae62614515b1b [diff] | |
parent | cc49bf0c68bee061879ad81c2e9f0863ee33a921 [diff] |
Merge #161 161: Cleanup and add a Makefile r=alistair23 a=alistair23 After looking at https://github.com/tock/libtock-rs/issues/160 I think there are some things we can do to make it easier to get started with `libtock-rs`. One of the key things for me with all new projects is how hard is it to build and run this thing. I find the current bundle of scripts confusing and non obvious what I should do/run. This PR moves the linker files out of the main directory (so they don't clutter everything up) and then adds a Tock style Makefile which can be used to build the examples for the boards. This PR also removes some unused files to again reduce clutter. If this is merged the next step is to move the `flash.sh` actions into the Makefile and look at supporting building a single app (instead of all of the examples) and how to handle features. Co-authored-by: Alistair Francis <alistair.francis@wdc.com>
Rust userland library for Tock (WIP)
Tested with tock Release 1.4.1.
The library works in principle on most boards, but there is currently the showstopper bug #28 that prevents the generation of relocatable code. This means that all applications must be installed at the flash address they are compiled with, which usually means that they must be compiled especially for your board and that there can only be one application written in rust at a time and it must be installed as the first application on the board, unless you want to play games with linker scripts. There are some boards/layout_*.ld
files provided that allow to run the examples on common boards. Due to MPU region alignment issues they may not work for applications that use a lot of RAM, in that case you may have to change the SRAM start address to fit your application.
This project is nascent and still under heavy development, but first steps:
Ensure you have rustup installed.
Clone the repository:
git clone https://github.com/tock/libtock-rs cd libtock-rs
Install the dependencies:
make setup
Use make
to compile and run an example app.
make nrf52 # Builds all examples for the nrf52 platform
make opentitan # Builds all examples for the OpenTitan platform
make opentitan FEATURES=alloc # Builds all examples for the OpenTitan platform, with alloc feature enabled
For an unknown platform, you may have to create your own memory layout definition. Place the layout definition file at boards/layout_<platform>.ld
and do not forget to enhance the tockloader_flags
dispatching section in tools/flash.sh
. You are welcome to create a PR, s.t. the number of supported platforms grows.
The easiest way to start using libtock-rs is adding an example to the examples folder. The boiler plate code you would write is
#![no_std] use libtock::result::TockResult; #[libtock::main] async fn main() -> TockResult<()> { // Your code }
If you want to use heap based allocation you will have to add
extern crate alloc;
to the preamble and store your example in the examples-alloc
folder.
To run on the code on your board you can use
make <platform> [FEATURES=alloc]
The example can also be flashed to the board by running:
make flash-<platform> EXAMPLE=<example>
This script does the following steps for you:
Licensed under either of
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.
The contribution guidelines can be found here: contribution guidelines