On 11/14/24 17:16, Adriano Córdova wrote:
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 <http://
launchpadlibrarian.net/754414418/grub-efi-riscv64-
unsigned_2.12-5ubuntu5.1_riscv64.deb>

If you are on Debian or Ubuntu you can use

dpkg -x grub-efi-riscv64-unsigned_2.12-5ubuntu5.1_riscv64.deb target_dir

for extraction.

On other distros

ar -x grub-efi-riscv64-unsigned_2.12-5ubuntu5.1_riscv64.deb
mkdir -p target_dir
tar --zstd -xf data.tar.zst -C target_dir

target_dir/usr/lib/grub/riscv64-efi/monolithic/grubnetriscv64.efi
is the file I am using. That one has all the network modules included.

Best regards

Heinrich


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 <http://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.apalodi...@linaro.org <mailto:ilias.apalodi...@linaro.org>>)
escribió:

    Hi Adriano,

    On Mon, 11 Nov 2024 at 23:10, Adriano Cordova <adria...@gmail.com
    <mailto:adria...@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
        <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
        <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


Reply via email to