Packages
nerves_runtime
0.13.13
0.13.13
0.13.12
0.13.11
retired
0.13.10
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.10
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
retired
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.0
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
Small, general runtime utilities for Nerves devices
Current section
Files
Jump to
Current section
Files
lib/nerves_runtime/kv_backend/uboot_env.ex
# SPDX-FileCopyrightText: 2022 Frank Hunleth
#
# SPDX-License-Identifier: Apache-2.0
defmodule Nerves.Runtime.KVBackend.UBootEnv do
@moduledoc """
U-Boot environment block KV store
This is the default KV store. It delegates to the `UBootEnv` library
for loading and saving to a U-Boot formatted environment block. There's
nothing to configure. It will find the block by reading `/etc/fw_env.config`.
"""
@behaviour Nerves.Runtime.KVBackend
@impl Nerves.Runtime.KVBackend
def load(options) do
with {:ok, config} <- options_to_uboot_config(options) do
UBootEnv.read(config)
end
end
@impl Nerves.Runtime.KVBackend
def save(%{} = kv, options) do
with {:ok, config} <- options_to_uboot_config(options),
{:ok, current_kv} <- UBootEnv.read(config) do
merged_kv = Map.merge(current_kv, kv)
UBootEnv.write(merged_kv, config)
end
end
defp options_to_uboot_config(options) do
case Keyword.fetch(options, :uboot_locations) do
{:ok, locations} ->
{:ok, %UBootEnv.Config{locations: Enum.map(locations, &struct(UBootEnv.Location, &1))}}
:error ->
UBootEnv.configuration()
end
end
end