VBE has been a long-running project to create a smaller and faster alternative to EFI. It was originally introduced as a concept in 2022, along with a sandbox implementation and a simple firmware updater for fwupd.

In the intervening period an enormous about of effort has gone into getting this landed in U-Boot for a real board. This has resulted in 10 additional series, on top of the sandbox work:

  • A – Various MMC and SPL tweaks (14 patches, series)
  • B – binman: Enhance FIT support for firmware (20 patches, series)
  • C – binman: More patches to support VBE (15 patches, series)
  • D – A collection of minor tweaks in MMC and elsewhere (18 patches, series)
  • E – SPL improvements and other tweaks (19 patches, series)
  • F – VBE implementation itself, with SPL ‘relocating jump’ (22 patches, series)
  • G – VBE ‘ABrec’ implementation in TPL/SPL/VPL (19 patches, series)
  • H – xPL-stack cleanup (4 patches, series)
  • I – Convert rockchip to use Binman templates (7 patches, series), kindly taken over and landed by Jonas Karlman
  • J – Implementation for RK3399 (25 patches, series)

That’s a total of 163 patches!

The Firefly RK3399 board was chosen, since it has (just) enough SRAM and is fully open source.

The final series has not yet landed in the main tree and it is unclear whether it will. For now I have put it in the Concept tree. You can see a video of it booting below:

I have been thinking about why this took so long to (almost) land. Here is my list, roughly in order from most important to least:

  1. Each series had to land before the next could be sent, with it taking at least one release cycle (3 months) to land each one
  2. Some of the new features were difficult to implement, particularly the relocating SPL jump and the new Binman features
  3. Many of the patches seemed aimless or irrelevant when sent, since they had no useful purpose before VBE could fully land. This created resistance in review
  4. On the other hand, sending too many patches at once would cause people to ignore the series

Overall it was a very difficult process, even for someone who knows U-Boot well. It concerns me that it has become considerably harder to introduce major new things in U-Boot, compared to the days of sandbox or driver model. I don’t have much of a comparison with other firmware projects, but I’m interested in hearing other people’s point of view. Please add a comment if you have thoughts on this.

Anyway, I am pleased to be done with it. The only thing missing at present is ‘ABrec’ updates in fwupd. It should be fairly easy to do, but for the signature checking. Since fwupd has its own implementation of libfdt, that might be non-trivial.

More information on VBE:

Author

  • Simon Glass is a primary author of U-Boot, with around 10K commits. He is maintainer of driver model and various other subsystems in U-Boot.

Leave a Reply

Your email address will not be published. Required fields are marked *