XUtils

nerves

Framework for building firmware for platforms like Raspberry Pi and BeagleBone Black.


Nerves

Backers on Open Collective Sponsors on Open Collective CircleCI Hex version

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 GitHub release (latest SemVer)
Nerves.Bootstrap The Nerves new project generator and low level hooks into Mix Hex.pm
Nerves.Runtime Small, general runtime utilities for Nerves devices Hex.pm
NervesPack Initialization setup for Nerves devices Hex.pm
NervesSystemBR Buildroot based build platform for Nerves Systems Hex.pm
RingLogger A ring buffer backend for Elixir Logger with IO streaming Hex.pm

Example projects

Name Description Release
Circuits Quickstart Try out Elixir Circuits with prebuilt Nerves firmware GitHub release (latest SemVer)
NervesExamples Small example programs using Nerves
Nerves Livebook Develop on embedded devices with Livebook and Nerves GitHub release (latest SemVer)

Hardware access

Name Description Release
Circuits.GPIO Use GPIOs in Elixir Hex.pm
Circuits.I2C Use I2C in Elixir Hex.pm
Circuits.SPI Communicate over SPI from Elixir Hex.pm
Circuits.UART Discover and use UARTs and serial ports in Elixir Hex.pm

SSH and Shell

Name Description Release
NervesMOTD Message of the day for Nerves devices Hex.pm
NervesSSH Manage an SSH daemon and subsystems on Nerves devices Hex.pm
SSHSubsystemFwup Erlang SSH Subsystem for Nerves firmware updates Hex.pm
Toolshed A toolshed of shell-like IEx helpers Hex.pm

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 Hex.pm
NervesUEvent Simple UEvent monitor for detecting hardware and automatically loading drivers Hex.pm
PropertyTable In-memory key-value store with subscriptions Hex.pm
nerves_initramfs An initramfs for early boot handling of Nerves devices GitHub release (latest SemVer)
nerves_system_linter Mix task to check Nerves system configuration files Hex.pm
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


Articles

  • coming soon...