public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH 0/4] introduce EFI_RAM_DISK_PROTOCOL
@ 2023-07-07  4:00 Masahisa Kojima
  2023-07-07  4:00 ` [PATCH 1/4] efi_loader: add RAM disk device path Masahisa Kojima
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: Masahisa Kojima @ 2023-07-07  4:00 UTC (permalink / raw)
  To: u-boot
  Cc: Heinrich Schuchardt, Ilias Apalodimas, AKASHI Takahiro,
	Masahisa Kojima

This series introduces the EFI_RAM_DISK_PROTOCOL implementation.
The major purpose of this series is a preparation for EFI HTTP(S) boot.

Now U-Boot can download the distro installer ISO image
via wget or tftpboot commands, but U-Boot can not mount
the downloaded ISO image.
By calling EFI_RAM_DISK_PROTOCOL->register API, user can
mount the ISO image and boot the distro installer.

Note that the installation process may not proceed
after the distro installer calls ExitBootServices()
since there is no hand-off process for the block device of
memory mapped ISO image.

The EFI_RAM_DISK_PROTOCOL was tested with the
debian network installer[1] on qemu_arm64 platform.
The example procedure is as follows.
 => tftpboot 41000000 mini.iso
 => efidebug disk load 41000000 $filesize

After these commands, ISO image is mounted like:

 => efidebug dh

    000000007eec5910 (efiblk#0)
      /RamDisk(0x41000000,4974afff,3d5abd30-4175-87ce-6d64-d2ade523c4bb,0x0)
      Block IO

    000000007eec6140 (efiblk#0:1)
      /RamDisk(0x41000000,4974afff,3d5abd30-4175-87ce-6d64-d2ade523c4bb,0x0)/HD(1,0x01,0,0x0,0x33800)
      Block IO

    000000007eec62b0 (efiblk#0:2)
      /RamDisk(0x41000000,4974afff,3d5abd30-4175-87ce-6d64-d2ade523c4bb,0x0)/HD(2,0x01,0,0x33800,0x10000)
      Block IO
      System Partition
      Simple File System

  => dm tree

    blk           0  [ + ]   efi_blk               `-- efiblk#0
    partition     0  [ + ]   blk_partition             |-- efiblk#0:1
    partition     1  [ + ]   blk_partition             `-- efiblk#0:2

Debian can be successfully installed with this RAM disk on QEMU.

[TODO]
- udevices created in ./lib/efi_driver/efi_block_device.c::efi_bl_bind()
  are not removed when the efi_handle is removed.
  So after unload the RAM disk, udevices still exist.
  I plan to add a udevice removal process in ./lib/efi_driver/efi_uclass.c::efi_uc_stop().
  In addition, I also plan to add unbind() callback in struct efi_driver_ops.


[1] https://deb.debian.org/debian/dists/bookworm/main/installer-arm64/current/images/netboot/mini.iso

Masahisa Kojima (4):
  efi_loader: add RAM disk device path
  efi_loader: add EFI_RAM_DISK_PROTOCOL implementation
  cmd: efidebug: add RAM disk mount command
  efi_selftest: add EFI_RAM_DISK_PROTOCOL selftest

 cmd/efidebug.c                           | 117 ++++++
 include/efi_api.h                        |  32 ++
 include/efi_loader.h                     |   4 +
 lib/efi_driver/efi_uclass.c              |   7 +-
 lib/efi_loader/Kconfig                   |   6 +
 lib/efi_loader/Makefile                  |   1 +
 lib/efi_loader/efi_device_path_to_text.c |  14 +
 lib/efi_loader/efi_ram_disk.c            | 334 +++++++++++++++
 lib/efi_loader/efi_setup.c               |   6 +
 lib/efi_selftest/Makefile                |   1 +
 lib/efi_selftest/efi_selftest_ram_disk.c | 511 +++++++++++++++++++++++
 lib/uuid.c                               |   4 +
 12 files changed, 1035 insertions(+), 2 deletions(-)
 create mode 100644 lib/efi_loader/efi_ram_disk.c
 create mode 100644 lib/efi_selftest/efi_selftest_ram_disk.c


base-commit: e2e2aea5733f0d23cd9593bbefe5c803c552dcb9
-- 
2.34.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2023-07-12 14:02 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-07  4:00 [PATCH 0/4] introduce EFI_RAM_DISK_PROTOCOL Masahisa Kojima
2023-07-07  4:00 ` [PATCH 1/4] efi_loader: add RAM disk device path Masahisa Kojima
2023-07-07  4:00 ` [PATCH 2/4] efi_loader: add EFI_RAM_DISK_PROTOCOL implementation Masahisa Kojima
2023-07-07  4:00 ` [PATCH 3/4] cmd: efidebug: add RAM disk mount command Masahisa Kojima
2023-07-07  4:00 ` [PATCH 4/4] efi_selftest: add EFI_RAM_DISK_PROTOCOL selftest Masahisa Kojima
2023-07-07  5:17 ` [PATCH 0/4] introduce EFI_RAM_DISK_PROTOCOL AKASHI Takahiro
2023-07-07  6:29 ` Heinrich Schuchardt
2023-07-07  7:16   ` AKASHI Takahiro
2023-07-07  8:19     ` Masahisa Kojima
2023-07-07  9:12       ` AKASHI Takahiro
2023-07-10  2:13         ` Masahisa Kojima
2023-07-10  2:28           ` AKASHI Takahiro
2023-07-11  6:23             ` Masahisa Kojima
2023-07-11 19:13               ` Simon Glass
2023-07-12  6:41                 ` Heinrich Schuchardt
2023-07-12 14:00                   ` Simon Glass
2023-07-07  8:10   ` Masahisa Kojima

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox