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