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 >