Seeking Assistance: Booting on Fedora with Custom GRUB Entry

Hi everyone,

I’m having trouble booting ChromeOS using the Brunch framework on my Fedora 40. I’ve compiled Brunch and created a GRUB entry based on the official instructions, but when I try to boot via grub, I get the following errors:

error: …/…/grub-core/commands/search.c:315 no such device: /chromeos.img.

error: …/…/grub-core/fs/fshelp.c:257:file : /chromeos.img. not found

error: …/…/grub-core/net/net.c:1557:disk : loop, 7. not found

error: …/…/grub-core/loader/i386/efi/linux.c:258: you need to load kernel first

I have used brunch and booted without problems on ubuntu. My assumption is that the problem lies with how fedora and ubuntu handle grub configuration.

Here’s my current setup:

Distribution: Fedora 40

Boot Mode: UEFI (Secure Boot disabled)

ChromeOS Image: Located on /dev/nvme0n1p5 partition (NTFS)

Here’s the GRUB entry I’m using (identical to the entry that boots fine on Ubuntu):

[Grub Entry]


menuentry "ChromeOS" --class "brunch" {
rmmod tpm
img_path=/chromeos.img
img_uuid=b2ef7075-15d4-467c-bb19-0873017066ce
search --no-floppy --set=root --file \$img_path
loopback loop \$img_path
source (loop,12)/efi/boot/settings.cfg
if [ -z \$verbose ] -o [ \$verbose -eq 0 ]; then
linux (loop,7)\$kernel boot=local noresume noswap loglevel=7 options=\$options chromeos_bootsplash=\$chromeos_bootsplash \$cmdline_params \
cros_secure cros_debug img_uuid=\$img_uuid img_path=\$img_path \
console= vt.global_cursor_default=0 brunch_bootsplash=\$brunch_bootsplash quiet
else
linux (loop,7)\$kernel boot=local noresume noswap loglevel=7 options=\$options chromeos_bootsplash=\$chromeos_bootsplash \$cmdline_params \
cros_secure cros_debug img_uuid=\$img_uuid img_path=\$img_path
fi
initrd (loop,7)/lib/firmware/amd-ucode.img (loop,7)/lib/firmware/intel-ucode.img (loop,7)/initramfs.img
}

menuentry "Brunch settings" --class "brunch-settings" {
rmmod tpm
img_path=/chromeos.img
img_uuid=b2ef7075-15d4-467c-bb19-0873017066ce
search --no-floppy --set=root --file \$img_path
loopback loop \$img_path
source (loop,12)/efi/boot/settings.cfg
linux (loop,7)/kernel boot=local noresume noswap loglevel=7 options= chromeos_bootsplash= edit_brunch_config=1 \
cros_secure cros_debug img_uuid=\$img_uuid img_path=\$img_path
initrd (loop,7)/lib/firmware/amd-ucode.img (loop,7)/lib/firmware/intel-ucode.img (loop,7)/initramfs.img
}

Output of blkid on the relevant partition:

/dev/nvme0n1p5: LABEL=“CrOS” BLOCK_SIZE=“512” UUID=“53EE73A548FA975A” TYPE=“ntfs” PARTLABEL=“Basic data partition” PARTUUID=“b2ef7075-15d4-467c-bb19-0873017066ce”

Things I’ve Tried:

Verified the chromeos.img file exists at the correct location (/dev/nvme0n1p5/chromeos.img).

Double-checked that the img_uuid in my GRUB entry matches the PARTUUID from blkid.

Re-generated the GRUB configuration after making changes.

Checked for loopback device creation using losetup -a.

I’d really appreciate any help or suggestions on how to get Brunch working on my Fedora system. Thanks in advance!

Welcome to :fedora: :handshake:t5:

Does’nt it need to be mounted ? like img_path=/mnt/chromeos.img :thinking:

The /chromeos.img file does not need to be mounted because it is being accessed directly by the GRUB bootloader using loopback

  1. img_path=/chromeos.img: This would set the path of the img
  2. search --no-floppy --set=root --file \$img_path: Should be telling GRUB to find the image at img_path and set the root device to the corresponding partition
  3. loopback loop \$img_path: loopback device creatively called loop and associates it to the img file

The kernel and initrd should in theory load from my partitions in the loopback device (specified as (loop,7))

So, the image file is being accessed without needing to be mounted in the traditional sense. This is why /chromeos.img doesn’t need to be mounted

However, Fedora’s grub handling continues to work against me.

1 Like

Learn something every day !

1 Like