Nerves
Nerves Projects
Our project is spread over many repositories in order to focus on a limited scope per repository.
This repository (nerves-project/nerves) is an entrance to Nerves and provides the core tooling and documentation.
The Nerves core team maintains the projects in the nerves-project
organization
with the help of many in the Elixir community. Projects under other GitHub
organizations are maintained by their respective organization, but listed here
since they’re so commonly used in conjunction with the core libraries and tools.
Framework / Core
Name | Description | Release |
---|---|---|
Erlinit | Replacement for /sbin/init that launches an Erlang/OTP Release | |
Nerves.Bootstrap | The Nerves new project generator and low level hooks into Mix | |
Nerves.Runtime | Small, general runtime utilities for Nerves devices | |
NervesPack | Initialization setup for Nerves devices | |
NervesSystemBR | Buildroot based build platform for Nerves Systems | |
RingLogger | A ring buffer backend for Elixir Logger with IO streaming |
Example projects
Name | Description | Release |
---|---|---|
Circuits Quickstart | Try out Elixir Circuits with prebuilt Nerves firmware | |
NervesExamples | Small example programs using Nerves | |
Nerves Livebook | Develop on embedded devices with Livebook and Nerves |
Hardware access
Name | Description | Release |
---|---|---|
Circuits.GPIO | Use GPIOs in Elixir | |
Circuits.I2C | Use I2C in Elixir | |
Circuits.SPI | Communicate over SPI from Elixir | |
Circuits.UART | Discover and use UARTs and serial ports in Elixir |
SSH and Shell
Name | Description | Release |
---|---|---|
NervesMOTD | Message of the day for Nerves devices | |
NervesSSH | Manage an SSH daemon and subsystems on Nerves devices | |
SSHSubsystemFwup | Erlang SSH Subsystem for Nerves firmware updates | |
Toolshed | A toolshed of shell-like IEx helpers |
Upcoming
These projects are new or experimental and are in various stages of being ready to promote to the above categories.
Name | Description | Release |
---|---|---|
NervesLogging | Route system log messages through the Elixir logger | |
NervesUEvent | Simple UEvent monitor for detecting hardware and automatically loading drivers | |
PropertyTable | In-memory key-value store with subscriptions | |
nerves_initramfs | An initramfs for early boot handling of Nerves devices | |
nerves_system_linter | Mix task to check Nerves system configuration files | |
nerves_systems | Build scripts for maintaining multiple repositories | unreleased |
See outdated/inactive projects...
| Name | Description | Release | | -------------------------: | :------------------------------------------------------------------------------------------ | :-------------------------------------------------------- | | **[nerves_leds](https://github.com/nerves-project/nerves_leds)** | Functions to drive LEDs on embedded systems | [![Hex.pm](https://img.shields.io/hexpm/v/nerves_leds.svg)](https://hex.pm/packages/nerves_leds) | | **[system_registry](https://github.com/nerves-project/system_registry)** | Serial nested term storage and dispatch registry | [![Hex.pm](https://img.shields.io/hexpm/v/system_registry.svg)](https://hex.pm/packages/system_registry) | | **[system_registry_term_storage](https://github.com/nerves-attic/system_registry_term_storage)** | Simple term storage for SystemRegistry | [![Hex.pm](https://img.shields.io/hexpm/v/system_registry_term_storage.svg)](https://hex.pm/packages/system_registry_term_storage) | | **[nerves_system_test](https://github.com/nerves-project/nerves_system_test)** | | | | **[nerves_test_server](https://github.com/nerves-project/nerves_test_server)** | | | There is also a gravesite for old Nerves libraries at https://github.com/nerves-project-attic.
Quick-Reference
Generating a New Nerves Application
mix nerves.new my_app
Building Firmware
export MIX_TARGET=rpi3
mix deps.get # Fetch the dependencies
mix firmware # Cross-compile dependencies and create a .fw file
mix firmware.burn # Burn firmware to an inserted SD card
Note: The mix firmware.burn
target relies on the presence of ssh-askpass
. Some
users may need to export the SUDO_ASKPASS
environment variable to point to their askpass
binary. On Arch Linux systems, this is in /usr/lib/ssh/ssh-askpass