• Stars
    star
    1,808
  • Rank 24,744 (Top 0.6 %)
  • Language
  • Created over 7 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Coordination repository of the embedded devices Working Group

Embedded devices Working Group

Coordination repository of the embedded devices Working Group (WG)

This repository issue tracker is used by the embedded WG to coordinate efforts towards making Rust a great choice for embedded development.

Want to get started with embedded development with Rust? Check out our embedded Rust book and the rest of our bookshelf.

Want to stay up-to-date with community progress? Check out our newsletter.

Join the discussion on Matrix! #rust-embedded:matrix.org

Vision

What is it that we really want? At a broad level:

  • To improve the absolute quality (functionality, safety, performance) of embedded software in the wild.
  • To improve the productivity of embedded software development teams, by reducing the tangible and intangible costs of achieving a level of quality.
  • To improve the experience for programmers developing for embedded systems.
  • To make embedded systems programming more accessible for people that are not already embedded systems developers.

What we do

At a high level we have two main tasks:

We work with the community to improve the embedded ecosystem.

  • We maintain and develop core crates in the embedded ecosystem ensuring that the development roadmap aligns with the needs of its users. You can find all the crates we maintain in the Organization section.

  • We develop and curate resources about embedded Rust development. Check our bookshelf!

  • We maintain and moderate the venues the embedded community uses to discuss. That includes this coordination repository and our Matrix room.

And, we serve as a bridge between the Rust teams and the embedded community.

  • If you need a language or a compiler feature to improve your embedded software let us know and we'll discuss your request with the appropriate Rust team. For example, see this request for making the compiler emit information about the stack usage of functions, which was later implemented as an experimental feature.
  • Similarly, if you need some unstable API in the standard library to be stabilized to make your crate work on the stable we'll forward your request to the library team. For example, see this proposal to add ARM instructions to core::arch::arm to eliminate the need for the unstable inline assembly feature (asm!) in the most common scenarios.

How you can help

Everyone can contribute to the embedded WG efforts! There are several ways to help out:

  • Let us know where the gaps are. If you think the language, the compiler, the tooling, the documentation or the crate ecosystem is lacking some feature, information or library to build embedded software let us know and we'll bring it up to the Rust teams or organize the community to build the crates or tools to fill the gaps.
  • Participate in RFC (Request For Comments) threads. We are always looking into ways to improve. This may involve things from changing how we run the WG to landing major breaking changes in core crates. To ensure we are actually making things better we need your input! That's why all these changes are preceded by an "RFC", a discussion thread (which may or may not be backed by a proper RFC document) where we evaluate the pros and cons of a proposal and explore alternatives. Only after there's consensus on accepting the proposal is the proposal made effective.
  • Help wanted!. There's always lots to do but the WG members only have so much free time. You can help us fixing bugs, implementing features, writing tests, trying out examples and tutorials, writing documentation, fixing typos, etc. We'll mentor you through these tasks and review your work. In some cases you may not even need previous embedded experience or access embedded hardware to help us out so don't let that discourage you from checking out our help wanted issues.
  • Join our weekly meetings on Matrix. We use these meetings as a faster, synchronous alternative to the RFC threads on GitHub. The agenda is posted in the matrix channel in advance to the meeting. Everyone is free to join the meeting and share their thoughts. You can also nominate an existing GH thread for discussion if you think it would benefit from a more synchronous discussion. The usual meeting time is Tuesdays, 8pm CET/CEST.

  • We have several teams focused on different areas: tooling, Cortex-M crates, etc. and each team maintains several projects (crates, docs and / or tools) that live under the rust-embedded organization. You can collaborate with the maintenance and development of these projects by becoming a project collaborator (consult with the team that owns the project) or by joining the team.

Organization

The WG is composed of several teams whose functions are defined in RFC #136. The embedded WG develops and maintains a large set of projects under the rust-embedded organization. This section lists all the teams and all the projects owned by the WG.

The core team

The functions of the core team are:

  • Representing the WG in meetings with other Rust teams.
  • Communicating the needs of the embedded Rust community (e.g. language features, core API stabilization) to the Rust teams.
  • Giving the casting vote on intra-WG decisions where no voting majority can be achieved.
  • Driving and moderating the weekly meetings.

Members

The Cortex-A team

The Cortex-A team develops and maintains the core of the Cortex-A crate ecosystem.

Members

Projects

Projects maintained by this team.

The Cortex-M team

The Cortex-M team develops and maintains the core of the Cortex-M crate ecosystem.

Members

Projects

Projects maintained by this team.

The Cortex-R team

The Cortex-R team develops and maintains the core of the Cortex-R crate ecosystem.

Members

Projects

The embedded Linux team

The embedded Linux team develops and maintains the core of the embedded Linux crate ecosystem.

Members

Projects

Projects maintained by the embedded Linux team

The HAL team

The HAL team develops and maintains crates that ease the development of Hardware Abstraction Layers, Board Support Crates and drivers.

Members

Projects

Projects maintained by the HAL team.

The MSP430 team

The MS430 team develops and maintains the core of the MSP430 crate ecosystem.

Members

Projects

Projects maintained by this team

The infrastructure team

The infrastructure team manages our domains, DNS records, e-mail aliases, etc.

Members

Projects

Projects maintained by this team

The RISC-V team

The RISC-V team develops and maintains the core of the RISC-V crate ecosystem.

Members

Projects

Projects maintained by this team

The resources team

The resources team develops, maintains and curates resources on embedded Rust.

Members

Projects

Projects maintained by the resources team

The tools team

The tools team maintains and develops core embedded tools.

Members

Projects

Projects maintained by the tools team

The triage team

The triage team is charge of keeping PR queues moving; they ensure no PR is left unattended.

Members

Hibernating

The following members have put themselves into the hibernation state, due to being absent or busy for an extended amount of time. See ops/hibernating.md.

Contact

Each team can be privately contacted via the following e-mail addresses:

You can usually find the members of the embedded WG on the Rust Embedded Matrix room (#rust-embedded:matrix.org).

Our Matrix room is logged by on the bridged IRC channel, and you can find the logs at: https://libera.irclog.whitequark.org/rust-embedded/

Other projects

These are other projects you may be interested in but that (currently) are not owned by the WG.

On going community efforts

Device specific communities

Several device specific communities exist that are not part of the working group. These communities maintain crates for peripheral access, hardware abstraction, examples, and more that are specific to a particular family of devices. The list below is not exhaustive and will be updated as device support increases.

  • nrf-rs: Nordic nRF series of microcontrollers
  • stm32-rs: STM32 microcontrollers
  • lpc-rs: NXP LPC microcontrollers
  • imxrt-rs: NXP i.MX RT microcontrollers
  • esp-rs: Espressif Systems microcontrollers
  • rp-rs: Raspberry Pi microcontrollers including the RP2040

embedded-hal

embedded-hal is a project that aims to build a standard set of traits (interfaces) for I/O functionality common in embedded devices: Serial, I2C, etc. with the goal of serving as a base for building reusable driver crates, crates to interface with external components like sensors.

There are plenty of traits that still need to be designed, in particular ones that involve async I/O. Join the discussion and help us design the missing traits so that they'll fulfill your needs.

The weekly driver initiative

To put the embedded-hal to test and to expand the embedded crates.io ecosystem we are running the weekly driver initiative. The goal is to release a new no_std, generic, embedded-hal driver crate every one or two weeks.

There's lots of cool devices that would be great to have drivers for. Join the initiative and help us grow the embedded crates.io ecosystem!

Awesome embedded Rust

The community is building a curated list of crates useful for embedded development. In this list you'll find driver crates, board support crates and general purpose no-std crates. Help us improve this list by adding your crate via PR or by tackling any of our help wanted issues.

Embedded category in the user forum

As an experiment the Rust lang user forum has gained a new embedded category.

This is meant as a friendly exchange for anyone interested in embedded topics with Rust.

So if you want to discuss ideas, problems or solutions please feel free to chime in on existing topics or create a new one!

RFCs

When the team deems it necessary the RFC process may be used to make decisions or to design processes, user interfaces, APIs, etc.

Learn more about the Rust's RFC process (which is the same as our own) here.

To create an RFC, simply:

  • clone this repo to your own personal one
  • copy 0000-template.md to text/0000-my-feature.md (where "my-feature" is descriptive. Don't assign an RFC number yet)
  • fill in the details of your RFC in that file
  • Open an pull request with this repository

More Repositories

1

rust-raspberrypi-OS-tutorials

📚 Learn to write an embedded OS in Rust 🦀
Rust
12,825
star
2

awesome-embedded-rust

Curated list of resources for Embedded and Low-level development in the Rust programming language
5,615
star
3

embedded-hal

A Hardware Abstraction Layer (HAL) for embedded systems
Rust
1,797
star
4

discovery

Discover the world of microcontrollers through Rust!
Rust
1,378
star
5

heapless

Heapless, `static` friendly data structures
Rust
1,365
star
6

book

Documentation on how to use the Rust Programming Language to develop firmware for bare metal (microcontroller) devices
1,004
star
7

cortex-m

Low level access to Cortex-M processors
Rust
732
star
8

cortex-m-quickstart

Template to develop bare metal applications for Cortex-M microcontrollers
Rust
713
star
9

riscv

Low level access to RISC-V processors
Rust
711
star
10

svd2rust

Generate Rust register maps (`struct`s) from SVD files
Rust
642
star
11

cargo-binutils

Cargo subcommands to invoke the LLVM tools shipped with the Rust toolchain
Rust
457
star
12

rust-sysfs-gpio

A Rust Interface to the Linux sysfs GPIO interface (https://www.kernel.org/doc/Documentation/gpio/sysfs.txt)
Rust
377
star
13

cortex-m-rt

Minimal startup / runtime for Cortex-M microcontrollers
Rust
356
star
14

riscv-rt

Minimal runtime / startup for RISC-V CPU's.
Rust
302
star
15

embedded-alloc

A heap allocator for embedded systems
Rust
258
star
16

linux-embedded-hal

Implementation of the `embedded-hal` traits for Linux devices
Rust
220
star
17

gpio-cdev

Rust interface to the Linux GPIO Character Device API (/dev/gpiochip...)
Rust
202
star
18

embedonomicon

How to bootstrap support for a no_std target
Rust
200
star
19

rust-i2cdev

Rust library for interfacing with i2c devices under Linux
Rust
189
star
20

cortex-a

Low level access to Cortex-A processors
Rust
120
star
21

rust-spidev

Rust library providing access to spidev devices under Linux
Rust
118
star
22

not-yet-awesome-embedded-rust

A collection of items that are not yet awesome in Embedded Rust
116
star
23

bare-metal

Abstractions common to microcontrollers
Rust
109
star
24

gpio-utils

Userspace Utilities for managing GPIOs in Linux
Rust
93
star
25

showcase

Awesome embedded projects by the Rust community!
CSS
92
star
26

meta-rust-bin

Yocto layer for installing Rust toolchain from pre-built binaries
BitBake
90
star
27

nb

Minimal and reusable non-blocking I/O layer
Rust
85
star
28

rust-embedded.github.io

A collection of books and other documents about embedded Rust
84
star
29

blog

The Rust Embedded WG Blog
SCSS
71
star
30

critical-section

Pluggable critical section
Rust
70
star
31

r0

Initialization code ("crt0") written in Rust
Rust
69
star
32

svd

A CMSIS-SVD file parser
Rust
66
star
33

debugonomicon

Shell
57
star
34

svdtools

Python package to handle vendor-supplied, often buggy SVD files.
Rust
56
star
35

aarch64-cpu

Low level access to processors using the AArch64 execution state.
Rust
51
star
36

register-rs

Unified interface for type-safe MMIO and CPU register access in Rust
Rust
48
star
37

rust-sysfs-pwm

Linux PWM Access via Sysfs in Rust
Rust
46
star
38

fixedvec-rs

Heapless vector implementation for Rust
Rust
45
star
39

cortex-m-semihosting

Semihosting for ARM Cortex-M processors
Rust
39
star
40

msp430

Low level access to MSP430 microcontrollers
Rust
37
star
41

qemu-exit

Exit QEMU with user-defined code
Rust
35
star
42

embedded-dma

Rust
34
star
43

volatile-register

Volatile access to memory mapped hardware registers
Rust
33
star
44

msp430-quickstart

Template to develop bare metal applications for MSP430 microcontrollers
Rust
33
star
45

itm

Tool to parse and dump ITM packets
Rust
26
star
46

mutex-trait

Low level API definition of a Mutex
Rust
23
star
47

msp430-rt

Minimal startup / runtime for MSP430 microcontrollers
Rust
15
star
48

patterns

A book capturing different approaches or patterns for solving problems in Embedded Rust
15
star
49

docker-rust-cross

Docker images for testing rust code on many versions and architecures (DEPRECATED)
Shell
13
star
50

panic-semihosting

Report panic messages to the host stderr using semihosting
Rust
12
star
51

cortex-r

Low level access to Cortex-R processors
Shell
11
star
52

arm-dcc

Debug Communication Channel (DCC) API
Rust
8
star
53

rust-embedded-www

The Rust embedded website: http://www.rust-embedded.org
HTML
7
star
54

panic-itm

Log panic messages using the ITM (Instrumentation Trace Macrocell)
Rust
6
star
55

rust-embedded-provisioning

Terraform provisioning for Rust Embedded infrastructure
HCL
2
star
56

template

Rust
1
star