[PATCH v6 0/9] Add EFI HTTP boot support
Masahisa Kojima
masahisa.kojima at linaro.org
Mon Oct 16 04:39:47 CEST 2023
On Mon, 16 Oct 2023 at 08:50, Masahisa Kojima
<masahisa.kojima at linaro.org> wrote:
>
> This series adds the EFI HTTP boot support.
> User can add the URI device path with "efidebug boot add" command.
> efibootmgr handles the URI device path, download the
> specified file using wget, mount the downloaded image with
> blkmap, then boot with the default file(e.g. EFI/BOOT/BOOTAA64.EFI)
> by selecting automatically created boot option when the new disk is
> detected.
>
> This version still does not include the test.
>
> To enable EFI HTTP boot, we need to enable the following Kconfig options.
> CONFIG_CMD_DNS
> CONFIG_CMD_WGET
> CONFIG_BLKMAP
> CONFIG_EFI_HTTP_BOOT
>
> On the Socionext Developerbox, enter the following commands then
> debian installer is downloaded into "loadaddr" and installer
> automatically starts.
> => dhcp
> => setenv serverip 192.168.1.1
> => efidebug boot add -u 3 debian-netinst http://ftp.riken.jp/Linux/debian/debian-cd/12.1.0/arm64/iso-cd/debian-12.1.0-arm64-netinst.iso
> => efidebug boot order 3
> => bootefi bootmgr
>
> Note that this debian installer can not proceed the installation
> bacause RAM disk of installer image is not recogniged by the kernel.
> I'm still investigating this issue, but drivers/nvdimm/of_pmem.c in linux
> will be one of the solution to recognize RAM disk from kernel.
> (In EDK2, the equivalent solution is called ACPI NFIT.)
>
> On QEMU, I can not make DNS work from the QEMU guest.
> The following commands work on qemu_arm64(manually set the http server ip in URI).
> => dhcp
> => setenv gatewayip 10.0.2.2
> => setenv httpserverip 134.160.38.1
> => efidebug boot add -u 3 debian-netinst http://134.160.38.1/Linux/debian/debian-cd/12.1.0/arm64/iso-cd/debian-12.1.0-arm64-netinst.iso
> => efidebug boot order 3
> => bootefi bootmgr
>
> [TODO]
> - add test
> - stricter wget uri check
> - omit the dns process if the given uri has ip address
> -> this will be supported when the lwip migration completes
> - uri device path support in eficonfig
>
> [change log]
> v5 -> v6
> - add patch #4 "Boot var automatic management for removable medias"
> - boot from automatically created boot option
> rather than searching default file on the fly
> - introduce new CONFIG_EFI_HTTP_BOOT Kconfig option
> - comment in one place
> - use log_err() rather than printf()
> - use env_get_hex("filesize", 0) instead of return value of net_loop()
> - use more suitable error code
> - blkmap can be build for SPL/TPL
> - add CDROM short-form device path support
Sorry but I forgot to include the necessary changes.
I will resend this series soon.
Thanks,
Masahisa Kojima
>
> v4 -> v5
> - add missing else statement
> - add NULL check of efi_dp_find_obj() call
> - update document to remove "limitation"
>
> v3 -> v4
> - patch#8 is added to simplify the bootmgr default boot process
> - add function comments
>
> v2 -> v3
> - Patch#6 is added, reserve the whole ramdisk memory region
> - remove .efi file extension check for PE-COFF image
> - use "if IS_ENABLED(..)" as much as possible
> - 1024 should be sizeof(net_boot_file_name)
> - call net_set_state(NETLOOP_FAIL) when wget encounters error
> - describe DNS ip address host name limitation in document
>
> v1 -> v2
> - carve out the network handling(wget and dns code) under net/wget.c
> - carve out ramdisk creation code under drivers/block/blkmap_helper.c
> - wget supports the valid range check to store the received blocks using lmb
> - support when the downloaded image have no partiton table but a file system
> - not start the .efi file in try_load_entry()
> - call efi_check_pe() for .efi file to check the file is PE-COFF image
> - add documentation for EFI HTTP Boot
>
> Masahisa Kojima (8):
> net: wget: prevent overwriting reserved memory
> net: wget: add wget with dns utility function
> blk: blkmap: add ramdisk creation utility function
> efi_loader: create default file boot option
> efi_loader: support boot from URI device path
> efi_loader: add CDROM short-form device path
> cmd: efidebug: add uri device path
> doc: uefi: add HTTP Boot support
>
> Raymond Mao (1):
> Boot var automatic management for removable medias
>
> cmd/efidebug.c | 50 ++++
> doc/develop/uefi/uefi.rst | 30 ++
> drivers/block/Makefile | 3 +-
> drivers/block/blkmap.c | 15 -
> drivers/block/blkmap_helper.c | 53 ++++
> include/blkmap.h | 29 ++
> include/efi_loader.h | 2 +
> include/net.h | 17 ++
> lib/efi_loader/Kconfig | 9 +
> lib/efi_loader/efi_bootmgr.c | 282 ++++++++++++++++--
> lib/efi_loader/efi_device_path.c | 3 +-
> lib/efi_loader/efi_disk.c | 18 ++
> lib/efi_loader/efi_dt_fixup.c | 2 +-
> lib/efi_loader/efi_setup.c | 7 +
> net/wget.c | 205 ++++++++++++-
> test/py/tests/test_efi_secboot/test_signed.py | 42 +--
> .../test_efi_secboot/test_signed_intca.py | 14 +-
> .../tests/test_efi_secboot/test_unsigned.py | 14 +-
> .../test_fs/test_squashfs/test_sqfs_ls.py | 6 +
> 19 files changed, 718 insertions(+), 83 deletions(-)
> create mode 100644 drivers/block/blkmap_helper.c
>
>
> base-commit: c1ab04626d6b05c6e82dfe4d97d3f62f7310d612
> prerequisite-patch-id: 386e2563ffafe7f80fda169076d2835ea071b3f9
> --
> 2.34.1
>
More information about the U-Boot
mailing list