fhunleth

fhunleth

Co-author of Nerves

Nerves System Releases

Nerves systems provide the operating system, libraries and other tools for building firmware for specific hardware. The Nerves Core Team maintains a set of ports to widely available hardware. Nerves runs on many other boards as well and those ports are frequently derived from the official systems.

Nerves systems releases had previously been announced as part of the core Nerves tooling releases, but they change more frequently, so my plan is to announce to this topic instead.

FAQ on Nerves Releases

  1. How often are Nerves system releases made?

We follow the release cadence of the Buildroot project. Buildroot makes a release every 3 months. This allows us to keep up with security and bug fixes for the non-Elixir infrastructure in Nerves without being overly burdensome. Sometimes Buildroot makes a patch release to fix a particularly bad security issue or bug. We follow suit even if that issue is unlikely to affect Nerves users.

  1. Why don’t Nerves systems follow semantic versioning?

Given that Buildroot contains 1000s of packages, its near impossible to know whether a version bump in one is breaking or not and probably not helpful. We’ve settled on the following approach and admit that it is imperfect:

  • Major version updates result in firmware incompatibilities that make over-the-air updates difficult or impossible. Examples include big changes to filesystem layout or changing bootloaders.
  • Minor version updates are made for each Buildroot release. Buildroot version numbers have the form yyyy.mm and don’t convey any information about release compatibility. It is good practice to review the Buildroot release notes especially for changes to C libraries and packages that you use. We also schedule Erlang major version bumps and Linux kernel minor version bumps to coincide with these releases.
  • Patch version updates include all of the other changes we make between Buildroot releases. We try to keep these minor so that it’s not risky to upgrade patch versions, but they may exceed the normal scope of semantic version patches.

Because of this, many people lock their Nerves System dependency down very tightly in their mix.exs deps. We recommend this practice. Please do follow updates to your system to capture security fixes.

  1. How does the core team decide which boards to support?

It’s our policy to make official releases for widely available hardware that has large open-source communities providing support. People have ported Nerves to many other platforms and some have made their ports public. It is a non-trivial task to maintain a port over the long term. If you are in need of a port for a board that the core team does not support, it’s worth posting to the forum to see if someone has made one and is willing to share.

Most Liked

fhunleth

fhunleth

Co-author of Nerves

Note: I haven’t published Nerves System release announcements to the forum in a while. There are starting to be updates pertinent to Nerves Nx/Axon users with the latest releases so I’m going to try posting here more often for a broader audience.

New official Nerves systems are available that use nerves_system_br v1.18.3. If you’re using a v1.18.x system already, this is a straightforward update. If you have made a custom Nerves system from a previous release, please see the v1.18.0 release notes for upgrading.

Here are the most visible updates from v1.18.0 to v1.18.3:

  • Erlang/OTP 24.2
  • Buildroot 2021.11
  • CMake support. Pass -D CMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} when configuring your project that uses CMake and CMake will find the right libraries and crosscompilers.
  • OpenMP support. See the cvt_color project for an example Elixir library that uses both CMake and OpenMP.
  • Raspberry Pi WiFi firmware updates. This brings in numerous bug fixes to the built-in WiFi modules and has the side effect of reducing a simple Raspberry Pi firmware image by almost 1/3 due to some cleanup of unused firmware blobs.

Lastly, the Nerves project has started a backup download site at dl.nerves-project.org. Nerves’ Buildroot integration downloads quite a few projects’ source code tarballs when building. There was a GitHub change in late November (now reverted) that broke CI builds. This backup download site is automatically updated with tarballs downloaded by official Nerves system builds and will be used automatically if the primary download site does not work. See the CircleCI scripts for details. You can implement a corporate backup download site for your custom Nerves systems using the same logic.

Specific versions for the releases:

  • nerves_system_bbb v2.13.1
  • nerves_system_rpi* v1.18.1
  • nerves_system_x86_64 v1.18.1
  • nerves_system_osd32mp1 v0.9.1
fhunleth

fhunleth

Co-author of Nerves

New official Nerves systems are available that use nerves_system_br v1.18.4 . If you’re using a v1.18.x system already, this is a straightforward update. If you have made a custom Nerves system from a previous release, please see the v1.18.0 release notes for upgrading.

Here are the most visible updates from v1.18.3 to v1.18.4:

  • Erlang/OTP 24.2.1
  • Buildroot 2021.11.1
  • Processor-specific GCC options are now passed to NIFs and ports. This makes some more optimizations possible and enables features like NEON on some ARM processors.

As part of the Buildroot patch release, Nerves now uses OpenSSL 1.1.1m. This OpenSSL update detects redundant OpenSSL Engine loads which were possible if you were using the NervesKey PKCS#11 library. This is a subtle issue that affects many AWS IoT, Google Cloud, and NervesHub users.

BeagleBone and AM3358 users: nerves_system_bbb v2.13.2 now supports dual Ethernet boards and the Beaglebone Blue.

Raspberry Pi and Beaglebone users: WireGuard is available now in your systems. The plan is to include WireGuard on other Nerves systems once their Linux kernel is updated to 5.10. This only includes the small kernel device driver. Userland WireGuard tools should be brought in with your projects. This enables remote access to Nerves devices via a private VPN. Currently this feature requires low-level networking and VPN knowledge to configure.

fhunleth

fhunleth

Co-author of Nerves

New versions of the official Nerves systems are out. The main update is to use Buildroot 2019.08. Specific versions are:

  • nerves_system_bbb v2.4.0
  • nerves_system_rpi* v1.9.0
  • nerves_system_x86_64 v1.9.0

Per popular request, the Raspberry Pi and Beaglebone systems now have common USB->UART drivers built-in. The hope is that most or all Arduinos and other USB-based microcontroller devices work out of the box with Circuits.UART now.

If you’re a Raspberry Pi 4 user who has customized the fwup.conf, please note that the bootcode.bin file is no longer included in releases. It is not used by the Raspberry Pi 4 and has been removed. See the nerves_system_rpi4 CHANGELOG.md for details.

fhunleth

fhunleth

Co-author of Nerves

New official Nerves systems are available that use nerves_system_br v1.12.0 . We recommend upgrading and reviewing the change logs for the upgraded constituent projects.

Here’s a list of the most visible updates:

  • Buildroot 2020.05
  • Erlang/OTP 23.0.2
  • Qt 5.14.2 - This is an update from 5.14.1 that may affect webengine kiosk
    users
  • Raspberry Pi Linux and firmware tagged as 1.20200601
  • bb.org device tree overlays updated to support new Beagleboard devices

As you can see above, we’re using OTP 23. We’ve had a really good experience with it so far. Please make sure that you’re using OTP 23.0.1 or later on CI and your host when building Nerves projects. Also, we still run into libraries that put build products in their source directories instead of under _build. It’s much better now than in the past, but it’s safest if you build clean after making this update just in case.

If you have made a custom system for a Raspberry Pi, please update the Linux kernel version that it uses it to match tag 1.20200601. This is still a Linux 4.19 kernel. Here’s an example of how to change your system.

Specific versions for the releases:

  • nerves_system_bbb v2.7.1
  • nerves_system_rpi* v1.12.1
  • nerves_system_x86_64 v1.12.1
  • nerves_system_osd32mp1 v0.3.1

As always, let us know either here or the Elixir Slack if you have questions and GitHub issues for bugs.

fhunleth

fhunleth

Co-author of Nerves

A new version of the Nerves systems is now available that uses nerves_system_br v1.10.1. We recommend upgrading or reviewing the changes for your projects to pull in the latest security and bug fixes from Buildroot.

This update has one potentially breaking change for Raspberry Pi Zero, 3 A+ and Beaglebone users. We’ve had a growing number of issues being reported by people using the USB “gadget” port for communicating with those boards. It seems that users with Linux laptops have had the most trouble. The fix was to switch the current gadget Ethernet driver with the g_ether driver. This changes low level details on the virtual Ethernet connection to one that is more compatible across OSX, Linux, and Windows. Unfortunately, the straightforward way of enabling this new driver means that we lose the virtual console port over USB. The debug console is now on the UART pins of those boards.

Here’s a list of the most visible updates:

  • Buildroot 2019.11.1
  • Erlang/OTP 22.2.3
  • boardid 1.6.0 - Support serial numbers stored in DMI/BIOS on x86
  • mesa3d - Experimental update to support the Raspberry Pi 4’s V3D driver

Specific versions for the releases:

  • nerves_system_bbb v2.5.1
  • nerves_system_rpi* v1.10.1
  • nerves_system_x86_64 v1.10.1

Also, since many people might be updating to Elixir 1.10, please continue to use Elixir 1.8 or 1.9 with your Nerves projects. We’ll be making a nerves release soon that supports it.

Where Next?

Popular in News & Updates Top

zachdaniel
Hey folks! We’ve just released the beta 0.1.0 version of ash_sqlite. Take a look at the guide here: https://hexdocs.pm/ash_sqlite/get-sta...
New
zachdaniel
We’re working hard on improving docs, and have some substantial things that it would be great to get some thoughts on. One of the bigges...
New
fhunleth
We recently released Nerves 1.4.0 and an update to the Nerves new project generator, nerves_bootstrap. The biggest change is support for ...
New
jjcarstens
Do you like Hacktoberfest? Also enjoy working with Nerves and want to contribute? Fantastic! :tada: :beers: Here are some potential sta...
New
zachdaniel
Hey folks! We’re starting a new weekly newsletter with the goings on of the various Ash packages and other interesting news from myself a...
New
zachdaniel
Working with nested forms in Ash was already great, but it’s even better now with a the new features that will be in the next release of ...
New
lawik
It is my pleasure to announce the official release of the new generation of NervesHub with the v2.0.0 release. Containers are tagged. :p...
New
bartblast
I’m excited to announce Hologram v0.5.0, a major evolution of the full-stack Elixir web framework! This release brings massive performanc...
New
bartblast
Hey Elixir community! :waving_hand: First, I owe you all an apology. There’s a running joke among my friends that Hologram is like nucle...
New
jjcarstens
The Raspberry Pi is a very popular hardware platform for Nerves users and the official systems are getting an upgrade! :tada: :beers: Wh...
New

Other popular topics Top

senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New

We're in Beta

About us Mission Statement