Re: [PATCH v3 00/15] efi_loader: efi http and ipconfig drivers

Adriano Córdova
2024-11-14T16:16:53Z

Hi Ilias,
I have been testing with grub, and with the efi selftest. Here are the
steps to test with a riscv grub:

1. Get grubriscv64.efi from e.g. the following .deb package
wget
http://launchpadlibrarian.net/754414418/grub-efi-riscv64-unsigned_2.12-5ubuntu5.1_riscv64.deb

2. Compile U-boot with qemu-riscv64_smode_defconfig. Enable CMD_WGET.

3. Create a tap interface:
$ sudo ip tuntap add dev tap0 mode tap
$ sudo ip addr add 10.0.0.0/24 dev tap0
$ sudo ip link set dev tap0 up

4. Start an http server in a directory containing grubriscv64.efi and a
test file (e.g. a riscv kernel)
$ sudo python3 -m http.server 80 --bind 10.0.0.0

5. Launch U-boot:
$ qemu-system-riscv64 \
-machine virt \
-nographic \
-kernel u-boot \
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
-device virtio-net-device,netdev=net0

6. Inside U-boot's console
=> setenv ipaddr 10.0.0.1
=> setenv netmask 255.255.255.0
=> wget 10.0.0.0:80/grubriscv64.efi <http://10.0.0.0/grubriscv64.efi>
=> bootefi $loadaddr

7. Print debug, check address and installed protocols (optional):
grub> set debug="peimage,net"
grub> net_ls_addr
grub> lsefi

8. Download a test file, e.g. a kernel, through http (here Image is a riscv
linux kernel):
grub> linux (http,10.0.0.0:80)/Image

9. Try boot it:
grub> boot

Best,
Adriano

El jue, 14 nov 2024 a las 12:22, Ilias Apalodimas (<
ilias.apalodimas@linaro.org>) escribió:

> Hi Adriano,
>
> On Mon, 11 Nov 2024 at 23:10, Adriano Cordova <adrianox@gmail.com> wrote:
>
>> Add support for EFI_HTTP_PROTOCOL, EFI_HTTP_SERVICE_BINDING_PROTOCOL,
>> and EFI_IP4_CONFIG2_PROTOCOL.
>>
>> This series depends on the series 'wget: Expose wget to applications',
>> also found at:
>> https://github.com/0n41rd4/u-boot/commits/http-driver-wget
>>
>> The fist two patches of this series are not efi specific and have also
>> been sent to the corresponding maintainers, but this series depends on
>> them, so they are added here for redundancy. A branch with both series
>> of patches, concatenated, is at:
>> https://github.com/0n41rd4/u-boot/commits/efi-http-driver
>
>
> It would help a lot if we had pointers (or an EFI app) using this protocol
> to test. Are you using any of that for devel/debugging?
>
> Thanks
> /Ilias
>
>>
>>
>> Adriano Cordova (13):
>> net: net_utils: Move ip_to_string to lib/net_utils.c
>> net: wget: let wget_with_dns work with dns disabled
>> efi_loader: device_path: add definition of
>> DEVICE_PATH_SUB_TYPE_MSG_IPV4
>> efi_loader: device_path: add efi_dp_from_ipv4
>> efi_api: add definitions for HTTP and IP4_CONFIG2 protocols
>> efi_loader: efi_net: add efi_net_set_addr, efi_net_get_addr
>> efi_loader: device_path: add support for HTTP device path
>> efi_loader: net: set EFI bootdevice device path to HTTP when loaded
>> from wget
>> efi_loader: net: add support to send http requests and parse http
>> headers
>> efi_loader: efi_net: add EFI_IP4_CONFIG2_PROTOCOL
>> efi_loader: efi_net: add EFI_HTTP_PROTOCOL
>> efi_selftest: add test for HTTP protocol
>> efi_selftest: add test for IPv4 Config2 protocol
>>
>> Heinrich Schuchardt (2):
>> efi_loader: add IPv4() to device path to text protocol
>> lib: uuid: display HTTP and IPV4 Config II protocols
>>
>> include/efi_api.h | 220 +++++++++
>> include/efi_loader.h | 42 ++
>> include/net-common.h | 10 +
>> lib/efi_loader/Kconfig | 17 +
>> lib/efi_loader/Makefile | 2 +
>> lib/efi_loader/efi_device_path.c | 95 +++-
>> lib/efi_loader/efi_device_path_to_text.c | 23 +
>> lib/efi_loader/efi_http.c | 563 +++++++++++++++++++++++
>> lib/efi_loader/efi_ipconfig.c | 216 +++++++++
>> lib/efi_loader/efi_net.c | 316 ++++++++++++-
>> lib/efi_selftest/Makefile | 2 +
>> lib/efi_selftest/efi_selftest_http.c | 315 +++++++++++++
>> lib/efi_selftest/efi_selftest_ipconfig.c | 173 +++++++
>> lib/net_utils.c | 11 +
>> lib/uuid.c | 14 +
>> net/lwip/wget.c | 1 +
>> net/net.c | 11 -
>> net/wget.c | 39 +-
>> 18 files changed, 2038 insertions(+), 32 deletions(-)
>> create mode 100644 lib/efi_loader/efi_http.c
>> create mode 100644 lib/efi_loader/efi_ipconfig.c
>> create mode 100644 lib/efi_selftest/efi_selftest_http.c
>> create mode 100644 lib/efi_selftest/efi_selftest_ipconfig.c
>>
>> --
>> 2.43.0
>>
>>