Project updates
I have been falling behind on sending these out so expect a chonker of a changelog.
- System updates, lots of them, check the ones you use
- A chunk of networking updates
- Circuits 2.x series has arrived!
Special call-out to the first variant for the Pi 5:
nerves_system_rpi5, v0.0.1
This is an initial release to make it easier for more people to test Nerves on the Raspberry Pi 5. Future releases may be incompatible and this one might have some frustrating bugs.
Networking
vintage_net_wifi, v0.12.1
This release adds support for creating generic WiFi configurations that work with both WPA2 and WPA3 access points. It’s implemented to be backwards compatible if you role out firmware with this version and revert to a firmware with the previous version.
Changes
- Added VintageNetWiFi.Cookbook.generic/2 for easily creating WiFi configurations that will connect to WPA2-only, WPA2/WPA3-transitional, and WPA3-only access points. This works with WPA2-only WiFi modules
like what’s currently on Raspberry Pis and modules that support WPA3 like on the BeagleBone Green WiFi and custom hardware.
- Updated VintageNetWiFi.quick_connect/2 to create generic WiFi configurations. It previously generated WPA2-only ones.
- Updated :key_mgmt to support lists so that multiple key management types could be allowed. To make configs work with earlier versions of VintageNetWiFi, these are normalized to store the list in the :allowed_key_mgmt field with the first option in :key_mgmt. This means that if you revert firmware to an earlier VintageNetWiFi version, you’ll get a WPA2-only config if you’re using the new generic/2 helper.
Fixed
- Fixed specification of WPA2-PSK configurations that use SHA256 hashing. This not a common configuration to my knowledge and it would have failed due to a typo previously.
vintage_net_wifi, v0.12.3
Relaxed frame protection requirement in generic WiFi configuration to work with more access points. This fixes an issue with connecting to hotspot mode a Samsung phone and
probably other devices. The generic configuration works all WPA2 PSK and WPA3 SAE access points tested so far.
vintage_net_wifi, v0.12.2
Handle update_current_access_point crashes to handle attempts to associate with mesh endpoints.
vintage_net_mobile, v0.11.5
- Create /var/run/pppd/lock directory if it doesn’t exist to avoid some versions of pppd exiting. Thanks to @ringlej for the fix.
vintage_net_wireguard, v0.2.0
- Scope logger messages to module
- Include stderr with wg command output
- Support OTP >= 25
- Ensure peer arg ordering is correct
- Change allowed-ips to expected comma-separated list
- Fix warnings for Elixir >= 1.15
vintage_net_wireguard, v0.1.0
Initial release with support for starting a Wireguard client connection
See the README.md for more information on configuration
- VintageNetWireguard.ConfigFile.parse/1 for parsing a Wireguard *.conf file into the expected format for configuring with VintageNet
- Compilation of wg(8) utility
vintage_net_wizard, v0.4.16
- Use VintageNetWiFi’s built-in WiFi access point summarization function since it is more complete at removing APs that can’t be connected to. (@LivInAbsurdism)
vintage_net_wizard, v0.4.15
- Update to
support Elixir 1.15.4 and OTP 26.
mdns_lite, v0.8.9
- Bug fixes
- Switch bridge recursive lookup to default to false. The issue that this works around has been fixed since OTP 24.1.
- Handle crash when cleaning up responders when a network goes down.
System updates
Runtime
nerves_runtime, v0.13.7
- Changes
- Add Nerves.Runtime.Heart.guarded_immediate_reboot/0 to ungracefully reboot.
- Modify Nerves.Runtime.FwupOps.factory_reset/1 to immediately reboot to avoid a graceful shutdown unintentionally partially undoing the factory reset work.
- Default EXT4 application partitions to remount read-only when formatted. This changes the behavior from file I/O returning file system corruption errors to file I/O returning read-only filesystem errors. The change was made for consistency with F2FS and to lock things down as soon as corruption was detected.
nerves_heart, v2.3.0
- Changes
- Add guarded immediate reboot and poweroff commands. These bypass all graceful shutdown code and should be used with care. Like the regular guarded reboot and power they stop petting the watchdog too.
nerves,
v1.10.5
Improvements
- Support Elixir 1.16
- Add support for :gitea_releases and :gitea_api artifact sites
Bug Fix
- Ensure a package is loaded
before compile.nerves_package
Buildroot base system updates
nerves_system_br, v1.25.3
This is a security/bug fix update for 1.25.2.
nerves_system_br, v1.26.0
This update pulls in Buildroot 2023.11.1. This is a major Buildroot update from v1.25.3.
Nerves systems need the following updates:
- For Raspberry Pi systems using libcamera, change BR2_PACKAGE_LIBCAMERA_PIPELINE_RASPBERRYPI=y to BR2_PACKAGE_LIBCAMERA_PIPELINE_RPI_VC4=y
- If using a RISC-V processor, the ISA options changed. This involves changing BR2_RISCV_ISA_CUSTOM_RVM=y to BR2_RISCV_ISA_RVM=y, etc.
nerves_system_br, v1.26.1
This is a security/bug fix update for 1.26.0.
System releases
One set is a major Buildroot and toolchain update.
Some RPi systems:
- also adds support for using Scenic without customizing the system.
Please see nerves_system_br v1.25.0 release notes for upgrade instructions if you’ve forked this system.
The other is a security/bug fix update.
Package updates
nerves_livebook, v0.11.1
The Raspberry Pi 3 (rpi3), original Pi (rpi), and Pi 2 (rpi2) images are not working. Please use other devices in the interim or go back to a previous release. See https://github.com/nerves-project/nerves_system_rpi3/pull/306 for status.
- Updates
- Add 64-bit RPi Zero 2W (rpi0_2). 32-bit mode was supported before via rpi3a, but this target enables the JIT
- Add RPi 5 (rpi5). This port is current experimental
- Update Nerves systems to nerves_system_br
1.25.2 versions
- Erlang 26.1.2
- Buildroot 2023.08.4
- Linux 6.1 on all Raspberry Pi and BBB ports
- Update Elixir to 1.15.7
- Update all dependencies to their latest versions
nerves_livebook, v0.12.0
- Updates
- Update Livebook to v0.12.1
- Fix Raspberry Pi 3 regression in v0.11.1
- Update Elixir to 1.16.0
- SBOM generation is temporarily off pending a PR getting merged
nerves_livebook, v0.12.1
- Updates
- Fix LED naming changes from Linux kernel update that ended up breaking RPi Zero, 2, and 3.
- Update Nerves systems to nerves_system_br 1.24.1 versions (Erlang 26.2.1)
- Add WPA3 support for devices with WiFi modules that support it
(currently only BeagleBone’s with WiLink modules)
- Update all dependencies to latest versions
- Fix diagnostics notebook (@mnishiguchi)
- Fix firmware update notebook (@5avage)
nerves_system_mangopi_mq_pro, v0.7.0
This is a major Buildroot and toolchain update that also adds support for HDMI output and runtime device tree overlays.
New features
- Fixed issues preventing the HDMI output from working and enabled libcairo to support Scenic. Scenic works out of the box, but it appears that there are still HDMI output issues for some monitors (1024x768 display instead of 1080p).
- Enabled runtime device tree overlay support. This is currently an expert
feature, but it does work for simple overlays.
Updated dependencies
nerves_system_mangopi_mq_pro, v0.7.1
This is a security/bug fix update.
Package updates
nerves_system_vultr, v0.22.0
nerves_system_vultr, v0.22.1
nerves_system_x86_64, v1.25.0
nerves_system_x86_64, v1.25.1
nerves_system_grisp2, v0.9.1
nerves_system_grisp2, v0.9.0
nerves_system_osd32mp1, v0.16.1
nerves_system_osd32mp1, v0.16.0
nerves_system_rpi5, v0.0.2
nerves_system_rpi4, v1.25.1
nerves_system_rpi4, v1.25.0
nerves_system_rpi3a, v1.25.1
nerves_system_rpi3a, v1.25.0
nerves_system_rpi3,
v1.25.2
nerves_system_rpi3, v1.25.1
This fixes an accidental regression in 1.25.0 with the Linux 6.1 update. The Linux configuration wasn’t updated correctly and it didn’t work. This release has the fixed configuration.
nerves_system_rpi3, v1.25.0
nerves_system_rpi2, v1.25.1
nerves_system_rpi2, v1.25.0
nerves_system_rpi0, v1.25.1
nerves_system_rpi0, v1.25.0
nerves_system_rpi, v1.25.1
nerves_system_rpi, v1.25.0
nerves_system_bbb,
v2.20.2
nerves_system_bbb, v2.20.1
This fixes a regression where the forced circuits_gpio dependency update broke compilation. This removes the optional dependency, but be sure to see the note below about the GPIOs being remapped and Circuits.GPIO v1.2.0 containing a workaround.
nerves_system_bbb, v2.20.0
This is a
major Buildroot, toolchain, and Linux kernel update.
Please see nerves_system_br v1.25.0 release notes for upgrade instructions if you’ve forked this system.
The Linux kernel update from 5.10 to 6.1 has a side effect of renumbering GPIOs. Circuits.GPIO v1.2 accounts for this so programs don’t need to change that use it. See https://github.com/elixir-circuits/circuits_gpio/pull/153 for more
information. This system has an optional dependency on Circuits.GPIO to force the upgrade.
circuits_quickstart, v0.8.1
- Updates
- Fix Raspberry Pi 3 (rpi3) regression in v0.8.0 that prevented it from booting.
- Update Elixir to 1.16.0
circuits_quickstart, v0.8.0
- Updates
- Update Nerves systems to nerves_system_br v1.25.2 (Erlang/OTP 26.1.2, Buildroot 2023.08.4)
- Add experimental Raspberry Pi 5 image (rpi5)
- Add 64-bit Raspberry Pi Zero W (rpi0_2)
- Update Circuits.I2C and Circuits.SPI to v2 versions
- Update all other dependencies to latest
Utilities
circuits_spi, v2.0.2
- Bug fixes
- Remove lazy NIF loading. There’s an unexplained segfault in a small example program that uses the same strategy. Even though it wasn’t reproduceable here, it’s not worth the risk. Thanks to @pojiro for investigating.
circuits_spi, v2.0.1
- Changes
- Fix race condition when multiple processes load the NIF simultaneously that would cause an unnecessary crash.
circuits_i2c, v2.0.3
- Bug fixes
- Remove lazy NIF loading. There’s an unexplained segfault in a small example program that uses the same strategy. Even though it wasn’t reproduceable here, it’s not worth the risk. Thanks to @pojiro for investigating.
circuits_i2c, v2.0.2
- Changes
- Fix race condition when multiple processes load the NIF simultaneously that would cause an unnecessary crash.
- Bump minimum supported version of Elixir to 1.11 since no longer testing with it due to a dependency issue.
circuits_gpio, v1.2.2
- Bug fixes
- Remove lazy NIF loading. There’s an unexplained segfault in a small example program that uses the same strategy. Even though it wasn’t reproduceable here, it’s not worth the risk. Thanks to @pojiro for investigating.
circuits_gpio, v2.0.2
Bug fixes
- Remove lazy NIF loading. There’s an unexplained segfault in a small example program that uses the same strategy. Even though it wasn’t reproduceable here, it’s not worth the risk. Thanks to @pojiro for investigating.
Changes
- Add example Livebook. Thanks to @mnishiguchi.
circuits_gpio, v2.0.1
- Bug fixes
- Fix race condition when loading NIF. If two processes caused the NIF to be loaded at the same time, then it was possible for one to return an error.
- Remove tracking of the number of open pins from the cdev backend to not need to synchronize access to the count. This feature really was only used for the unit tests.
circuits_gpio, v1.2.1
- Bug fixes
- Fix race condition when loading NIF. If two processes caused the NIF to be loaded at the same time, one might return an error. This issue was introduced in v1.2.0.
circuits_gpio, v2.0.0
This is a major update to Circuits.GPIO that modernizes the API, restricts usage to Nerves and Linux, and updates the Linux/Nerves backend to the Linux GPIO cdev interface.
It is mostly backwards compatible with Circuits.GPIO v1. Please see PORTING.md for upgrade instructions.
New features
Support alternative backends for different operating systems or for simulated hardware. The Linux cdev backend can be compiled out.
Circuits.GPIO.open/3 is much more flexible in how GPIOs are identified. Specifying GPIOs by number still works, but it’s now possible to specify GPIOs by string labels and by tuples that contain the GPIO controller name and index. See t:gpio_spec/0 and the README.md for details.
List out available GPIOs with Circuits.GPIO.enumerate/0. Other helper functions are available for getting more information about each GPIO too.
Specify pull modes in general rather than only Raspberry Pis on Linux and Nerves
Easily do one-off reads and writes with Circuits.GPIO.read_one/2 and Circuits.GPIO.write_one/3
Improved performance on Nerves and Linux; kernel-applied timestamping of GPIO input events
Add Circuits.GPIO.Diagnostics to automate runtime testing
Changes
- More consistent error returns. Unexpected errors return {:errno, value} tuples to help correlate errors to low level docs
- Deferred loading of the NIF to simplify debugging of GPIO backends. Segfaults crash on first use of Circuits.GPIO rather than on load.
circuits_uart, v1.5.2