u-boot on x86

Simon Glass sjg at chromium.org
Mon May 12 15:08:12 CEST 2025


Hi Michael,

On Thu, 8 May 2025 at 14:51, Michael <mep.sw.dev at gmail.com> wrote:
>
> Hello!,
>
> i'm currently working on a project that could use several architectures
> (arm / x86).
> To have a common base for all systems, i want to use u-boot as unified
> bootloader for both platforms.
> At the moment i try to get u-boot working on x86. These systems are more
> general pcs than classic embedded systems and can have intel atom / i3...
> etc. processors (for example advantech mio series) - All of them have a
> uefi bios.
> To build the whole system i am using yocto. I have made some minor changes
> to u-boot (v2025.01 / build as efi app / binary) to fit my use case (find
> env partition via gpt part uuid / A/B update mechanism etc.)
> The kernel and initramfs are packed as fit image (
> https://docs.u-boot.org/en/latest/usage/fit/x86-fit-boot.html). I can boot
> the system and the a/b update mechanism is also working.
>
> The fit image contains kernel / setup / initramfs - (
> https://docs.u-boot.org/en/latest/usage/fit/kernel.html)
> The current boot procedure is: "boot uboot.efi" → "load fit image over the
> efi interface" → "bootm"
>
> My current problem is, that i can only use one cpu core. I think there is a
> problem with the acpi tables ("smpboot: Boot CPU (id 0) not listed by BIOS"
> / "smpboot: Allowing 1 CPUs, 0 hotplug CPUs" / "smpboot: SMP disabled")
> I already got some hints on the irc chat (thanks for that!), but i could
> not fix the issue yet. I also tried an "EFI handover" patch for uboot, but
> with this, i cannot boot the kernel anymore (exception).

Can you use the 'acpi' command to examine the tables and see what is
there? These tables are not created by U-Boot in this case. Also, I'm
assuming that U-Boot does not have CONFIG_SMP set, so it should be
ignoring the other CPUs.

I did think of one issue, though. The ACPI tables are expected to be
at f0000, but when booting as an EFI app, that is not the case. There
is code at the bottom of write_tables() to add a pointer from f0000 to
where the tables actually are. So you may need to put that code
somewhere so it is done in the zboot case.

You could also try dumping the ACPI tables within Linux for the two
different scenarios (booting via U-Boot and not). That might provide a
clue as to the difference.

>
> At a later point i want to lock down the device with enabling the "secure
> boot" bios function. I have not worked with secure boot yet. I think i can
> only get it working with the fit images (fit signature verification)?

Yes you can use FIT, which is good if you are trying to be like ARM.
You may have seen this talk[1]

>
> Is this thre right implementation approch?
> I am grateful for any advice!

Yes it seems right to me. I'm hoping to get this into CI early next
month so it is properly tested.

Regards,
SImon

[1] https://www.youtube.com/watch?v=hte60f7I9j4


More information about the U-Boot mailing list