On 06/07/16 16:35, Zoran Stojsavljevic wrote:
>> Note that you can build seabios as CSM for tianocore already.
> These are the opposites: SeaBIOS is CSM ON (emulates Leagcy BIOS), while
> Tiano Core supposed to be CSM OFF (UEFI), Thus, SeaBIOS and Tiano Core
> exclude each other (should not be used together -> wrong architecture).
SeaBIOS can be built and used as a CSM with UEFI firmware built from
tianocore/edk2. The projects themselves are not "opposites".
The resultant firmware binary can boot OSes in UEFI mode or in legacy
mode. I guess those boot modes can be called opposites.
>> What is the point? You can just run tianocore as coreboot playload.
> The point is to make minimal Tiano Core (minimum for making FAT32
> partition/file system on HDD/SDD to create /boot/EFI/ directory, in
> other words minimal UEFI compliant BIOS), Tiano Core as such is good to
> be used/run for/on x86 architecture ONLY
This is patently false. Several aarch64 platforms exist that run UEFI
firmware based more or less directly on tianocore/edk2. In my living
room I have an APM Mustang that has UEFI firmware, based on tianocore/edk2.
The SBBR spec (Server Base Boot Requirements
System Software on ARM ® Platforms) mandates UEFI. Of course, not all
ARM platforms are required to conform to the SBBR, but the SBBR would be
quite foolish to require a practically unfeasible thing. tianocore/edk2
is the open source reference implementation of PI (Platform Init) and UEFI.
It's a separate question wheter specific aarch64 platform code lives
directly within the edk2 tree, or in some external tree (open source or
> (and side effect is the
> extended time for booting, since all these DXE drivers must be
> installed, which will be later mostly replaced/run over with OS drivers,
> except run time services).
DXE drivers are supposed to drive peripherals only in the exceptional
case. Most devices that are not integrated in the platform are supposed
to be driven by UEFI drivers that conform to the UEFI Driver Model.
The point of that driver model is that no compliant driver, when
initially launched, starts to drive any kind of hardware. Instead, it
installs only three callbacks (member functions of its driver binding
protocol instance): supported, start, and stop. The supported callback
is used as a very quick check by the system to see if a driver supports
a given piece of hardware. The start and stop functions instruct the
driver to actually bind (and unbind) the specified piece of hardware.
The calls to the supported and bind functions are initiated by Platform
BDS (Boot Device Selection). In other words, it is a platform decision
to automatically bind this or that set of devices. In OVMF and
ArmVirtPkg (running in QEMU, Xen, and possibly other virtual machines),
we choose to automatically bind all possible devices, because in virt,
that's generally the best approach (and it is even necessary for some
QEMU boot order quirks that I'm not going to go into now).
But, auto-binding all devices is nowhere mandated by the UEFI spec, or
any other related spec. In fact, on some x86 platforms the vendor seeks
to speed up the boot by not connecting USB keyboards even.
(And then, if you want to use the USB keyboard before the OS is booted,
for example for modifying firmware settings, you have to set a
non-volatile UEFI variable from within the OS, sometimes displayed as
"change firmware settings" or some such.
Then at the next boot, the firmware will drop you into the setup TUI,
with the keyboard (and possibly other devices) connected. The user can
massage firmware settings then; e.g., if the platform vendor wants it
too, the user may be able to add the USB keyboard to the set of
Other schemes exist too. The Platform Init specification (separate from
the UEFI specification) defines the Boot Mode HOB (hand-off block). The
HOB-producer phase of the firmware (usually: PEI, Pre-EFI
Initialization) can produce this HOB, so that later phases of the
firmware can key off of it. For example, dependent on platform hardware
support, this HOB can tell the Boot Device Selection phase *not* to
connect any other devices than the last time around, because the chassis
has not been opened since. Otherwise, BDS might want to auto-connect
everything (perhaps the user installed a new SSD, etc).
> As such, Minimal Tiano Core (minimal UEFI compliant BIOS) could be used
> on ARM architectures too, thus making ARM HW platforms also
> compatible/lookalike as x86 UEFI compliant BIOS.
The UEFI specification already contains AArch32 and AArch64 bindings. It
is already possible to implement UEFI on ARM platforms, and several
vendors have. Boot performance, as far as it is affected by the set of
devices automatically connected, is platform policy.
> In nutshell, then you can build PC/Laptop with ARM CPU/SoC HW platform,
From last September, a blog post from one of my colleagues:
> having coreboot + minimal Tiano Core + WIN 10 Boot Loader + WIN10 on it
> (since WIN10 BL does see UEFI compliance, not knowing what is really
> under the hood). ;-)
For the record, I am definitely not arguing against coreboot, or u-boot,
or even a stripped down platform firmware built purely from
tianocore/edk2. Still for the record, I'm also not arguing that people
should move to UEFI *at all*, unless they have specific reasons.
But claiming that tianocore/edk2 is only good for x86 in its current
shape and form, and implying that UEFI on ARM unconditionally needs a
lower-level "shim", are just preposterous.