
Hi Heinrich,
On Fri, 22 Sept 2023 at 19:02, Heinrich Schuchardt xypron.glpk@gmx.de 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.I9f7f37...