On Mon, 16 Oct 2023 at 08:50, Masahisa Kojima <masahisa.koj...@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 >