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.

Last Post!

fhunleth

fhunleth

Co-author of Nerves

There’s quite a gap in Nerves System release posting on the forum. This only details updates in the past few months, so please visit the project changelogs for previous updates.

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

Here are the most visible updates from v1.28.x to v1.29.1:

Some of the most exciting updates are in the official Nerves systems, though.

Raspberry Pi and Beaglebone users are now using the real-time Linux PREEMPT_RT patch set. This patch set enables lower latency response times across the kernel and early reports indicate that this is beneficial to Nerves users as well. While the PREEMPT_RT patch set has been merged into the mainline kernel, it is still not available in the long-term support kernels used with Nerves. Fortunately, the patch set is maintained and straightforward to apply to the kernel versions we use. This is an advanced feature right now, and it appears that the best way to get real-time I/O response times is to use the Linux kernel and Erlang options to assign real-time cores.

While it isn’t completely new to this release, the transition from MMAL-based camera drivers to libcamera-based ones now affects all Raspberry Pi systems. This means that the venerable picam library is officially deprecated. The Nerves systems include the sample camera applications described in the Raspberry Pi libcamera documentation, but at this moment, no nice Elixir wrapper exists for them. On the plus side, the switch to libcamera enables Nerves users to more closely follow all of the new computer vision and camera work happening upstream.

Please review the release notes for Nerves systems that you’re using since there have been quite a few other updates. We try our best to test out everything, but the effort is significant due to the number of platforms and devices supported. As always, please let us know if there are regressions in your setup.

Lastly, this has been a wild release cycle with us even running into our first GCC bug. Thanks to everyone who helped especially with web browser kiosk, RT Linux, and machine learning support.

Where Next?

Popular in News & Updates Top

fhunleth
We recently released Nerves 1.5.0 and corresponding updates to the Nerves new project generator, nerves_bootstrap and our official system...
New
sorentwo
Many months ago when I originally announced Oban I mentioned that a LiveView powered UI would be available for it soon. Well, the “soon” ...
New
hugobarauna
This post announces the Livebook desktop app, a way to install Livebook on your machine without the requirement to have Elixir installed ...
New
hugobarauna
Livebook v0.7 is out! This is a major release coming with significant features in the following areas: secret management visual represe...
New
zachdaniel
The second video from the Ash Primers series is out! https://www.youtube.com/watch?v=GtsL_lIis4Q This one is about the migration generato...
New
DominikWolek
We are launching a cloud-based video streaming platform, which will allow you to use Membrane without all the hassle of maintaining your ...
New
sorenone
The title doesn’t relay the depth of this announcement, but it is short, balanced, and looked good to us. From open sourcing multiple pac...
New

Other popular topics Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 31494 112
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40042 209
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
AstonJ
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
New

We're in Beta

About us Mission Statement