Hi Heinrich, On Fri, 22 Sept 2023 at 19:02, Heinrich Schuchardt <[email protected]> wrote: > > On 9/23/23 00:13, Simon Glass wrote: > > Hi Heinrick & Bin, > > > > I'd like to be able to figure out in U-Boot what OS is on a USB stick. > > For example, with the Ubuntu installer, I can boot it (through grub), > > but I cannot see how to read anything useful from the USB stick that > > would indicate that it is Ubuntu, what version it is, etc. > > > > Does U-Boot need an ISO9660-filesystem driver for that? Is there any other > > way? > > > > With Debian I can see the actual files (linux and initrd) , so it is a > > bit easier. > > > > Regards, > > SImon > > The format of the Ubuntu images depends on the architecture. Let's > assume that you relate to amd64 > (https://cdimage.ubuntu.com/daily-live/current/mantic-desktop-amd64.iso). > > This is a hybrid image, which can be either read as ISO 9660 or as a GPT > partitioned image. This is the gdisk output: > > Number Start (sector) End (sector) Size Code Name > 1 64 10049451 4.8 GiB 0700 ISO9660 > 2 10049452 10059487 4.9 MiB EF00 Appended2 > 3 10059488 10060087 300.0 KiB 0700 Gap1 > > You can mount partition 2 as FAT file system in Linux: > > $ sudo kpartx mantic-desktop-amd64.iso -a -v > [sudo] password for zfsdt: > add map loop1p1 (252:4): 0 10049388 linear 7:1 64 > add map loop1p2 (252:5): 0 10036 linear 7:1 10049452 > add map loop1p3 (252:6): 0 600 linear 7:1 10059488 > > $ sudo mount /dev/mapper/loop1p2 /mnt > > $ mount > /dev/mapper/loop1p2 on /mnt type vfat > (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro) > > The problem is upstream U-Boot is that the partition drivers are scanned > alphabetically: a_efi, dos, iso > > If we change this to a_iso, b_efi, dos, we can read the ISO image: > > => host bind 0 /tmp/mantic-desktop-amd64.iso > => part list host 0 > > Partition Map for HOST device 0 -- Partition Type: ISO > > Part Start Sect x Size Type > 1 3684 4 512 U-Boot > 2 10049452 10036 512 U-Boot > > => ls host 0:2 > EFI/ > > => load host 0:2 $kernel_addr_r EFI/boot/bootx64.efi > 960472 bytes read in 0 ms > > Unfortunately the sandbox crashes when executing the EFI binary. > > So let't try qemu-x86_64_defconfig: > > qemu-system-x86_64 -m 3G -nographic -bios u-boot.rom \ > -drive if=none,file=/tmp/mantic-desktop-amd64.iso,format=raw,id=VIRTIO1 \ > -device virtio-blk,drive=VIRTIO1 > > And voilá your are in GRUB. > > As it does not find the /boot directory let's go to the GRUB console:
I'm not sure what is going on there, as for me 'bootflow scan -lb usb' boots automaticaly. > > grub> root=(cd0,gpt1) > grub> linux /casper/vmlinuz root=/dev/vda1 efi=debug console=/dev/ttyS0 > grub> initrd /casper/initrd > grub> boot > EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path > > I have no clue why it stops here. That's the efi_gop graphics bug. I sent a v2 patch for it[1] Regards, Simon [1] https://patchwork.ozlabs.org/project/uboot/patch/20230922153814.v2.1.I9f7f373d00947c704aeae0088dfedd8df07fab60@changeid/

