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 proprietary).
(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 auto-connected devices.)
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:
https://marcin.juszkiewicz.com.pl/2015/09/21/aarch64-desktop-day-one/
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.
Laszlo