| Message ID | 20241111210959.560738-1-adrianox@gmail.com |
|---|---|
| Headers | show |
| Series | efi_loader: efi http and ipconfig drivers | expand |
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 > >
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
>>
>>
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.apalodimas@linaro.org <mailto:ilias.apalodimas@linaro.org>>) > escribió: > > Hi Adriano, > > On Mon, 11 Nov 2024 at 23:10, Adriano Cordova <adrianox@gmail.com > <mailto: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 > <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 >
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 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