mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-11 17:56:58 +02:00
Previous patches enabled SetVariableRT using a RAM backend. Although EBBR [0] defines a variable format we can teach userspace tools and write the altered variables, it's better if we skip the ABI requirements completely. So let's add a new variable, in its own namespace called "VarToFile" which contains a binary dump of the updated RT, BS and, NV variables and will be updated when GetVariable is called. Some adjustments are needed to do that. Currently we discard BS-only variables in EBS(). We need to preserve those on the RAM backend that exposes the variables. Since BS-only variables can't appear at runtime we need to move the memory masking checks from efi_var_collect() to efi_get_next_variable_name_mem()/ efi_get_variable_mem() and do the filtering at runtime. We also need an efi_var_collect() variant available at runtime, in order to construct the "VarToFile" buffer on the fly. All users and applications (for linux) have to do when updating a variable is dd that variable in the file described by "RTStorageVolatile". Linux efivarfs uses a first 4 bytes of the output to represent attributes in little-endian format. So, storing variables works like this: $~ efibootmgr -n 0001 $~ dd if=/sys/firmware/efi/efivars/VarToFile-b2ac5fc9-92b7-4acd-aeac-11e818c3130c of=/boot/efi/ubootefi.var skip=4 bs=1 [0] https://arm-software.github.io/ebbr/index.html#document-chapter5-variable-storage Suggested-by: Ard Biesheuvel <ardb@kernel.org> # dumping all variables to a variable Co-developed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> # contributed on efi_var_collect_mem() Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> |
||
---|---|---|
.. | ||
.gitignore | ||
boothart.c | ||
capsule_esl.dtsi.in | ||
dtbdump.c | ||
efi_acpi.c | ||
efi_bootbin.c | ||
efi_bootmgr.c | ||
efi_boottime.c | ||
efi_capsule.c | ||
efi_conformance.c | ||
efi_console.c | ||
efi_device_path_to_text.c | ||
efi_device_path_utilities.c | ||
efi_device_path.c | ||
efi_disk.c | ||
efi_dt_fixup.c | ||
efi_esrt.c | ||
efi_file.c | ||
efi_firmware.c | ||
efi_freestanding.c | ||
efi_gop.c | ||
efi_helper.c | ||
efi_hii_config.c | ||
efi_hii.c | ||
efi_image_loader.c | ||
efi_load_initrd.c | ||
efi_load_options.c | ||
efi_memory.c | ||
efi_net.c | ||
efi_riscv.c | ||
efi_rng.c | ||
efi_root_node.c | ||
efi_runtime.c | ||
efi_setup.c | ||
efi_signature.c | ||
efi_smbios.c | ||
efi_string.c | ||
efi_tcg2.c | ||
efi_unicode_collation.c | ||
efi_var_common.c | ||
efi_var_file.c | ||
efi_var_mem.c | ||
efi_var_seed.S | ||
efi_variable_tee.c | ||
efi_variable.c | ||
efi_watchdog.c | ||
helloworld.c | ||
initrddump.c | ||
Kconfig | ||
Makefile | ||
smbiosdump.c |