This project does NOT follow semantic versioning. The version increases as follows:
- Major version updates are breaking updates to the build infrastructure. These should be very rare.
- Minor version updates are made for every major Buildroot release. This may also include Erlang/OTP and Linux kernel updates. These are made four times a year shortly after the Buildroot releases.
- Patch version updates are made for Buildroot minor releases, Erlang/OTP releases, and Linux kernel updates. They're also made to fix bugs and add features to the build infrastructure.
This release updates to Buildroot 2022.05, Linux 5.15.32 (from Linux 5.10) and uses GCC 11.3 (from GCC 10.3). The Linux kernel upgrade could introduce a regression, so please verify hardware-specific functionality in your firmware.
If you have cloned this repository for a custom system, please make sure that
you have CONFIG_NOP_USB_XCEIV=y
in your Linux kernel configuration.
- Updated dependencies
This release updates to Buildroot 2022.02.1 and OTP 25.0. While this should be an easy update for most projects, many programs have been updated. Please review the changes in the updated dependencies for details.
- Updated dependencies
This release bumps Erlang to 24.3.2 and should be a low risk upgrade from the previous release.
-
Changes
- Pull in upstream Linux SquashFS patch to improve file system performance
-
Updated dependencies
This is a Buildroot and Erlang bug and security fix release. It should be a low risk upgrade from the previous release.
- Updated dependencies
This is a Buildroot and Erlang bug fix release. It should be a low risk upgrade from the previous release.
-
Updated dependencies
-
Changes
- Specify CPU-specific flags when compiling NIFs and ports. This fixes an issue where some optimizations could not be enabled in NIFs even though it should be possible to have them. E.g., ARM NEON support for CPUs that have it.
- Build the Wireguard kernel driver. This is a small device driver that enables a number of VPN-based use cases.
-
Updated dependencies
-
Changes
- The
cpufreq
directories are available again. This was a regression that would break code that manually adjusted the CPU frequency. - Programs that use OpenMP will run now. The OpenMP shared library
(
libgomp.so
) was supplied by the toolchain, but not copied.
- The
This release updates to Buildroot 2021.11 and OTP 24.2. If you have made a
custom system, please review the nerves_system_br
release
notes
since Buildroot 2021.11 changed some Raspberry Pi firmware options.
-
Updated dependencies
- nerves_system_br v1.18.2
- Buildroot 2021.11
- Erlang/OTP 24.2
- Raspberry Pi WiFi firmware
- Linux 5.10.88 with Raspberry Pi patches
- GCC 10.3
-
Improvements
- Support for the
dl.nerves-project.org
backup site. Due to a GitHub outage in November, there was a 2 day period of failing builds since some packages could not be downloaded. We implemented the backup site to prevent this in the future. This update is in thenerves_defconfig
. - Use new build ORB on CircleCI. This ORB will shorten build times to fit in CircleCI's new free tier limits. Please update if building your own systems.
- Support for the
- Updated dependencies
This release updates the Linux kernel from 5.4 to 5.10 to follow the Raspberry Pi OS.
If you have a Raspberry Pi Zero 2 W, support is now available for it in
nerves_system_rpi3a
.
- Updated dependencies
- nerves_system_br v1.17.3
- Erlang/OTP 24.1.4.
- Linux 5.10.63 with Raspberry Pi patches
This is a security/bug fix patch release. It should be safe to update for everyone.
-
Updated dependencies
-
Improvements
- Include software versioning and licensing info (see legal-info directory in artifact)
This release updates to Buildroot 2021.08 and OTP 24.1. If you have made a
custom system off this one, please review the nerves_system_br v1.17.0
release
notes.
- Updated dependencies
This release updates Erlang/OTP from 24.0.3 to 24.0.5 and Buildroot from 2021.05 to 2021.05.1. Both of these are security/bug fix updates. This is expected to be a safe upgrade from v1.16.1 for all users.
-
Updated dependencies
-
Improvements
- Support for the Adafruit Speaker Bonnet (See PR #214 for details)
- Beta support for using a
runtime.exs
script for runtime configuration. - Added a
provision
task to thefwup.config
to enable re-provisioning a MicroSD card without changing its contents. - Adds a default
/etc/sysctl.conf
that enables use of ICMP in Erlang. This requiresnerves_runtime v0.11.5
or later to automatically load the sysctl variables. With it using:gen_udp
to send/receive ICMP will "just work". It also makes it easier to add other sysctl variables if needed.
This release updates Nerves Toolchains to v1.4.3 and OTP 24.0.3. It should be safe for everyone to apply.
- Updated dependencies
This release updates to Buildroot 2021.05 and OTP 24.0.2. If you have made a
custom system off this one, please review the nerves_system_br v1.16.0
release
notes.
-
Updated dependencies
-
Improvements
- This release now contains debug symbols and includes the Build-ID in the ELF headers. This makes it easier to get stack traces from C programs. As before, the Nerves tooling strips all symbols from firmware images, so this won't make programs bigger.
- Enable compile-time
wpa_supplicant
options to support WPA3, mesh networking, WPS and autoscan. - Add
core_freq=250
to the defaultconfig.txt
so that Bluetooth can work out of the box. See Raspberry Pi UART Config
This is a security/bug fix release that updates to Buildroot 2021.02.1 and OTP 23.3.1. It should be safe for everyone to apply.
-
Improvements
- espeak has been removed from the default install to trim 13 MB off the root filesystem
-
Updated dependencies
This release updates to Buildroot 2021.02 and OTP 23.2.7. If you have made a
custom system off this one, please review the nerves_system_br v1.15.0
release
notes.
The Nerves toolchain has also been updated to v1.4.2. This brings in Linux 4.14 headers to enable use of cdev and eBPF. This won't affect most users.
- Updated dependencies
This is a patch release for v1.14.0 which fixes the ABI spec passed for zigler.
- Improvements
- A few unused directories in
/etc
have been removed. These primarily were network initialization script directories that aren't used on Nerves, but were provided by default by Buildroot.
- A few unused directories in
This release updates to Buildroot 2020.11.2, GCC 10.2 and OTP 23.2.4.
When migrating custom systems based on this one, please be aware of the following important changes:
-
There's a new
getrandom
syscall that is made early in BEAM startup. This blocks the BEAM beforerngd
can be started to provide entropy. The workaround is to startrngd
fromerlinit
. Seeerlinit.config
. -
Hardware float is enabled (
eabihf
). If you have pre-built binaries, you will need to compile them since previouseabi
was used. -
The GCC 10.2.0 toolchain has a different name that calls out "nerves" as the vendor and the naming is now more consistent with other toolchain providers.
-
Experimental support for tooling that requires more information about the target has been added. The initial support focuses on zigler.
-
Updated dependencies
This is a bug fix release and contains no major changes.
- Updated dependencies
This release includes a patch release update to Buildroot 2020.08.2.
-
Updated dependencies
-
Improvements
- Switched source for built-in WiFi module firmware. This pulls in newer firmware versions that were found to fix issues on the Raspberry Pi 4. It may improve built-in WiFi on other Raspberry Pis.
The main change in this release is to bump the Linux kernel to 5.4. This follows the kernel update in the Raspberry Pi OS.
If you have based a custom system off of this one, please inspect the
nerves_defconfig
for WiFi firmware changes. WiFi firmware is no longer being
pulled from the rpi-wifi-firmware
since that package is out of date.
-
Updated dependencies
-
Improvements
- Enabled reproducible builds in Buildroot to remove some timestamp and build path differences in firmware images. This helps delta firmware updates.
- The memory cgroup controller is no longer enabled by default. This was an upstream change. As a result, the memory cgroup directory is no longer mounted.
This release updates to Buildroot 2020.08 and OTP 23.1.1.
-
Updated dependencies
-
New features
- Added support for updating the root filesystem using firmware patches. See the firmware patch docs for more information.
This release updates to Buildroot 2020.05.1 and OTP 23.0.3 which are both bug fix releases.
-
Updated dependencies
-
New features
- The
/data
directory now exists for storing application-specific data. It is currently a symlink to/root
. Using/data
will eventually be encouraged over/root
even though currently there is no advantage. This change makes it possible to start migrating paths in applications and libraries.
- The
-
Fixes
- Fixed old references to the
-Os
compiler flag. All C/C++ code will default to using-O2
now.
- Fixed old references to the
- Fixes
- Remove
nerves_system_linter
from hex package. This fixes mix dependency errors in projects that reference systems with differentnerves_system_linter
dependency specs.
- Remove
This release updates the system to use Buildroot 2020.05 and Erlang/OTP 23. Please see the respective release notes for updates and deprecations in both projects for changes that may affect your application.
- Updated dependencies
- Updated dependencies
- nerves_system_br v1.11.4
- Erlang 22.3.4.1
- fwup 1.7.0
- Updated dependencies
- nerves_system_br v1.11.2
- Erlang 22.3.1
- erlinit 1.7.0 - tty initialization support
- fwup 1.6.0 - xdelta3/VCDIFF patch support
- Enable unixodbc so that Erlang's odbc application can be used in projects
This release updates Buildroot to 2020.02 and upgrades gcc from 8.3 to 9.2. While this is a minor version bump due to the Buildroot release update, barring advanced usage of Nerves, this is a straightforward update from v1.10.2.
- Updated dependencies
- nerves_system_br v1.11.0
- linux 4.19.97 (raspberrypi-kernel_1.20200212-1 tag)
- Erlang 22.2.8
-
Fixes
- This fixes a regression on OSX where the USB gadget Ethernet would incorrectly try to go into RNDIS mode and not work. Gadget Ethernet works with this fix on Linux and OSX. It also works on Windows with a driver installed. See the README.md for details.
-
Updated dependencies
- nerves_system_br v1.10.2
- Erlang 22.2.4
This release changes the behavior of the gadget port as well as the UART pins on the GPIO header. The gadget driver has been changed to use g_ether. This provides a more stable network connection at the expense of the virtual serial port. Console access has been output to the UART. If you were using the UART to connect to peripherals, you will need to disable the console. See: https://hexdocs.pm/nerves/advanced-configuration.html#overwriting-files-in-the-boot-partition for more information.
-
Enhancements
- Set
expand=true
on the application data partition. This will only take effect for users running the complete task, fwup will not expand application data partitions that exist during upgrade tasks. - linux: swap the cdc composite gadget for g_ether
- Set
-
Updated dependencies
- nerves_system_br v1.10.1
- Erlang 22.2.3
This release updates Buildroot to 2019.11 with security and bug fix updates
across Linux packages. Enables dnsd, udhcpd and ifconfig in the default
Busybox configuration to support vintage_net
and vintage_net_wizard
.
See the nerves_system_br
notes for details.
- Updated dependencies
- nerves_system_br v1.10.0
- Erlang 22.1.8
This release updates Buildroot to 2019.08.2 with security and bug fix updates
across Linux packages. See the nerves_system_br
notes for details.
Erlang/OTP is now at 22.1.7.
- Updated dependencies
This release pulls in security and bug fix updates from nerves_system_br
.
Erlang/OTP is now at 22.1.1.
- Updated dependencies
- nerves_system_br v1.9.4
- linux - update to the raspberrypi-kernel_1.20190925-1 tag
This release updates Buildroot to 2019.08 with security and bug fix updates
across Linux packages. See the nerves_system_br
notes for details.
- Updated dependencies
This release fixes an issue that broke display output on small LCD screens. Updating the Raspberry Pi firmware to the latest from the Raspberry Pi Foundation fixed the issue. See pappersverk/rpi_fb_capture#2 for details.
- Updated dependencies
- Updated dependencies
- nerves_system_br v1.8.4
- Linux 4.19.58 with patches from the Raspberry Pi Foundation
This release
This release updates Erlang to OTP 22 and gcc from version 7.3.0 to 8.3.0. See the nerves_system_br and toolchain release notes for more information.
-
Enhancements
- Enable source-based routing in the Linux kernel to support vintage_net
-
Updated dependencies
- Bux fixes
- Add TAR option
--no-same-owner
to fix errors when untarring artifacts as the root user.
- Add TAR option
- Updated dependencies
This release fixes a major issue with the gadget USB port where it would hang on
boot. If you have made a custom system or are overriding the erlinit.config
file in your project, please make sure that your erlinit.config
has:
-c null
-s "/usr/bin/nbtty --tty /dev/ttyGS0 --wait-input"
-
Bug fixes
- Fix regression with virtual serial port where it could cause the whole USB interface to hang.
-
Improvements
- Bump C compiler options to
-O2
from-Os
. This provides a small, but measurable performance improvement (500ms at boot in a trivial project).
- Bump C compiler options to
-
Updated dependencies
This release bumps the Linux kernel to 4.19.25. This change had an impact on how the WiFi regulatory database gets loaded into the kernel. Instead of building it into the kernel as previously done, the kernel loads it on demand. This requires that all WiFi drivers be built as kernel modules so that the database isn't loaded before the root filesystem is mounted. If you made a custom system and see boot errors about not being able to load the regulatory database, this is the problem.
A known bug with the Raspberry Pi Zero USB gadget interface is that it sometimes doesn't load on Linux systems. Moving the gadget drivers to kernel modules seems to work around this but it takes longer to load the gadget interface.
- Updated dependencies
- nerves_system_br v1.7.0
- Linux 4.19.25 with patches from the Raspberry Pi Foundation
- Updated dependencies
- nerves_system_br v1.6.8
- Erlang 21.2.6
- Updated dependencies
- nerves_system_br v1.6.6
- Erlang 21.2.4
- boardid 1.5.3
-
Updated dependencies
- nerves_system_br v1.6.5
- Erlang 21.2.2
- boardid 1.5.2
- erlinit 1.4.9
- OpenSSL 1.1.1a
- Linux 4.14.89 with patches from the Raspberry Pi Foundation
-
Enhancements
- Moved boardid config from inside erlinit.config to /etc/boardid.config
- Compile gpiomem into the Linux kernel
- Enable pstore, an in-memory buffer that can capture logs, kernel oops and other information when unexpected reboots. The buffer can be recovered on the next boot where it can be inspected.
This pulls in a pending patch in Buildroot to update the version of OpenSSL from 1.0.2 to 1.1.0h. This fixes what appears to be issues with Erlang using OpenSSL engines. It also enables Erlang crypto algorithms such as ed25519 that have been added in recent Erlang releases.
- Updated dependencies
- nerves_system_br v1.6.1
- Erlang 21.2
- Added dependencies
- wpa_passphrase
- libp11 0.4.9
- Updated dependencies
This release updates the Linux kernel from 4.4 to 4.14.71.
-
Enhancements
- Added Alsa utils
aplay
andamixer
for audio support. - Added
espeak
a speech synthesizer for text to audio. - Automatically reboot if the Linux kernel panics (defaults to a 10 second delay before the reboot)
- Added Alsa utils
-
Updated dependencies
- nerves_system_br v1.5.2
- Linux 4.14.71 with patches from the Raspberry Pi Foundation
- Erlang 21.0.9
This release contains various updates to provisioning variables and data.
Host requirements
Building firmware using this system requires fwup
to be updated on your
host computer to at least v1.2.5
. The target minimum version requirement
has not changed from 0.15.0
.
Serial numbers
Device serial numbers are now set using NERVES_SERIAL_NUMBER
instead of
SERIAL_NUMBER
. This is to reduce ambiguity on the source of the serial
by name spacing it along side other Nerves variables. The U-Boot environment
key has also changed from serial_number
to nerves_serial_number
. The
erlinit.config has been updated to provide backwards compatibility for setting
the hostname from the serial number by checking for nerves_serial_number
and falling back to serial_number
.
Custom provisioning
Provisioning data is applied at the time of calling the fwup
task complete
.
The complete
task is executed when writing the firmware to the target disk.
During this time, fwup
will include the contents of a provisioning file
located at ${NERVES_SYSTEM}/images/fwup_include/provisioning.conf
. By default,
this file only sets nerves_serial_number
. You can add additional provisioning
data by overriding the location of this file to include your own by setting
the environment variable NERVES_PROVISIONING
. If you override this variable
you will be responsible for also setting nerves_serial_number
.
- Updated dependencies
This release upgrades gcc from version 6.3.0 to 7.3.0. See the toolchain release notes for more information.
- Updated dependencies
- Updated dependencies
This release updates Erlang to OTP 21.0
- Updated dependencies
This release fixes some issues and adds firmware UUID support. This support can be used to unambiguously know what's running on a device.
-
Updated dependencies
-
Bug fixes
- Empty serial numbers stored in the U-Boot environment would be used instead of reverting to devices IDs built into the CPU or board.
- It wasn't possible to enable QtWebEngine (needed for kiosk apps)
This release adds official support for provisioning serial numbers to devices. Other information can be provisioned in a similar manner. See the README.md for details.
Buildroot was also updated to 2018.05. Be sure to review the nerves_system_br
link for the changes in the embedded Linux components.
-
Updated dependencies
-
New features
- More
wpa-supplicant
features were enabled to support more WiFi use-cases
- More
This release is nearly identical to rc.1 except for pulling the official 1.0 versions of Nerves dependencies and minor documentation updates.
- Updated dependencies
This release contains updates to Erlang and heart from nerves_system_br
and
mostly cosmetic changes to this project. The trivial .fw
files are no longer
created by CI scripts. If you've forked this project and are building systems
using CI, make sure to update your publish scripts.
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- nerves_system_br v0.16.3 This fixes the call to otp_build so that it always uses Buildroot's version the autoconf tools.
Important: This image removes kernel log messages from the HDMI and UART ports.
They are now only available via dmesg
. If you're debugging a boot hang, you
can re-enable prints by updating the cmdline.txt. See README.md.
-
Updated dependencies
-
Bug fixes
- Removed kernel logging from UART and HDMI to avoid interfering with other uses. They are rarely used on those ports.
-
Enhancements
-
Reboot automatically if Erlang VM exits - This is consistent with other Nerves systems. See rootfs_overlay/etc/erlinit.config if undesired.
-
Start running nerves_system_linter to check for configuration errors.
-
Disable console blanking for HDMI to make it easier to capture error messages.
-
Automount the boot partition readonly at
/boot
-
Support for reverting firmware.
See Reverting Firmware for more info on reverting firmware.
See fwup-revert.conf for more information on how fwup handles reverting.
-
- Bug fixes
- Updated toolchains to 0.12.1 which fixes issues with missing app files.
- Bug fixes
- Rollback release due to errors with toolchains not defining erlang app files
- Updated dependencies
- Enhancements
- Support for nerves 0.8.x Moved nerves.exs to mix.exs
- Updated dependencies
- Bug fixes
- Build
nbtty
- Build
-
Updated dependencies
-
Enhancements
- Add global patch directory
This is required to pull in the e2fsprogs patch that's needed now that util-linux's uuid_generate function calls getrandom and can block indefinitely for the urandom pool to initialize
-
Bug fixes
- Use
nbtty
by default to fix tty hang issue
- Use
- Updated dependencies
- nerves_system_br v0.13.7
This release contains an updated toolchain with Linux 4.1 Headers. You will have to clean and compile any c/c++ code in your project and dependencies. Failure to do so will result in an error when producing firmware.
-
nerves_system_br v0.13.5
- fwup 0.15.4
-
Nerves toolchain v0.11.0
-
New Features
- Fix warnings for Elixir 1.5
- Remove unused options from OTP 20 update
- Per Buildroot convention, the rootfs-additions directory is being renamed to rootfs_overlay. A symlink is put in its place to avoid breaking any systems.
- Enabled IPv6 Support in Linux kernel
-
nerves_system_br v0.13.2
- OTP 20
- erlinit 1.1.3
- fwup 0.15.3
-
New features
- Firmware updates verify that they're updating the right target. If the target
doesn't say that it's an
rpi0
through the firmware metadata, the update will fail. - Added meta-misc and meta-vcs-identifier to the
fwup.conf
metadata for use by users and for the regression test framework
- Firmware updates verify that they're updating the right target. If the target
doesn't say that it's an
-
Bug fixes
- The
erlinit
update fixes a hang issue that occurs on reboots if nothing is connected to the USB virtual serial console.
- The
-
nerves_system_br v0.12.1
- erlinit 1.1.1
- fwup 0.15.0
-
New features
- The application data partition is now
ext4
. This greatly improves its robustness to corruption. Nerves.Runtime contains code to initialize it on first boot. - Firmware images now contain metadata that can be queried at runtime (see Nerves.Runtime.KV
- Increased GPU memory to support Pi Camera V2
- The application data partition is now
-
nerves_system_br v0.12.0
- Buildroot 2017.05
- erlinit 1.1.0
-
New features
- pigpio is now available by default (enables near real-time use of gpios)
-
Bug fixes
- USB host/gadget mode selection doesn't seem to work on some non-Apple hardware. Host support has been disabled as a workaround. See Issue 10 for details.
-
Other changes
- pi3-miniuart-bt overlay is enabled by default to give full speed UART access on GPIO pins
- nerves_system_br v0.11.1
- erlinit 1.0.1 - contains fix for Erlang VM exit detection issue
The brcmfmac wireless driver is now built as a module, so you will need to load it. See hello_wifi for an example of WiFi module loading on application startup.
- nerves_system_br v0.11.0
- erlinit 1.0
- fwup 0.14.2
- rpi-userland and rpi-firmware version bumps to correspond with Raspbian Linux 4.4 updates
This is the first official Raspberry Pi Zero system release. It was forked
off nerves_system_rpi
so previous versions are from that project. Those
also work on the Zero, but without USB gadget mode or RPi Zero W WiFi
support.
-
nerves_system_br v0.10.0
- Buildroot 2017.02
- Erlang/OTP 19.3
-
New features
- Upgraded the Linux kernel from 4.4.43 -> 4.4.50. Due to the coupling
between the Linux kernel and rpi-firmware and possibly rpi-userland, if
you have a custom system based off this, you should update your Linux
kernel as well. (see
nerves_defconfig
changes)
- Upgraded the Linux kernel from 4.4.43 -> 4.4.50. Due to the coupling
between the Linux kernel and rpi-firmware and possibly rpi-userland, if
you have a custom system based off this, you should update your Linux
kernel as well. (see
- New features
- Enabled USB_SERIAL and FTDI_SIO support. Needed for connecting with Arduino to the USB ports
- Support for Nerves 0.5.0
- New features
- Upgraded the Linux kernel to 4.4.43. This also removes the call to mkknlimg which is no longer needed.
- Bump toolchain to use gcc 5.3 (previously using gcc 4.9.3)
- Bug Fixes
- Loosen mistaken nerves dep on
0.4.0
to~> 0.4.0
- Loosen mistaken nerves dep on
This version switches to using the nerves_package
compiler. This will
consolidate overall deps and compilers.
- Nerves.System.BR v0.8.1
- Support for distillery
- Support for nerves_package compiler
When upgrading to this version, be sure to review the updates to nerves_defconfig if you have customized this system.
- nerves_system_br v0.7.0
- Package updates
- Buildroot 2016.08
- Linux 4.4
- Package updates
-
Package versions
- Nerves.System.BR v0.6.1
-
New features
- All Raspberry Pi-specific configuration is now in this repository
- Enabled SMP Erlang - even though the RPi Zero and Model B+ are single core systems, some NIFs require SMP Erlang.
- Nerves.System.BR v0.6.0
- Package updates
- Erlang OTP 19
- Elixir 1.3.1
- fwup 0.8.0
- erlinit 0.7.3
- bborg-overlays (pull in I2C typo fix from upstream)
- Bug fixes
- Synchronize file system kernel configs across all platforms
- Package updates
- Enhancements
- Enabled USB Printer kernel mod. Needs to be loaded with
modprobe
to use
- Enabled USB Printer kernel mod. Needs to be loaded with
- Bug Fixes(raspberry pi)
- Enabled multicast in linux config for rpi/rpi2/rpi3/ev3
- Nerves.System.BR v0.5.1
- Bug Fixes(nerves-env)
- Added include paths to CFLAGS and CXXFLAGS
- Pass sysroot to LDFLAGS
- Bug Fixes(nerves-env)
- Nerves.System.BR v0.5.0
- New features
- WiFi drivers enabled by default on RPi2 and RPi3
- Include wireless regulatory database in Linux kernel by default on WiFi-enabled platforms. Since kernel/rootfs are read-only and coupled together for firmware updates, the normal CRDA/udev approach isn't necessary.
- Upgraded the default BeagleBone Black kernel from 3.8 to 4.4.9. The standard BBB device tree overlays are included by default even though the upstream kernel patches no longer include them.
- Change all fwup configurations from two step upgrades to one step upgrades. If you used the base fwup.conf files to upgrade, you no longer need to finalize the upgrade. If not, there's no change.
- New features