Page 1 of 1

Question about UEFI (hard time understanding wiki page)

Posted: Sun Jun 16, 2019 11:41 am
by Malfunction
Hello developers, I've just registered to OSDev forum.

I was reading the wiki (as a beginner OS developer) and I've read this page: https://wiki.osdev.org/UEFI

It got me confused instead of teaching me what UEFI is. Before reading this I thought BIOS, EFI and UEFI are three different firmware interfaces used in PCs. But in this page it says UEFI is an application which runs on top of legacy BIOS (or I understood this). I thought UEFI is a modern and more advanced alternative to BIOS firmware interface.

And another thing is when I think about "firmware" of a PC, BIOS program which resides in ROM chip of the motherboard comes to my mind. If BIOS isn't a firmware, what is a firmware? Can you give some examples please?


Thanks and regards.

Re: Question about UEFI (hard time understanding wiki page)

Posted: Sun Jun 16, 2019 11:58 am
by Pebblerubble
Well, Firmware is software that resides physically on hardware (ROM or similar).
BIOS, UEFI and EFI are forms of firmware.
BIOS is usually called Legacy BIOS because some say UEFI is a form of BIOS. (Others say it is not.)
UEFI is just an extension of EFI.
UEFI is not ontop of a BIOS.
(U)EFI is a replacement for Legacy BIOS. BIOS is real mode, 16bit and has further disadvantages because PCs simply evolved a lot from the time BIOS was "invented".
Early UEFI versions have legacy BIOS support, but don't expect that to stay that way.
You can emulate UEFI ontop of QEMU with tianocore.
One of many differences between BIOS and (U)EFI is that BIOS normally uses Master Boot Record (MBR) partition table. BIOS and GPT (GUID partition table) is possible but not used often. UEFI uses ONLY GPT, it has no support for MBR partition table. GPT can handle more partitions, for example.

Greetings
Peter

Re: Question about UEFI (hard time understanding wiki page)

Posted: Sun Jun 16, 2019 4:09 pm
by zaval
Your understanding of what they are is closer to reality, than what you've read in the wiki.
BIOS is a firmware, old standard, for x86 PCs.
EFI and UEFI are just different names for the same firmware - first it was called EFI and then got renamed into UEFI, so the former refers to the older (initial versions) of it, the latter for everything afterwards. UEFI is a firmware and it's not tight to x86 at all. It is more advanced and easier to use than BIOS, certainly. You need to write a loader for your OS in C, that makes heavy use of numerous services provided by UEFI. They are indeed very numerous - taking into account all the protocols, that might be included.
As of firmware examples. apart from the aforementioned BIOS and UEFI, one might remember OpenFirmware (OpenBoot), ARC stuff, totally disappeared now I guess. This is from real - fully fledged firmwares, with a strong and well defined interface, made for using it when loading an OS. There is also one firmware from the moronic set, :mrgreen: absolutely incapable, crippled down thing, that makes me wanna destroy it. :lol: It's called uboot. such a poop. no interfaces, instead - brain damaging following linux, like this is the only OS on the world. Well, you got the idea. it's crap. :)

There is also firmwares for a particular controller/device - WiFi chips, AHCI controllers, internal SD/eMMC/SSD controllers firmwares etc. they are kinda "local" firmwares, whereas BIOS, UEFI, OF are global, platform firmwares.

Finally, if you wanna know about UEFI, go and download the official specification. First sections are the best and pretty easy way to get the idea of what it is and what it's not.