I have a x86_64 Linux Kernel, with EFI_STUB enabled, and packaged into a EFI System Partition that I compiled using Buildroot. It generally will boot on any machine by just dd'ing it to a device and booting from it but on some machines with particular BIOS versions it only boots from USB drives but when I try to boot it from a SATA SSD it just shows a blank screen with a blinking cursor. Upgrading the BIOS to a newer version fixes the issue.

What would cause booting from USB to work fine but booting from SATA disk to not work? I'm at a loss for how to debug this because it is so early in the boot process. While upgrading the bios solves the issue there are some machines I need this to work on where there aren't any bios updates available so I'm wondering if there are changes I can make in my kernel configuration to get around this problem.

  • 1
    So, you can't exactly say how it fails and you're asking why? Not sure it's humanly possible to answer the question. Commented Jun 5, 2022 at 13:53
  • 2
    For some BIOS versions you need to explicitly enable EFI. The default is off. Also some older versions of BIOS will not support EFI at all. Commented Jun 5, 2022 at 15:28
  • 2
    External drives actually boot from /EFI/Boot/bootx64.efi. Internal drives typically boot from /EFI/xxxx where xxxx is distribution folder in ESP - efi system partition. Not sure how efi stub then works. Most newer UEFI should also support fallback or drive boot from internal drive which is the same as external or /EFI/boot /bootx64.efi and shown in UEFI just as a drive.
    – oldfred
    Commented Jun 5, 2022 at 15:36
  • The BIOS in question support EFI booting and the kernel is located at /EFI/boot/bootx64.efi on the drive. I believe it is finding the .efi file correctly because I can see it in the boot menu.
    – Pete
    Commented Jun 5, 2022 at 17:44


You must log in to answer this question.

Browse other questions tagged .