[U-Boot] [PATCH v4 0/9] cmd: add efitool for efi environment
AKASHI Takahiro
takahiro.akashi at linaro.org
Tue Jan 15 02:55:13 UTC 2019
This patch set is a collection of patches to enhance efi user interfaces
/commands. It will help improve user experience on efi boot and make it
more usable *without* edk2's shell utility.
Let's see how it works:
=> efitool boot add 1 SHELL mmc 0:1 /Shell.efi ""
=> efitool boot add 2 HELLO mmc 0:1 /hello.efi ""
=> efitool boot dump
Boot0001:
attributes: A-- (0x00000001)
label: SHELL
file_path: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)/HD(1,MBR,0x086246ba,0x800,0x40000)/\\Shell.efi
data:
Boot0002:
attributes: A-- (0x00000001)
label: HELLO
file_path: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)/HD(1,MBR,0x086246ba,0x800,0x40000)/\\hello.efi
data:
=> efitool boot order 1 2
=> efitool boot order
1: Boot0001: SHELL
2: Boot0002: HELLO
=> run -e Boot0002 (or bootefi bootmgr - 2) ; '-' means no dtb specified
WARNING: booting without device tree
Booting: HELLO
## Starting EFI application at 000000007db8b040 ...
Hello, world!
## Application terminated, r = 0
=> env set -e PlatformLang en ; important!
(or you can do "efitool setvar PlatformLang en")
=> env print -e
Boot0001: {boot,run}(blob)
00000000: 01 00 00 00 68 00 53 00 ....h.S.
00000010: 48 00 45 00 4c 00 4c 00 H.E.L.L.
00000020: 00 00 01 04 14 00 b9 73 .......s
00000030: 1d e6 84 a3 cc 4a ae ab .....J..
00000040: 82 e8 28 f3 62 8b 03 1a ..(.b...
00000050: 05 00 00 03 1a 05 00 00 ........
00000060: 04 01 2a 00 01 00 00 00 ..*.....
00000070: 00 08 00 00 00 00 00 00 ........
00000080: 00 00 04 00 00 00 00 00 ........
00000090: ba 46 62 08 00 00 00 00 .Fb.....
000000a0: 00 00 00 00 00 00 00 00 ........
000000b0: 01 01 04 04 1c 00 5c 00 ......\.
000000c0: 5c 00 53 00 68 00 65 00 \.S.h.e.
000000d0: 6c 00 6c 00 2e 00 65 00 l.l...e.
000000e0: 66 00 69 00 00 00 7f ff f.i....
000000f0: 04 00 00 ...
Boot0002: {boot,run}(blob)
00000000: 01 00 00 00 68 00 48 00 ....h.H.
00000010: 45 00 4c 00 4c 00 4f 00 E.L.L.O.
00000020: 00 00 01 04 14 00 b9 73 .......s
00000030: 1d e6 84 a3 cc 4a ae ab .....J..
00000040: 82 e8 28 f3 62 8b 03 1a ..(.b...
00000050: 05 00 00 03 1a 05 00 00 ........
00000060: 04 01 2a 00 01 00 00 00 ..*.....
00000070: 00 08 00 00 00 00 00 00 ........
00000080: 00 00 04 00 00 00 00 00 ........
00000090: ba 46 62 08 00 00 00 00 .Fb.....
000000a0: 00 00 00 00 00 00 00 00 ........
000000b0: 01 01 04 04 1c 00 5c 00 ......\.
000000c0: 5c 00 68 00 65 00 6c 00 \.h.e.l.
000000d0: 6c 00 6f 00 2e 00 65 00 l.o...e.
000000e0: 66 00 69 00 00 00 7f ff f.i....
000000f0: 04 00 00 ...
BootOrder: {boot,run}(blob)
00000000: 01 00 02 00 ....
OsIndicationsSupported: {ro,boot}(blob)
00000000: 00 00 00 00 00 00 00 00 ........
PlatformLang: {boot,run}(blob)
00000000: 65 6e en
=> run -e Boot0001 or bootefi bootmgr
(UEFI shell ...)
"setvar" command now supports efi shell-like syntax:
=> env set -e foo =S\"akashi\" =0x012345 =Habcdef
=> env print -e foo
foo: {boot,run}(blob)
00000000: 61 6b 61 73 68 69 45 23 akashiE#
00000010: 01 00 ab cd ef .....
Other useful sub commands are:
=> efitool devices ; print uefi devices
=> efitool drivers ; print uefi drivers
=> efitool dh ; print uefi handles
=> efitool images ; print loaded images
=> efitool memmap ; dump uefi memory map
Enjoy!
-Takahiro Akashi
Changes in v4 (Jan 15, 2019)
* rename the command name from efishell to efitool
* use efi_uintn_t for "size" if appropriate
* correct a help text for "boot add" sub-command
* "boot" sub-command always takes a hexadecimal number
* use systab.boottime directly instead of a local variable, bs
* fix a bug in "setvar" sub-command
* fix a bug in "devices" and "dh" sub-command
* fix a bug in "memmap" sub-command
* add "boot next" sub-command to set BootNext variable
* "drivers" sub-command prints more useful info, including a driver's
name which originates from a corresponding u-boot efi driver
* "dh" sub-commands prints more useful info, including a list of
protocols which are bound to a given handle
Changes in v3 (Dec 18, 2018)
* split v2 into two separate patch series
* add CONFIG_CMD_EFISHELL to enable/disable efishell command
* add missing free() at several places in efishell command
Changes in v2 (Nov 5, 2018)
* modify efi_dp_from_name() for use in efishell
* rename efi_marshal_load_option() to efi_serialize_load_option(),
taking a "struct efi_load_option" as an argument
* improve a format in dumping uefi variables
* enhance a setvar syntax as efi's shell does
* change a syntax from "bootefi bootmgr -2" to "bootefi bootmgr - 2"
* add -e option to run command
* add -e option to env command
* add more sub-commands
AKASHI Takahiro (9):
cmd: add efitool command
cmd: efitool: add devices command
efi_driver: add name to driver binding protocol
cmd: efitool: add drivers command
cmd: efitool: add dh command
cmd: efitool: add images command
cmd: efitool: add memmap command
cmd: efitool: export uefi variable helper functions
cmd: env: add "-e" option for handling UEFI variables
cmd/Kconfig | 10 +
cmd/Makefile | 1 +
cmd/efitool.c | 1103 +++++++++++++++++++++++++++++++++++
cmd/nvedit.c | 61 +-
include/command.h | 4 +
include/efi_driver.h | 1 +
lib/efi_driver/efi_uclass.c | 1 +
7 files changed, 1179 insertions(+), 2 deletions(-)
create mode 100644 cmd/efitool.c
--
2.19.1
More information about the U-Boot
mailing list