Skip to content

Releases: nerves-project/nerves_runtime

v0.13.12

30 Jan 21:56

Choose a tag to compare

  • Changes
    • Partially revert Elixir 1.20 warning fix in v0.13.11 that caused a different
      issue. This fixes a missing require Logger on non-host targets.

v0.13.11

29 Jan 14:56

Choose a tag to compare

This change adds a simple firmware validator for Nerves devices that validate
their firmware the first time it's run. It's optional and the default is to not
use it. This is useful for all Nerves systems that require validation on boot
and is intended to ease the change on the Raspberry Pi "2.0" Nerves systems.

The simple firmware validator only checks that all OTP applications have started
up successfully. If you already have a firmware validator, you can just ignore
this.

If you don't know if you need a firmware validator, you likely don't since your
device boots with the assumption that the firmware will work. If you need to run
fw_validate or Nerves.Runtime.validate_firmware/0 every time you load new
firmware, then you'll want some code to do it automatically and this is an
option.

See the main README.md and Nerves.Runtime.StartupGuard for integration with
your project.

  • Changes
    • Add Nerves.Runtime.StartupGuard
    • Fix new Elixir 1.20 warnings

v0.13.10

01 Dec 22:46

Choose a tag to compare

  • Changes
    • Support overriding or disabling data partition initialization. See the
      :init_module option documentation.
    • Support passing extra options to fwup to enable fwup to run third party
      programs. See the :fwup_extra_options option documentation.
    • Defer Nerves KV loading until actually needed. This removes many unnecessary
      loads, but most importantly defers work that could potentially fail from
      early initialization. This allows it to fail in places that are easier to
      debug.
    • Support passing arguments to rngd and haveged if you're using them. See
      rngd_args and haveged_args in the application config. This is a rare
      use case especially since Linux kernels have improved their support for
      early entropy.

v0.13.9

19 Aug 20:29

Choose a tag to compare

  • Changes
    • Document application config keys. These are now official. If you had been
      modifying the application config for regression tests, note that the :env
      key is now :fwup_env and :revert_fw_path is now ops_fw_path.

    • Add Nerves.Runtime.firmware_slots/0 to return a map indicating the
      currently running slot and the one that will be run on next boot. Please
      update any calls to get "nerves_fw_active" directly from
      Nerves.Runtime.KV since the new firmware_slots/0 is more accurate and
      handles more scenarios on Nerves devices.

    • Add firmware_validation_status/0 to allow callers to know whether the
      status is really unknown. This isn't possible with firmware_valid?/0 which
      is problematic since unknown could mean that the U-Boot environment is
      unreadable and a fix is needed. Instead firmware_valid?/0 returns true
      in that case since this could be an old Nerves device without validation.

    • Replace call to Busybox mount to determine filesystem read-only status
      with a module that reads /proc/self/mountinfo.

    • Expose mount information via Nerves.Runtime.MountInfo. If you had been
      using MountParser, please update your calls. MountParser was not
      intended to be public API (@moduledoc false) and was removed.

    • Serialize calls to fwup to reduce chance of accidental eMMC/MicroSD
      corruption

    • Bulletproof many functions to return errors if the :nerves_runtime
      application stops. This can happen when the device is not in a good state
      and raising in NervesRuntime KV and FwupOps functions made things worse.
      This should be a rare case.

v0.13.8

25 Mar 03:58

Choose a tag to compare

This release has many updates, but none of them are expected to be noticeable to
most Nerves users. Most are in support of the Raspberry Pi's TRYBOOT feature
which is not supported in official Nerves systems.

  • Changes
    • Update licensing and copyright for REUSE compliance
    • Add Nerves.Runtime.FwopOps.status/1 to report the currently running slot
      and the one that will run on the next boot
    • Improve active (current) firmware slot detection when ops.fw is available.
      While nothing has changed in official Nerves systems, more documentation has
      been added here to make the ops.fw tasks use official.
    • Support reloading KV cache and reload it automatically on firmware
      operations that may affect it.
    • Return error and warning details from fwup calls to avoid losing failure
      reasons
    • Reduce Dialyzer warnings when calling Nerves.Runtime.mix_target/0 at
      runtime

v0.13.7

16 Jan 14:55

Choose a tag to compare

  • 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.

v0.13.6

10 Nov 23:39

Choose a tag to compare

  • Changes
    • Fix errant return from Nerves.Runtime.reboot when using guarded reboots.
      This resulted in code running after the reboot call that wasn't expected to
      have been run.
    • Simplify and harden power off and reboot for edge cases

v0.13.5

26 Sep 15:17

Choose a tag to compare

  • Changes
    • Add Nerves.Runtime.FwupOps to make it easier to run commands from the
      revert.fw (older) and ops.fw (newer) files. The firmware revert logic
      had always used this, and this makes getting to factory reset and preventing
      reverts easier. Some operations aren't available on all Nerves systems.
    • Various documentation and syntactical updates instigated by Elixir 1.15.

v0.13.4

25 Apr 02:36

Choose a tag to compare

  • Changes
    • Fixed new compiler warnings with Elixir 1.15
    • Support the Nerves Heart v2.2 snooze feature.
      Nerves.Runtime.Heart.snooze/0 will request that heart continues to pet
      the hardware watchdog and ignore lack of updates from Erlang for a short
      amount of time to allow debug of conditions that would otherwise be
      interrupted by a watchdog timeout.
    • Report errors from Heart functions rather than hang forever when Erlang
      :heart is unresponsive.
    • Support additional status from Nerves Heart v2.2 to report the initial
      bootup grace period timeout and snooze timeout remaining.

v0.13.3

25 Nov 22:39

Choose a tag to compare

  • Changes
    • Fixed poweroff with Nerves Heart v2.0 (be sure to use Nerves Heart v2.0.2 as
      well). Thanks to @amclain for finding and fixing this.