BIOS: Difference between revisions
removed vandalism |
m Comma Tags: Visual edit Mobile edit Mobile web edit |
||
Line 1: | Line 1: | ||
{{Short description|Firmware for hardware initialization and OS runtime services}} |
|||
{{Otheruses3|Bios}} |
|||
{{About|the BIOS as found in IBM PC/AT and compatibles.|the modern replacement that is often still called BIOS|UEFI|the general concept|Firmware||Bios (disambiguation)}} |
|||
{{Infobox Computer Hardware Generic |
|||
{{Use dmy dates|date=October 2020|cs1-dates=y}} |
|||
| name = BIOS: Basic Input/Output System |
|||
{{Infobox technology standard |
|||
| image = AwardBIOS CMOS Setup Utility.png |
|||
| title = |
|||
| caption = Phoenix AwardBIOS CMOS ([[non-volatile memory]]) Setup utility on a standard PC |
|||
| |
| long_name = |
||
| image = Pair of BIOS chips.jpg |
|||
| invent-name = |
|||
| |
| image_size = |
||
| |
| alt = |
||
| caption = A pair of [[Advanced Micro Devices|AMD]] BIOS chips for a [[Dell]] 310 computer from the 1980s. The bottom one shows the distinct window of an [[EPROM]] chip. |
|||
| class2 = [[EPROM]] |
|||
| |
| abbreviation = |
||
| native_name = <!-- Name in local language. If more than one, separate using {{plain list}} --> |
|||
| manuf1 = [[American Megatrends]] |
|||
| native_name_lang = <!-- ISO 639-1 code e.g. "fr" for French. If more than one, use {{lang}} inside native_name items instead --> |
|||
| manuf2 = [[Phoenix Technologies]] |
|||
| |
| status = |
||
| year_started = 1981{{efn|Although the term BIOS predates 1981, the standard for [[IBM PC–compatible]] computers started with the release of the original [[IBM Personal Computer]].}} |
|||
| first_published = <!-- {{Start date|YYYY|MM|DD|df=y}} --> |
|||
| version = |
|||
| version_date = |
|||
| preview = |
|||
| preview_date = |
|||
| organization = Originally [[IBM]] as proprietary software, later industry wide as a [[de facto]] standard. In 1996, the ''BIOS Boot Specification'' was written by [[Compaq]], [[Phoenix Technologies]] and [[Intel]]. |
|||
| committee = |
|||
| series = |
|||
| editors = |
|||
| authors = |
|||
| base_standards = |
|||
| related_standards = |
|||
| predecessor = |
|||
| successor = [[UEFI]] |
|||
| domain = |
|||
| license = |
|||
| copyright = |
|||
| website = <!-- {{URL|example.com}} --> |
|||
}} |
}} |
||
In [[computing]], '''BIOS''' ({{IPAc-en|ˈ|b|aɪ|ɒ|s|,_|-|oʊ|s}}, {{respell|BY|oss|,_|-|ohss}}; '''Basic Input/Output System''', also known as the '''System BIOS''', '''ROM BIOS''', '''BIOS ROM''' or '''PC BIOS''') is [[firmware]] used to provide runtime services for [[operating system]]s and [[Computer program|programs]] and to perform [[Computer hardware|hardware]] initialization during the [[booting]] process (power-on startup).<ref name="pcguidedefinition" /> The firmware comes pre-installed on the computer's [[motherboard]]. |
|||
<!-- There is currently much more information in the German Wikipedia. Please help translate and add some information from that article. --> |
|||
The name originates from the Basic Input/Output System used in the [[CP/M]] operating system in 1975.<ref name="Kildall_1975_BDOS" /><ref name="Kildall_1980_CPM" /> The BIOS firmware was originally [[Proprietary software|proprietary]] to the [[IBM PC]]; it was [[reverse engineer]]ed by some companies (such as [[Phoenix Technologies]]) looking to create compatible systems. The [[Interface (computing)|interface]] of that original system serves as a [[De facto standard|''de facto'' standard]]. |
|||
In [[computing]], the '''BIOS''' ({{pronEng|ˈbaɪoʊs}}) is an [[initialism]] stands for the '''Basic Input/Output System''' according to the IBM Personal Computer Technical Reference manual<ref>IBM Personal Computer Technical Reference manual, IBM Corporation, First Edition, Revised March 1983, page iii</ref> <ref>{{Citation |
|||
| last1 = Mukherjee | first1 = Anindya |
|||
| last2 = Narushoff | first2 = Paul |
|||
| title = Programmer's Guide to the AMIBIOS |
|||
| publisher = Windcreat/McGraw-Hill |
|||
| year = 1993 |
|||
| isbn = 0-07-001561-9 }}</ref> or the punctuational variants '''Basic Input Output System''', or '''Basic Input-Output System'''.{{TOCnestright}} |
|||
The BIOS in older PCs initializes and tests the system hardware components ([[power-on self-test]] or POST for short), and loads a [[boot loader]] from a mass storage device which then initializes a [[kernel (operating system)|kernel]]. In the era of [[DOS]], the BIOS provided [[BIOS interrupt call]]s for the keyboard, display, storage, and other [[input/output]] (I/O) devices that standardized an interface to application programs and the operating system. More recent operating systems do not use the BIOS interrupt calls after startup.<ref name="Booting · Linux Inside">{{Cite web|title=Booting · Linux Inside|url=https://0xax.gitbooks.io/linux-insides/content/Booting/|access-date=2020-11-10|website=0xax.gitbooks.io}}</ref> |
|||
BIOS in part refers to the [[Firmware|firmware code]] run by a [[PC]] when first powered on, which is a type of [[boot loader]]. The primary function of the BIOS is to identify and initialize system component hardware (such as the video display card, [[hard disk]], and [[floppy disk|floppy]]<!-- and [[Optical disc drive|optical disk]] drives This is an error, CDROM/DVD's require external drivers, the BIOS knows nothing about. At most, it maps the drive space to device 0-3 assuming there is a second hard disk. User:Fabartus 11 July 2008--->). This is to prepare the machine into a known low capability state, so other [[Computer software|software programs]] stored on various media can load, execute, and assume control of the PC.<ref>[http://computer.howstuffworks.com/bios1.htm HowStuffWorks: What BIOS Does].</ref> This process is known as booting, or booting up, which is short for [[Bootstrapping (computing)|bootstrapping]]. Among other classes of computers, the generic terms ''[[boot monitor]]'', ''[[boot loader]]'' or ''[[booting|boot ROM]]'' were commonly used. Some Sun and Macintosh PowerPC computers used [[Open Firmware]] for this purpose. There are a few alternatives for Legacy BIOS in the x86 world: [[Extensible Firmware Interface]], [[Open Firmware]] (used on the [[OLPC XO-1]]) and [[coreboot]]. |
|||
Most BIOS implementations are specifically designed to work with a particular computer or [[motherboard]] model, by interfacing with various devices especially system [[chipset]]. Originally, BIOS firmware was stored in a [[Read-only memory|ROM]] chip on the PC motherboard. In later computer systems, the BIOS contents are stored on [[flash memory]] so it can be rewritten without removing the chip from the motherboard. This allows easy, end-user updates to the BIOS firmware so new features can be added or bugs can be fixed, but it also creates a possibility for the computer to become infected with BIOS [[rootkit]]s. Furthermore, a BIOS upgrade that fails could [[brick (electronics)|brick]] the motherboard. |
|||
The BIOSes of [[IBM PC]] class machines can also be said to be a coded program embedded on a chip that recognizes and controls various devices that make up [[x86]] personal computers, and provides a small library of basic Input/Output functions that can be called to operate and control the peripherals such as the keyboard, primitive (800 x 600) display functions and so forth. Computers designed to run Windows ME or Windows 2000, or later, supersede this basic monitor functionality by taking over direct control of the interrupt table and replacing the monitor routines with faster and more robust low-level modules that, unlike the BIOS function set, are re-entrant. Various BIOS functions in ROM were left in control in earlier windows versions, and the BIOS only comes into play today in the alternate shell [[CMD.exe]], or if the machine is booted into a legacy DOS version.{{Facy|date=July 2008}} |
|||
[[Unified Extensible Firmware Interface]] (UEFI) is a successor to the legacy PC BIOS, aiming to address its technical limitations.<ref name="Bradley" /> UEFI firmware may include legacy BIOS compatibility to maintain compatibility with operating systems and option cards that do not support UEFI native operation.<ref>{{cite web |title=Unified Extensible Firmware Interface|url=https://www.intel.com/content/www/us/en/developer/articles/tool/unified-extensible-firmware-interface.html |website=Intel }}</ref><ref>{{cite web |title=UEFI |url=https://wiki.osdev.org/UEFI |website=OSDev.org |ref=Legacy_bootloader_or_UEFI_application.3F}}</ref><ref>{{cite web |url=http://www.intel.com/content/dam/doc/reference-guide/efi-compatibility-support-module-specification-v097.pdf |title=Intel® Platform Innovation Framework for EFI Compatibility Support Module Specification (revision 0.97) |date=4 September 2007 |access-date=6 October 2013 |publisher=Intel}}</ref> Since 2020, all PCs for Intel platforms no longer support Legacy BIOS.<ref>{{Cite web |title=Removal of Legacy Boot Support for Intel Platforms Technical Advisory |url=https://www.intel.com/content/www/us/en/content-details/630266/removal-of-legacy-boot-support-for-intel-platforms-technical-advisory.html |access-date=2024-07-25}}</ref> The last version of [[Microsoft Windows]] to officially support running on PCs which use legacy BIOS firmware is [[Windows 10]] as [[Windows 11]] requires a UEFI-compliant system (except for IoT Enterprise editions of Windows 11 since version 24H2<ref name=11_IoT_req>{{Cite web|date=May 22, 2024 |title=Minimum System Requirements for Windows IoT Enterprise|url=https://learn.microsoft.com/en-gb/windows/iot/iot-enterprise/Hardware/System_Requirements?tabs=Windows11|access-date=June 7, 2024 |website=[[Microsoft Learn]]}}</ref>). |
|||
The term first appeared in the [[CP/M]] operating system, describing the part of CP/M loaded during boot time that interfaced directly with the [[Computer hardware|hardware]] (CP/M machines usually had a simple boot loader in [[Read-only memory|ROM]], and nothing else). Most versions of [[DOS]] have a file called "[[IBMBIO.COM]]" or "[[IO.SYS]]" that is analogous to the CP/M disk BIOS. |
|||
== History == |
|||
The term is incorrectly known as ''Binary Input/Output System'', ''Basic Integrated Operating System'' and occasionally ''Built In Operating System''. |
|||
{{rquote|right| |
|||
<pre>/* C P / M B A S I C I / O S Y S T E M (B I O S) |
|||
COPYRIGHT (C) GARY A. KILDALL |
|||
JUNE, 1975 */ |
|||
[…] |
|||
/* B A S I C D I S K O P E R A T I N G S Y S T E M (B D O S) |
|||
COPYRIGHT (C) GARY A. KILDALL |
|||
JUNE, 1975 */</pre> |
|||
<!-- some whitespace removed from original citation --> |
|||
| An excerpt from the BDOS.PLM file header in the [[PL/M]] source code of CP/M 1.1 or 1.2 for [[Lawrence Livermore Laboratories]] (LLL)<ref name="Kildall_1975_BDOS"/> |
|||
}} |
|||
The term BIOS (Basic Input/Output System) was created by [[Gary Kildall]]<ref name="Swaine_1997_Entrepreneurship" /><ref name="IEEE_2014_BIOS"/> and first appeared in the [[CP/M]] operating system in 1975,<ref name="Kildall_1975_BDOS" /><ref name="Kildall_1980_CPM" /><ref name="IEEE_2014_BIOS"/><ref name="Shustek_2016"/><ref name="Fischer_2001_Ewing" /><ref name="Fraley_2007_Killian" /> describing the machine-specific part of CP/M loaded during boot time that interfaces directly with the [[computer hardware|hardware]].<ref name="Kildall_1980_CPM" /> (A CP/M machine usually has only a simple [[boot loader]] in its ROM.) |
|||
Versions of [[MS-DOS]], [[PC DOS]] or [[DR-DOS]] contain a file called variously "[[IO.SYS]]", "[[IBMBIO.COM]]", "IBMBIO.SYS", or "DRBIOS.SYS"; this file is known as the "DOS BIOS" (also known as the "DOS I/O System") and contains the lower-level hardware-specific part of the operating system. Together with the underlying hardware-specific but operating system-independent "System BIOS", which resides in [[Read-only memory|ROM]], it represents the analogue to the "[[CP/M BIOS]]". |
|||
The BIOS originally [[Proprietary software|proprietary]] to the [[IBM Personal Computer|IBM PC]] has been [[reverse engineer]]ed by some companies (such as [[Phoenix Technologies]]) looking to create compatible systems. |
|||
With the introduction of PS/2 machines, IBM divided the System BIOS into real- and protected-mode portions. The real-mode portion was meant to provide backward compatibility with existing operating systems such as DOS, and therefore was named "CBIOS" (for "Compatibility BIOS"), whereas the "ABIOS" (for "Advanced BIOS") provided new interfaces specifically suited for multitasking operating systems such as [[OS/2]].<ref>{{cite journal |title=The IBM PC BIOS |journal=Byte |year=1989 |last=Glass |first=Brett |pages=303–310 |url=https://archive.org/details/eu_BYTE-1989-04_OCR/page/n373/mode/2up?view=theater |accessdate=2021-12-31 }}</ref> |
|||
== {{Anchor|BCU}}User interface == |
|||
The BIOS of the original [[IBM Personal Computer|IBM PC]] and [[IBM Personal Computer XT|XT]] had no interactive user interface. Error codes or messages were displayed on the screen, or coded series of sounds were generated to signal errors when the [[power-on self-test]] (POST) had not proceeded to the point of successfully initializing a video display adapter. Options on the IBM PC and XT were set by switches and jumpers on the main board and on [[expansion card]]s. Starting around the mid-1990s, it became typical for the BIOS ROM to include a ''"BIOS configuration utility"'' (BCU<ref>{{cite web |
|||
|url = http://ftp.hp.com/pub/caps-softpaq/cmit/HP_BCU.html |
|||
|title = HP BIOS Configuration Utility |
|||
|year = 2013 |
|||
|access-date = 2015-01-12 |
|||
|publisher = [[Hewlett-Packard]] |
|||
|url-status = live |
|||
|archive-url = https://web.archive.org/web/20150112201124/http://ftp.hp.com/pub/caps-softpaq/cmit/HP_BCU.html |
|||
|archive-date= 2015-01-12 |
|||
}}</ref>) or "BIOS setup utility", accessed at system power-up by a particular key sequence. This program allowed the user to set system configuration options, of the type formerly set using [[DIP switch]]es, through an interactive menu system controlled through the keyboard. In the interim period, IBM-compatible PCs{{mdashb}}including the [[IBM Personal Computer/AT|IBM AT]]{{mdashb}}held configuration settings in battery-backed RAM and used a bootable configuration program on floppy disk, not in the ROM, to set the configuration options contained in this memory. The floppy disk was supplied with the computer, and if it was lost the system settings could not be changed. The same applied in general to computers with an [[Extended Industry Standard Architecture|EISA]] bus, for which the configuration program was called an EISA Configuration Utility (ECU). |
|||
A modern [[Wintel]]-compatible computer provides a setup routine essentially unchanged in nature from the ROM-resident BIOS setup utilities of the late 1990s; the user can configure hardware options using the keyboard and video display. The modern Wintel machine may store the BIOS configuration settings in flash ROM, perhaps the same flash ROM that holds the BIOS itself. |
|||
== Extensions (option ROMs) == |
|||
{{See also|Option ROM}} |
|||
Peripheral cards such as hard disk drive [[host bus adapter]]s and [[video card]]s have their own firmware, and BIOS extension [[option ROM]] code may be a part of the expansion card firmware; that code provides additional capabilities in the BIOS. Code in option ROMs runs before the BIOS boots the operating system from [[mass storage]]. These ROMs typically test and initialize hardware, add new BIOS services, or replace existing BIOS services with their own services. For example, a [[SCSI controller]] usually has a BIOS extension ROM that adds support for hard drives connected through that controller. An extension ROM could in principle contain operating system, or it could implement an entirely different boot process such as [[network booting]]. Operation of an IBM-compatible computer system can be completely changed by removing or inserting an adapter card (or a ROM chip) that contains a BIOS extension ROM. |
|||
The motherboard BIOS typically contains code for initializing and bootstrapping integrated display and integrated storage. The initialization process can involve the execution of code related to the device being initialized, for locating the device, verifying the type of device, then establishing base registers, setting [[Pointer (computer programming)|pointers]], establishing interrupt vector tables,<ref>{{cite book |title=System BIOS for IBM PCs, Compatibles, and EISA Computers — The Complete Guide to ROM-Based System Software |author=Phoenix Technologies, Ltd. |author-link=Phoenix Technologies |series=Phoenix Technical Reference Series |publisher=[[Addison Wesley Publishing Company, Inc.]] |edition=2nd |date=June 1991 |location=Amsterdam |isbn=0-201-57760-7 |url-access=registration |url=https://archive.org/details/isbn_9780201577600}}</ref> selecting paging modes which are ways for organizing available [[Processor register|registers]] in devices, setting default values for accessing software routines related to [[Interrupt#Hardware interrupts|interrupts]],<ref>{{cite book |title=System BIOS for IBM PC/XT/AT Computers and Compatibles — The Complete Guide to ROM-Based System Software |author=Phoenix Technologies, Ltd. |url=https://archive.org/details/System_BIOS_for_IBM_PC_XT_AT_Computers_and_Compatibles |author-link=Phoenix Technologies |series=Phoenix Technical Reference Series |publisher=[[Addison Wesley Publishing Company, Inc.]] |edition=1st |orig-date=1987 |date=1989 |isbn=0-201-51806-6}}</ref> and setting the device's configuration using default values.<ref>{{cite book | url=https://books.google.com/books?id=gZ5SDTpMR-MC&dq=hardware+initialization&pg=PA282 | title=The PC Graphics Handbook | isbn=978-0-203-01053-2 | last1=Sanchez | first1=Julio | last2=Canton | first2=Maria P. | date=26 February 2003 | publisher=CRC Press }}</ref> In addition, plug-in adapter cards such as [[SCSI]], [[RAID]], [[network interface card]]s, and [[video card]]s often include their own BIOS (e.g. [[Video BIOS]]), complementing or replacing the system BIOS code for the given component. Even devices built into the motherboard can behave in this way; their option ROMs can be a part of the motherboard BIOS. |
|||
An add-in card requires an option ROM if the card is not supported by the motherboard BIOS and the card needs to be initialized or made accessible through BIOS services before the operating system can be loaded (usually this means it is required in the boot process). An additional advantage of ROM on some early PC systems (notably including the IBM PCjr) was that ROM was faster than main system RAM. (On modern systems, the case is very much the reverse of this, and BIOS ROM code is usually copied ("shadowed") into RAM so it will run faster.) |
|||
=== Physical placement === |
|||
[[File:Dell 310 BIOS chips.jpg|right|thumb|BIOS chips in a Dell 310 that were updated by replacing the chips]] |
|||
Option ROMs normally reside on adapter cards. However, the original PC, and perhaps also the PC XT, have a spare ROM socket on the motherboard (the "system board" in IBM's terms) into which an option ROM can be inserted, and the four ROMs that contain the BASIC interpreter can also be removed and replaced with custom ROMs which can be option ROMs. The [[IBM PCjr]] is unique among PCs in having two ROM cartridge slots on the front. Cartridges in these slots map into the same region of the upper memory area used for option ROMs, and the cartridges can contain option ROM modules that the BIOS would recognize. The cartridges can also contain other types of ROM modules, such as BASIC programs, that are handled differently. One PCjr cartridge can contain several ROM modules of different types, possibly stored together in one ROM chip. |
|||
== Operation == |
|||
=== System startup === |
|||
The [[8086]] and [[8088]] start at physical address FFFF0h.<ref>{{cite web|url = http://bitsavers.org/components/intel/_dataBooks/1981_iAPX_86_88_Users_Manual.pdf|title=iAPX 86,88 User's Manual|at=System Reset, p. 2-29, table 2-4|publisher=[[Intel]]|year=1981|access-date=April 15, 2018}}</ref> The [[80286]] starts at physical address FFFFF0h.<ref>{{cite web|url=https://en.wikichip.org/enwiki/w/images/3/3e/AMD_80286_Datasheet_%28November_1985%29.pdf|title=AMD 80286 Datasheet|at=p. 13|publisher=[[AMD]]|quote=the 286 begins execution in real mode with the instruction at physical location FFFFF0H.|year=1985}}</ref> The [[80386]] and later x86 processors start at physical address FFFFFFF0h.<ref>{{cite web|url=http://bitsavers.org/components/intel/80386/230985-003_386DX_Microprocessor_Programmers_Reference_Manual_1990.pdf|title=80386 Programmer's Reference Manual|at=Section 10.1 Processor State After Reset, pages 10-1 - 10.3|publisher=Intel|year=1990}}</ref><ref>{{cite web|url = http://bitsavers.org/components/intel/80386/230985-003_386DX_Microprocessor_Programmers_Reference_Manual_1990.pdf|title=80386 Programmer's Reference Manual|at=Section 10.2.3 First Instruction, p. 10-4|publisher=Intel|quote=Execution begins with the instruction addressed by the initial contents of the CS and IP registers. To allow the initialization software to be placed in a ROM at the top of the address space, the high 12 bits of addresses issued for the code segment are set, until the first instruction which loads the CS register, such as a far jump or call. As a result, instruction fetching begins from address 0FFFFFFF0H.|year=1990|accessdate=November 3, 2013}}</ref><ref>{{cite web | url=http://download.intel.com/products/processor/manual/325462.pdf | at=Section 9.1.4 First Instruction Executed, p. 2611 | publisher=Intel | title=Intel® 64 and IA-32 Architectures Software Developer's Manual | date=May 2012 | accessdate=August 23, 2012 | quote=The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0h. This address is 16 bytes below the processor’s uppermost physical address. The EPROM containing the software-initialization code must be located at this address. | archive-url=https://web.archive.org/web/20120808162037/http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf | archive-date=2012-08-08 | url-status=dead}}</ref> When the system is initialized, the first instruction of the BIOS appears at that address. |
|||
If the system has just been powered up or the reset button was pressed ("[[cold boot]]"), the full [[power-on self-test]] (POST) is run. If Ctrl+Alt+Delete was pressed ("[[Reboot|warm boot]]"), a special flag value stored in [[nonvolatile BIOS memory]] ("[[CMOS]]") tested by the BIOS allows bypass of the lengthy POST and memory detection. |
|||
The POST identifies, tests and initializes system devices such as the [[central processing unit|CPU]], [[chipset]], [[random-access memory|RAM]], [[motherboard]], [[video card]], [[computer keyboard|keyboard]], [[computer mouse|mouse]], [[hard disk drive]], [[optical disc drive]] and other [[computer hardware|hardware]], including [[integrated peripheral]]s. |
|||
Early IBM PCs had a routine in the POST that would download a program into RAM through the keyboard port and run it.<ref name="technical-ref-5-27"/><ref>{{cite web | title = IBM 5162 PC XT286 TechRef 68X2537 Technical Reference manual | date = August 1986 | page = 35 (System BIOS A-5) | url = http://www.reenigne.org/crtc/PC-XT.pdf | access-date = 2014-12-11 |url-status = live| archive-url = https://web.archive.org/web/20141211141709/http://www.reenigne.org/crtc/PC-XT.pdf | archive-date = 2014-12-11 }}</ref> This feature was intended for factory test or diagnostic purposes. |
|||
After the motherboard BIOS completes its POST, most BIOS versions search for option ROM modules, also called BIOS extension ROMs, and execute them. The motherboard BIOS scans for extension ROMs in a portion of the "[[upper memory area]]" (the part of the x86 real-mode address space at and above address 0xA0000) and runs each ROM found, in order. To discover memory-mapped option ROMs, a BIOS implementation scans the real-mode address space from <code>0x0C0000</code> to <code>0x0F0000</code> on 2 [[kilobyte|KB]] (2,048 bytes) boundaries, looking for a two-byte ROM ''signature'': 0x55 followed by 0xAA. In a valid expansion ROM, this signature is followed by a single byte indicating the number of 512-byte blocks the expansion ROM occupies in real memory, and the next byte is the option ROM's [[entry point]] (also known as its "entry offset"). If the ROM has a valid checksum, the BIOS transfers control to the entry address, which in a normal BIOS extension ROM should be the beginning of the extension's initialization routine. |
|||
At this point, the extension ROM code takes over, typically testing and initializing the hardware it controls and registering [[interrupt vector]]s for use by post-boot applications. It may use BIOS services (including those provided by previously initialized option ROMs) to provide a user configuration interface, to display diagnostic information, or to do anything else that it requires. |
|||
An option ROM should normally return to the BIOS after completing its initialization process. Once (and if) an option ROM returns, the BIOS continues searching for more option ROMs, calling each as it is found, until the entire option ROM area in the memory space has been scanned. It is possible that an option ROM will not return to BIOS, pre-empting the BIOS's boot sequence altogether. |
|||
=== Boot process === |
|||
[[File:Legacy BIOS boot process fixed.png|thumb|493x493px|Boot process|none]] |
|||
After the POST completes and, in a BIOS that supports option ROMs, after the option ROM scan is completed and all detected [[Read-only memory|ROM]] modules with valid [[Checksum|checksums]] have been called, the BIOS calls [[BIOS interrupt call#Interrupt table|interrupt 19h]] to start boot processing. Post-boot, programs loaded can also call interrupt 19h to reboot the system, but they must be careful to disable interrupts and other asynchronous hardware processes that may interfere with the BIOS rebooting process, or else the system may hang or crash while it is rebooting. |
|||
When interrupt 19h is called, the BIOS attempts to locate [[boot loader]] software on a "boot device", such as a [[hard disk]], a [[floppy disk]], [[CD]], or [[DVD]]. It loads and executes the first boot [[software]] it finds, giving it control of the PC.<ref name="hsw1"/> |
|||
The BIOS uses the boot devices set in [[Nonvolatile BIOS memory]] ([[CMOS]]), or, in the earliest PCs, [[DIP switch]]es. The BIOS checks each device in order to see if it is bootable by attempting to load the first sector ([[boot sector]]). If the sector cannot be read, the BIOS proceeds to the next device. If the sector is read successfully, some BIOSes will also check for the boot sector signature 0x55 0xAA in the last two bytes of the sector (which is 512 bytes long), before accepting a boot sector and considering the device bootable.{{efn|The signature at offset <code>+0x1FE</code> in boot sectors is <code>0x55 0xAA</code>, that is <code>0x55</code> at offset <code>+0x1FE</code> and <code>0xAA</code> at offset <code>+0x1FF</code>. Since [[little-endian]] representation must be assumed in the context of [[IBM PC–compatible]] compatible, this can be written as 16-bit word <code>0xAA55</code> in programs for [[Intel x86|x86]] processors (note the swapped order), whereas it would have to be written as <code>0x55AA</code> in programs for other CPU architectures using a [[big-endian]] representation. Since this has been mixed up numerous times in books and even in original Microsoft reference documents,<!-- one example of many: http://technet.microsoft.com/en-us/library/cc977219.aspx as of 2012-01-14 --> this article uses the offset-based byte-wise on-disk representation to avoid any possible misinterpretation.}} |
|||
When a bootable device is found, the BIOS transfers control to the loaded sector. The BIOS does not interpret the contents of the boot sector other than to possibly check for the boot sector signature in the last two bytes. Interpretation of data structures like partition tables and BIOS Parameter Blocks is done by the boot program in the boot sector itself or by other programs loaded through the boot process. |
|||
A non-disk device such as a [[network adapter]] attempts booting by a procedure that is defined by its [[option ROM]] or the equivalent integrated into the motherboard BIOS ROM. As such, option ROMs may also influence or supplant the boot process defined by the motherboard BIOS ROM. |
|||
With the [[El Torito (CD-ROM standard)|El Torito optical media boot standard]], the optical drive actually emulates a 3.5" high-density floppy disk to the BIOS for boot purposes. Reading the "first sector" of a CD-ROM or DVD-ROM is not a simply defined operation like it is on a floppy disk or a hard disk. Furthermore, the complexity of the medium makes it difficult to write a useful boot program in one sector. The bootable virtual floppy disk can contain software that provides access to the optical medium in its native format. |
|||
If an expansion ROM wishes to change the way the system boots (such as from a network device or a SCSI adapter) in a cooperative way, it can use the ''BIOS Boot Specification'' (BBS) [[API]] to register its ability to do so. Once the expansion ROMs have registered using the BBS APIs, the user can select among the available boot options from within the BIOS's user interface. This is why most BBS compliant PC BIOS implementations will not allow the user to enter the BIOS's user interface until the expansion ROMs have finished executing and registering themselves with the BBS API.{{Citation needed|date=October 2008}} |
|||
Also, if an expansion ROM wishes to change the way the system boots unilaterally, it can simply hook interrupt 19h or other interrupts normally called from interrupt 19h, such as interrupt 13h, the BIOS disk service, to intercept the BIOS boot process. Then it can replace the BIOS boot process with one of its own, or it can merely modify the boot sequence by inserting its own boot actions into it, by preventing the BIOS from detecting certain devices as bootable, or both. Before the BIOS Boot Specification was promulgated, this was the only way for expansion ROMs to implement boot capability for devices not supported for booting by the native BIOS of the motherboard.{{Citation needed|date=October 2014}} |
|||
==== Boot priority ==== |
|||
The user can select the boot priority implemented by the BIOS. For example, most computers have a hard disk that is bootable, but sometimes there is a removable-media drive that has higher boot priority, so the user can cause a removable disk to be booted. |
|||
In most modern BIOSes, the boot priority order can be configured by the user. In older BIOSes, limited boot priority options are selectable; in the earliest BIOSes, a fixed priority scheme was implemented, with floppy disk drives first, fixed disks (i.e., hard disks) second, and typically no other boot devices supported, subject to modification of these rules by installed option ROMs. The BIOS in an early PC also usually would only boot from the first floppy disk drive or the first hard disk drive, even if there were two drives installed. |
|||
==== Boot failure ==== |
|||
On the original [[IBM PC]] and XT, if no bootable disk was found, the BIOS would try to start [[IBM BASIC|ROM BASIC]] with the interrupt call to [[BIOS interrupt call#INT 18h: execute BASIC|interrupt 18h]]. Since few programs used BASIC in ROM, clone PC makers left it out; then a computer that failed to boot from a disk would display "No ROM BASIC" and halt (in response to interrupt 18h). |
|||
Later computers would display a message like "No bootable disk found"; some would prompt for a disk to be inserted and a key to be pressed to retry the boot process. A modern BIOS may display nothing or may automatically enter the BIOS configuration utility when the boot process fails. |
|||
=== Boot environment === |
|||
The environment for the boot program is very simple: the CPU is in real mode and the general-purpose and segment registers are undefined, except SS, SP, CS, and DL. CS:IP always points to physical address <code>0x07C00</code>. What values CS and IP actually have is not well defined. Some BIOSes use a CS:IP of <code>0x0000:0x7C00</code> while others may use <code>0x07C0:0x0000</code>.<ref>{{Cite journal |last=Akeljic |first=Bekir |date=2017-01-01 |title=BIOS BASIC INPUT/ OUTPUT SYSTEM BIOS FUNCTIONS AND MODIFICATIONS |url=https://www.academia.edu/38015589 |url-status=live |journal=BIOS|pages=12 |url-access=subscription |archive-url=https://web.archive.org/web/20220808223747/https://www.academia.edu/38015589/BIOS_BASIC_INPUT_OUTPUT_SYSTEM_BIOS_FUNCTIONS_AND_MODIFICATIONS |archive-date=2022-08-08 |access-date=2022-08-08 |via=INTERNATIONAL UNIVERSITY TRAVNIKFACULITY OF INFORMATION TECHNOLOGY TRAVNIKSOFTWARE PROGRAMMING}}</ref> Because boot programs are always loaded at this fixed address, there is no need for a boot program to be relocatable. DL may contain the drive number, as used with [[INT 13H|interrupt 13h]], of the boot device. SS:SP points to a valid stack that is presumably large enough to support hardware interrupts, but otherwise SS and SP are undefined. (A stack must be already set up in order for interrupts to be serviced, and interrupts must be enabled in order for the system timer-tick interrupt, which BIOS always uses at least to maintain the time-of-day count and which it initializes during POST, to be active and for the keyboard to work. The keyboard works even if the BIOS keyboard service is not called; keystrokes are received and placed in the 15-character type-ahead buffer maintained by BIOS.) The boot program must set up its own stack, because the size of the stack set up by BIOS is unknown and its location is likewise variable; although the boot program can investigate the default stack by examining SS:SP, it is easier and shorter to just unconditionally set up a new stack.<ref>{{Cite web |title=BIOS - CodeDocs |url=https://codedocs.org/what-is/bios |access-date=2022-08-08 |website=codedocs.org |language=en}}</ref> |
|||
At boot time, all BIOS services are available, and the memory below address <code>0x00400</code> contains the [[interrupt vector table]]. BIOS POST has initialized the system timers, interrupt controller(s), DMA controller(s), and other motherboard/chipset hardware as necessary to bring all BIOS services to ready status. DRAM refresh for all system DRAM in conventional memory and extended memory, but not necessarily expanded memory, has been set up and is running. The [[interrupt vector]]s corresponding to the BIOS interrupts have been set to point at the appropriate entry points in the BIOS, hardware interrupt vectors for devices initialized by the BIOS have been set to point to the BIOS-provided ISRs, and some other interrupts, including ones that BIOS generates for programs to hook, have been set to a default dummy ISR that immediately returns. The BIOS maintains a reserved block of system RAM at addresses <code>0x00400–0x004FF</code> with various parameters initialized during the POST. All memory at and above address <code>0x00500</code> can be used by the boot program; it may even overwrite itself.<ref>{{Cite web |title=Memory Layout and Memory Map |url=http://flint.cs.yale.edu/feng/cos/resources/BIOS/mem.htm |access-date=2022-08-08 |website=flint.cs.yale.edu}}</ref><ref>{{Cite journal |year=2020 |title=BIOS Data ACPI Table (BDAT) |url=https://uefi.org/sites/default/files/resources/BDAT%20Specification%20v4.0%20Draft5_0.pdf |url-status=live |journal=[[Interface Specification]] |volume=4 |issue=5 |pages=67 |archive-url=https://web.archive.org/web/20210703231310/https://uefi.org/sites/default/files/resources/BDAT%20Specification%20v4.0%20Draft5_0.pdf |archive-date=2021-07-03 |access-date=2022-08-08}}</ref> |
|||
== Operating system services == |
|||
The BIOS ROM is customized to the particular manufacturer's hardware, allowing low-level services (such as reading a keystroke or writing a sector of data to diskette) to be provided in a standardized way to programs, including operating systems. For example, an IBM PC might have either a monochrome or a color display adapter (using different display memory addresses and hardware), but a single, standard, BIOS [[system call]] may be invoked to display a character at a specified position on the screen in [[text mode]] or [[All points addressable|graphics mode]]. |
|||
The BIOS provides a small [[library (computing)|library]] of basic input/output functions to operate peripherals (such as the keyboard, rudimentary text and graphics display functions and so forth). When using MS-DOS, BIOS services could be accessed by an application program (or by MS-DOS) by executing an interrupt 13h [[INT (x86 instruction)|interrupt instruction]] to access disk functions, or by executing one of a number of other documented [[BIOS interrupt call]]s to access [[Display device|video display]], [[Computer keyboard|keyboard]], cassette, and other device functions. |
|||
[[Operating system]]s and executive software that are designed to supersede this basic firmware functionality provide replacement software interfaces to application software. Applications can also provide these services to themselves. This began even in the 1980s under [[MS-DOS]], when programmers observed that using the BIOS video services for graphics display were very slow. To increase the speed of screen output, many programs bypassed the BIOS and programmed the video display hardware directly. Other graphics programmers, particularly but not exclusively in the [[demoscene]], observed that there were technical capabilities of the PC display adapters that were not supported by the IBM BIOS and could not be taken advantage of without circumventing it. Since the AT-compatible BIOS ran in Intel [[real mode]], operating systems that ran in protected mode on 286 and later processors required hardware device drivers compatible with protected mode operation to replace BIOS services. |
|||
In modern PCs running modern [[operating systems]] (such as [[Microsoft Windows|Windows]] and [[Linux]]) the [[BIOS interrupt calls]] are used only during booting and initial loading of operating systems. Before the operating system's first graphical screen is displayed, input and output are typically handled through BIOS. A boot menu such as the textual menu of Windows, which allows users to choose an operating system to boot, to boot into the [[safe mode]], or to use the last known good configuration, is displayed through BIOS and receives keyboard input through BIOS.<ref name="Booting · Linux Inside"/> |
|||
Many modern PCs can still boot and run legacy operating systems such as MS-DOS or DR-DOS that rely heavily on BIOS for their console and disk I/O, providing that the system has a BIOS, or a CSM-capable UEFI firmware. |
|||
=== Processor microcode updates === |
|||
[[Intel]] processors have reprogrammable [[microcode]] since the [[P6 (microarchitecture)|P6]] microarchitecture.<ref name="Stiller_1996"/><ref name="Mueller-1"/><ref name="microcode-09"/> [[AMD]] processors have reprogrammable microcode since the [[K7 (microarchitecture)|K7]] microarchitecture. The BIOS contain patches to the processor microcode that fix errors in the initial processor microcode; microcode is loaded into processor's [[Static RAM|SRAM]] so reprogramming is not persistent, thus loading of microcode updates is performed each time the system is powered up. Without reprogrammable microcode, an expensive processor swap would be required;<ref name="Mueller-2"/> for example, the [[Pentium FDIV bug]] became an expensive fiasco for Intel as it required a [[product recall]] because the original Pentium processor's defective microcode could not be reprogrammed. Operating systems can update [[main processor]] microcode also.<ref>{{Cite web|title=KB4100347: Intel microcode updates|url=https://support.microsoft.com/en-us/help/4100347/intel-microcode-updates-for-windows-10-version-1803-and-windows-server|access-date=2020-09-20|website=support.microsoft.com}}</ref><ref>{{Cite web|title=Microcode - Debian Wiki|url=https://wiki.debian.org/Microcode|access-date=2020-09-19|website=wiki.debian.org}}</ref> |
|||
=== {{Anchor|SLIC}}Identification === |
|||
Some BIOSes contain a software licensing description table (SLIC), a digital signature placed inside the BIOS by the [[original equipment manufacturer]] (OEM), for example [[Dell]]. The SLIC is inserted into the ACPI data table and contains no active code.<ref name="guytechie-2010225">{{cite web |
|||
|url = http://www.guytechie.com/articles/2010/2/25/how-slp-and-slic-works.html |
|||
|title = How SLP and SLIC Works |
|||
|date = 2010-02-25 |
|||
|access-date = 2015-02-03 |
|||
|website = guytechie.com |
|||
|url-status = live |
|||
|archive-url = https://web.archive.org/web/20150203135933/http://www.guytechie.com/articles/2010/2/25/how-slp-and-slic-works.html |
|||
|archive-date = 2015-02-03 |
|||
}}</ref><ref>{{cite web |
|||
|url = http://www.congatec.com/fileadmin/user_upload/Documents/Application_Notes/AN21_Add_OEM_ACPI_SLIC_Table.pdf |
|||
|title = Create and add an OEM ACPI SLIC table module to a congatec BIOS |
|||
|date = 2011-06-16 |
|||
|access-date = 2015-02-03 |
|||
|website = congatec.com |
|||
|url-status = live |
|||
|archive-url = https://web.archive.org/web/20140802014113/http://www.congatec.com/fileadmin/user_upload/Documents/Application_Notes/AN21_Add_OEM_ACPI_SLIC_Table.pdf |
|||
|archive-date = 2014-08-02 |
|||
}}</ref> |
|||
Computer manufacturers that distribute OEM versions of Microsoft Windows and Microsoft application software can use the SLIC to authenticate licensing to the OEM Windows Installation disk and system [[recovery disc]] containing Windows software. Systems with a SLIC can be preactivated with an OEM product key, and they verify an XML formatted OEM certificate against the SLIC in the BIOS as a means of self-activating (see [[System Locked Preinstallation]], SLP). If a user performs a fresh install of Windows, they will need to have possession of both the OEM key (either SLP or COA) and the digital certificate for their SLIC in order to bypass activation.<ref name="guytechie-2010225" /> This can be achieved if the user performs a restore using a pre-customised image provided by the OEM. Power users can copy the necessary certificate files from the OEM image, decode the SLP product key, then perform SLP activation manually. |
|||
=== Overclocking === |
|||
Some BIOS implementations allow [[overclocking]], an action in which the [[central processing unit|CPU]] is adjusted to a higher [[clock rate]] than its manufacturer rating for guaranteed capability. Overclocking may, however, seriously compromise system reliability in insufficiently cooled computers and generally shorten component lifespan. Overclocking, when incorrectly performed, may also cause components to overheat so quickly that they mechanically destroy themselves.<ref>{{cite web|url=http://lifehacker.com/a-beginners-introduction-to-overclocking-your-intel-pr-5580998|title=A Beginner's Introduction to Overclocking Your Intel Processor|author=Whitson Gordon|publisher=Gawker Media|work=Lifehacker|date=13 January 2014 |access-date=6 December 2014|url-status = live|archive-url=https://web.archive.org/web/20141207213218/http://lifehacker.com/a-beginners-introduction-to-overclocking-your-intel-pr-5580998|archive-date=7 December 2014}}</ref> |
|||
=== Modern use === |
|||
Some older [[operating systems]], for example [[MS-DOS]], rely on the BIOS to carry out most input/output tasks within the PC.<ref name="computing-basics-94"/> |
|||
Calling [[real mode]] BIOS services directly is inefficient for [[protected mode]] (and [[long mode]]) operating systems. [[BIOS interrupt calls]] are not used by modern multitasking operating systems after they initially load. |
|||
In the 1990s, BIOS provided some [[protected mode]] interfaces for [[Microsoft Windows]] and [[Unix-like]] operating systems, such as [[Advanced Power Management]] (APM), [[Plug and Play BIOS]], [[Desktop Management Interface]] (DMI), [[VESA BIOS Extensions]] (VBE), [[e820]] and [[MultiProcessor Specification]] (MPS). Starting from the year 2000, most BIOSes provide [[Advanced Configuration and Power Interface|ACPI]], [[SMBIOS]], [[VBE]] and [[e820]] interfaces for modern operating systems.<ref>{{Cite web|title=What is ACPI (Advanced Configuration and Power Interface)? - Definition from WhatIs.com|url=https://searchwindowsserver.techtarget.com/definition/ACPI-Advanced-Configuration-and-Power-Interface|access-date=2020-09-18|website=SearchWindowsServer|language=en}}</ref><ref>{{Cite web|title=Changing hardware abstraction layer in Windows 2000 / XP – Smallvoid.com|date=15 January 2001 |url=http://smallvoid.com/article/winnt-hardware-abstraction-layer.html|access-date=2020-09-18|language=en-US}}</ref><ref>{{Cite web|title=What is ACPI?|url=https://www.spo-comm.de/en/blognews/detail/article/News/detail/what-is-acpi-1/|access-date=2020-09-18|website=www.spo-comm.de}}</ref><ref>{{Cite web|last=lorihollasch|title=Support for headless systems - Windows drivers|url=https://docs.microsoft.com/en-us/windows-hardware/drivers/display/support-for-headless-systems|access-date=2020-12-05|website=docs.microsoft.com|language=en-us}}</ref><ref>{{Cite web|title=Memory Map (x86) - OSDev Wiki|url=https://wiki.osdev.org/Memory_Map_(x86)|access-date=2020-12-11|website=wiki.osdev.org}}</ref> |
|||
After [[operating systems]] load, the [[System Management Mode]] code is still running in SMRAM. Since 2010, BIOS technology is in a transitional process toward [[UEFI]].<ref name="Bradley" /> |
|||
== Configuration == |
|||
=== Setup utility === |
|||
Historically, the BIOS in the IBM PC and XT had no built-in user interface. The BIOS versions in earlier PCs (XT-class) were not software configurable; instead, users set the options via [[DIP switch]]es on the motherboard. Later computers, including all IBM-compatibles with 80286 CPUs, had a battery-backed [[nonvolatile BIOS memory]] (CMOS RAM chip) that held BIOS settings.<ref name="CMOS Battery"/> These settings, such as video-adapter type, memory size, and hard-disk parameters, could only be configured by running a configuration program from a disk, not built into the ROM. A special "reference diskette" was inserted in an [[IBM Personal Computer/AT|IBM AT]] to configure settings such as memory size.<ref>{{cite book | url=https://books.google.com/books?id=56TT-cJeP9wC&dq=bios+cmos&pg=PA358 | title=PC Systems, Installation and Maintenance | isbn=978-1-136-37441-8 | last1=Beales | first1=R. P. | date=11 August 2006 | publisher=Routledge }}</ref> |
|||
Early BIOS versions did not have passwords or boot-device selection options. The BIOS was hard-coded to boot from the first floppy drive, or, if that failed, the first hard disk. Access control in early AT-class machines was by a physical keylock switch (which was not hard to defeat if the computer case could be opened). Anyone who could switch on the computer could boot it.{{citation needed|date=March 2013}} |
|||
Later, 386-class computers started integrating the BIOS setup utility in the ROM itself, alongside the BIOS code; these computers usually boot into the BIOS setup utility if a certain key or key combination is pressed, otherwise the BIOS POST and boot process are executed. |
|||
[[File:Award BIOS setup utility.png|thumb|Award BIOS setup utility on a standard PC]] |
|||
A modern BIOS setup utility has a [[text user interface]] (TUI) or [[graphical user interface]] (GUI) accessed by pressing a certain key on the keyboard when the PC starts. Usually, the key is advertised for short time during the early startup, for example "Press DEL to enter Setup". |
|||
The actual key depends on specific hardware. The settings key is most often [[Delete key|Delete]] ([[Acer Inc.|Acer]], [[ASRock]], [[Asus]] PC, [[Elitegroup Computer Systems|ECS]], [[Gigabyte Technology|Gigabyte]], [[Micro-Star International|MSI]], [[ZOTAC|Zotac]]) and [[Function key|F2]] (Asus motherboard, [[Dell]], [[Lenovo]] laptop, [[Origin PC]], [[Samsung]], [[Toshiba]]), but it can also be [[Function key|F1]] (Lenovo desktop) and [[Function key|F10]] ([[Hewlett-Packard|HP]]).<ref>{{cite news |title=How to Enter the BIOS on Any PC: Access Keys by Manufacturer |url=https://www.tomshardware.com/reviews/bios-keys-to-access-your-firmware,5732.html |work=Tom's Hardware |date=4 February 2022 |language=en}}</ref> |
|||
Features present in the BIOS setup utility typically include: |
|||
* Configuring, enabling and disabling the hardware components |
|||
* Setting the [[system time]] |
|||
* Setting the boot order |
|||
* Setting various passwords, such as a password for securing access to the BIOS user interface and preventing malicious users from booting the system from unauthorized portable storage devices, or a password for booting the system |
|||
=== Hardware monitoring === |
|||
{{Main|Hardware monitoring}} |
|||
A modern BIOS setup screen often features a '''PC Health Status''' or a '''Hardware Monitoring''' tab, which directly interfaces with a Hardware Monitor chip of the mainboard.<ref name=sensors-mmath>{{cite thesis |
|||
|degree= [[Master of Mathematics#Canada|MMath]] |
|||
|author= Constantine A. Murenin |date= 2010-05-21 |
|||
|section = 11.1. Interfacing from the BIOS |
|||
|title= OpenBSD Hardware Sensors – Environmental Monitoring and Fan Control. |
|||
|location= [[University of Waterloo]] |publisher= UWSpace |
|||
|url = http://cnst.su/MMathCS |hdl = 10012/5234 |
|||
|id = Document ID: ab71498b6b1a60ff817b29d56997a418. |
|||
}}</ref> This makes it possible to monitor CPU and [[computer case|chassis]] temperature, the voltage provided by the [[power supply unit (computer)|power supply unit]], as well as monitor and [[computer fan control|control the speed of the fans]] connected to the motherboard. |
|||
Once the system is booted, hardware monitoring and [[computer fan control]] is normally done directly by the Hardware Monitor chip itself, which can be a separate chip, interfaced through [[I²C]] or [[System Management Bus|SMBus]], or come as a part of a [[Super I/O]] solution, interfaced through [[Industry Standard Architecture]] (ISA) or [[Low Pin Count]] (LPC).<ref name=ieee07>{{Cite conference |
|||
|author= Constantine A. Murenin |date= 2007-04-17 |
|||
|url = http://sensors.cnst.su/IEEE_ICNSC_2007 |
|||
|section = 2. Hardware review |
|||
|title= Generalised Interfacing with Microprocessor System Hardware Monitors |
|||
|conference= Proceedings of 2007 IEEE International Conference on Networking, Sensing and Control, 15–17 April 2007. |
|||
|location= London, United Kingdom |
|||
|publisher=[[Institute of Electrical and Electronics Engineers|IEEE]] |
|||
|pages = 901–906 |doi = 10.1109/ICNSC.2007.372901 |isbn = 978-1-4244-1076-7 |
|||
|id = IEEE ICNSC 2007, pp. 901—906. |
|||
}}</ref> Some operating systems, like [[NetBSD]] with [[envsys]] and [[OpenBSD]] with sysctl [[hw.sensors]], feature integrated interfacing with hardware monitors. |
|||
However, in some circumstances, the BIOS also provides the underlying information about hardware monitoring through [[Advanced Configuration and Power Interface|ACPI]], in which case, the operating system may be using ACPI to perform hardware monitoring.<ref name=aibs.4>{{cite web|url=http://mdoc.su/-/aibs.4|title=aibs – ASUSTeK AI Booster ACPI ATK0110 voltage, temperature and fan sensor|publisher=[[OpenBSD]], [[DragonFly BSD]], [[NetBSD]] and [[FreeBSD]]|date=2010}}</ref><ref>{{Cite web|title=acpi_thermal(4)|url=https://www.freebsd.org/cgi/man.cgi?query=acpi_thermal&sektion=4|access-date=2021-02-24|website=www.freebsd.org}}</ref> |
|||
=== {{anchor|Flashing the BIOS}}Reprogramming === |
|||
[[File:BIOS replacement kit.jpg|right|thumb|BIOS replacement kit for a Dell 310 from the late 1980s. Included are two chips, a plastic holder for the chips, and a [[IC extractor]].]] |
|||
In modern PCs the BIOS is stored in rewritable [[EEPROM]]<ref>{{cite book | url=https://books.google.com/books?id=V48MZCwICH8C&dq=bios+eeprom&pg=PA180 | title=CompTIA A+ Certification All-In-One Desk Reference for Dummies | isbn=978-0-471-74811-3 | last1=Clarke | first1=Glen E. | last2=Tetz | first2=Edward | date=30 January 2007 | publisher=John Wiley & Sons }}</ref> or [[NOR flash memory]],<ref>{{cite book | url=https://books.google.com/books?id=vaq11vKwo_kC&dq=bios+nor+flash&pg=PA2 | title=Inside NAND Flash Memories | isbn=978-90-481-9431-5 | last1=Micheloni | first1=Rino | last2=Crippa | first2=Luca | last3=Marelli | first3=Alessia | date=27 July 2010 | publisher=Springer }}</ref> allowing the contents to be replaced and modified. This rewriting of the contents is sometimes termed ''flashing.'' It can be done by a special program, usually provided by the system's manufacturer, or at [[power-on self-test|POST]], with a BIOS image in a hard drive or USB flash drive. A file containing such contents is sometimes termed "a BIOS image". A BIOS might be reflashed in order to upgrade to a newer version to fix bugs or provide improved performance or to support newer hardware. Some computers also support updating the BIOS via an update floppy disk or a special partition on the hard drive.<ref>{{cite book | url=https://books.google.com/books?id=E1p2FDL7P5QC&dq=bios+cmos&pg=PA393 | title=Upgrading and Repairing PCS | isbn=978-0-7897-2974-3 | last1=Mueller | first1=Scott | date=2004 | publisher=Que }}</ref> |
|||
== Hardware == |
|||
[[File:Elitegroup 761GX-M754 - AMIBIOS (American Megatrends) in a Winbond W39V040APZ-5491.jpg|thumb|[[American Megatrends]] BIOS 686. This BIOS chip is housed in a [[plastic leaded chip carrier|PLCC]] package in a socket.]] |
|||
The original IBM PC BIOS (and cassette BASIC) was stored on mask-programmed [[read-only memory]] (ROM) chips in sockets on the motherboard. ROMs could be replaced,<ref>{{cite book | url=https://books.google.com/books?id=V48MZCwICH8C&dq=bios+eeprom&pg=PA180 | title=CompTIA A+ Certification All-In-One Desk Reference for Dummies | isbn=978-0-471-74811-3 | last1=Clarke | first1=Glen E. | last2=Tetz | first2=Edward | date=30 January 2007 | publisher=John Wiley & Sons }}</ref> but not altered, by users. To allow for updates, many compatible computers used re-programmable BIOS memory devices such as [[EPROM]], [[EEPROM]] and later [[flash memory]] (usually [[NOR flash]]) devices. According to Robert Braver, the president of the BIOS manufacturer Micro Firmware, '''Flash BIOS''' chips became common around 1995 because the electrically erasable PROM (EEPROM) chips are cheaper and easier to program than standard [[ultraviolet]] erasable PROM ([[EPROM]]) chips. Flash chips are programmed (and re-programmed) in-circuit, while EPROM chips need to be removed from the motherboard for re-programming.<ref name="smart-computing-97"/> BIOS versions are upgraded to take advantage of newer versions of hardware and to correct bugs in previous revisions of BIOSes.<ref name="smart-computing-96"/> |
|||
Beginning with the IBM AT, PCs supported a hardware clock settable through BIOS. It had a century bit which allowed for manually changing the century when the year 2000 happened. Most BIOS revisions created in 1995 and nearly all BIOS revisions in 1997 supported [[Year 2000 problem|the year 2000]] by setting the century bit automatically when the clock rolled past midnight, 31 December 1999.<ref name="smart-somputing-99"/> |
|||
The first flash chips were attached to the [[Industry Standard Architecture|ISA bus]]. Starting in 1998, the BIOS flash moved to the [[Low Pin Count|LPC]] bus, following a new standard implementation known as "firmware hub" (FWH). In 2005, the BIOS flash memory moved to the [[Serial Peripheral Interface|SPI]] bus.<ref>{{Cite web |url=https://images.slideplayer.com/26/8671671/slides/slide_5.jpg |title=Archived copy |access-date=2021-04-01 |archive-date=2021-08-18 |archive-url=https://web.archive.org/web/20210818182418/https://images.slideplayer.com/26/8671671/slides/slide_5.jpg |url-status=dead }}</ref> |
|||
The size of the BIOS, and the capacity of the ROM, EEPROM, or other media it may be stored on, has increased over time as new features have been added to the code; BIOS versions now exist with sizes up to 32 megabytes. For contrast, the original IBM PC BIOS was contained in an 8 KB mask ROM. Some modern motherboards are including even bigger NAND [[flash memory]] ICs on board which are capable of storing whole compact operating systems, such as some [[Linux distribution]]s. For example, some ASUS notebooks included [[Splashtop OS]] embedded into their NAND flash memory ICs.<ref name="geek-splashtop"/> However, the idea of including an operating system along with BIOS in the ROM of a PC is not new; in the 1980s, Microsoft offered a ROM option for MS-DOS, and it was included in the ROMs of some PC clones such as the [[Tandy 1000#Tandy 1000 HX .26 TX|Tandy 1000 HX]]. |
|||
Another type of firmware chip was found on the IBM PC AT and early compatibles. In the AT, the [[keyboard controller (computing)|keyboard interface]] was controlled by a [[microcontroller]] with its own programmable memory. On the IBM AT, that was a 40-pin socketed device, while some manufacturers used an EPROM version of this chip which resembled an EPROM. This controller was also assigned the [[A20 gate]] function to manage memory above the one-megabyte range; occasionally an upgrade of this "keyboard BIOS" was necessary to take advantage of software that could use upper memory.{{citation needed|date=March 2013}} <!-- An earlier version of this article stated that the IBM PC also used a microcontroller to control the keyboard interface. This is incorrect; the PC and XT used a simple shift register and an [[8-bit computing|8-bit]] parallel port of the 8255A PPI chip for the computer end of the keyboard interface. --> |
|||
The BIOS may contain components such as the [[Memory Reference Code]] (MRC), which is responsible for the memory initialization (e.g. [[Serial presence detect|SPD]] and [[memory timings]] initialization).<ref name="Life and Times"/>{{rp|8}}<ref name="Hilber"/> |
|||
Modern BIOS<ref>{{Cite web|title=Types of BIOS|url=https://www.rompacks.com/bios-files-packs/|access-date=2021-09-20|website=rompacks.com}}</ref> includes |
|||
[[Intel Management Engine]] or [[AMD Platform Security Processor]] firmware. |
|||
== {{Anchor|COMPARISON}}Vendors and products == |
|||
==The BIOS Chip and BIOS Recovery== |
|||
{| class="wikitable floatright" style="margin-left: 2em;" |
|||
{{FixHTML|beg}} |
|||
|+ Comparison of different BIOS implementations |
|||
{| align="right" class="wikitable" |
|||
|- |
|||
|- style="background-color: #efefcc" |
|||
! Company |
|||
| Boot Block |
|||
| [[Award Software|AwardBIOS]] |
|||
|- style="background-color: #cccccc" |
|||
| [[American Megatrends|AMIBIOS]] <!--latest version is 8 --> |
|||
| DMI Block |
|||
| [[Insyde Software|Insyde]] |
|||
|- style="background-color: #acaccc" |
|||
| [[SeaBIOS]] |
|||
| Main Block |
|||
|- |
|||
! License |
|||
| {{Proprietary}} |
|||
| {{Proprietary}} |
|||
| {{Proprietary}} |
|||
| {{open source|[[GNU Lesser General Public License|LGPL]] v3}} |
|||
|- |
|||
! Maintained / developed |
|||
| {{Terminated}} |
|||
| {{Terminated}} |
|||
| {{Terminated}} |
|||
| {{Yes}} |
|||
|- |
|||
! [[32-bit computing|32-bit]] PCI BIOS calls |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! {{Abbr|AHCI|Advanced Host Controller Interface}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! {{Abbr|APM|Advanced Power Management}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} <small>(1.2)</small> |
|||
| {{Yes}} <small>(1.2)</small> |
|||
|- |
|||
! {{Abbr|BBS|BIOS Boot Specification}} |
|||
| {{Yes}} |
|||
| {{Yes}} <!-- SATA, IDE, USB, LAN, Floppy --> |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! Boot menu |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! Compression |
|||
| {{Yes}} <small>([[LHA (file format)|LHA]]<ref name="prozessor-patches" />)</small> |
|||
| {{Yes}} <small>(LHA)</small> |
|||
| {{Yes}} <small>(RLE)</small> |
|||
| {{Yes}} <small>(LZMA)</small> |
|||
|- |
|||
! CMOS |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! {{Abbr|EDD|Enhanced Disk Drive}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! {{Abbr|ESCD|Extended System Configuration Data}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Dunno}} |
|||
| {{No}} |
|||
|- |
|||
! Flash from ROM |
|||
| {{Dunno}} |
|||
| {{Yes}} <!-- Qflash, Del-key --> |
|||
| {{Dunno}} |
|||
| {{No}} |
|||
|- |
|||
! Language |
|||
| Assembly |
|||
| Assembly |
|||
| Assembly |
|||
| [[C (programming language)|C]] |
|||
|- |
|||
! {{Abbr|LBA|Logical Block Addressing}} |
|||
| {{Yes}} <small>(48)</small> |
|||
| {{Yes}} <small>(48)</small> |
|||
| {{Yes}} |
|||
| {{Yes}} <small>(48)</small> |
|||
|- |
|||
! MultiProcessor Specification |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! Option ROM |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! Password |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
|- |
|||
! {{Abbr|PMM|Post Memory Manager}} |
|||
| {{Dunno}} |
|||
| {{Yes}} |
|||
| {{Dunno}} |
|||
| {{Yes}} |
|||
|- |
|||
! Setup screen |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
|- |
|||
! {{Abbr|SMBIOS|System Management BIOS}} |
|||
| {{Yes}} <!-- 2.4 or newer --> |
|||
| {{Yes}} <!-- 2.5 or newer --> |
|||
| {{Yes}} <!-- 2.6 or newer --> |
|||
| {{Yes}} |
|||
|- |
|||
! Splash screen |
|||
| {{Yes}} <small>(EPA)<ref>{{cite web |url=http://fileformats.archiveteam.org/wiki/Award_BIOS_logo |title=Award BIOS logo |date=2015-06-15 |access-date=2015-12-06 |url-status = live|archive-url=https://web.archive.org/web/20151221152258/http://fileformats.archiveteam.org/wiki/Award_BIOS_logo |archive-date=2015-12-21 }}</ref></small> |
|||
| {{Yes}} <small>([[PCX]])</small> <!-- 640x480x256 pcx --> |
|||
| {{Yes}} |
|||
| {{Yes}} <small>(BMP, JPG)</small> <!-- JPEG would use 16 or 24 bpp video mode, BMP use 24bpp mode only --> |
|||
|- |
|||
! {{Abbr|TPM|Trusted Platform Module}} |
|||
| {{Unknown}} |
|||
| {{Unknown}} |
|||
| {{Unknown}} |
|||
| {{Yes|Some}} |
|||
|- |
|||
! [[USB]] booting |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} <!-- at least USB floppy --> |
|||
| {{Yes}} |
|||
|- |
|||
! USB hub |
|||
| {{Dunno}} |
|||
| {{Dunno}} |
|||
| {{Dunno}} |
|||
| {{Yes}} |
|||
|- |
|||
! USB keyboard |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! USB mouse |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|} |
|} |
||
{{FixHTML|mid}} |
|||
[[Image:Phoenix bios.jpg|thumb|150px|ROM with BIOS]] |
|||
{{FixHTML|end}} |
|||
Prior to the early 1990s, BIOSes were stored in [[Read-only memory|ROM]] or [[Programmable read-only memory|PROM]] chips, which could not be altered by users. As its complexity and need for updates grew, and re-programmable parts became more available, BIOS firmware was most commonly stored on [[EEPROM]] or [[flash memory]] devices. The first flash chips attached to the [[Industry Standard Architecture|ISA bus]]. Starting in 1997, the BIOS flash moved to the [[Low Pin Count|LPC]] bus, a functional replacement for ISA, following a new standard implementation known as "firmware hub" (FWH). In 2006, the first systems supporting a [[Serial Peripheral Interface]] (SPI) appeared, and the BIOS flash moved again. |
|||
IBM published the entire listings of the BIOS for its original PC, PC XT, PC AT, and other contemporary PC models, in an appendix of the ''IBM PC Technical Reference Manual'' for each machine type. The effect of the publication of the BIOS listings is that anyone can see exactly what a definitive BIOS does and how it does it. |
|||
EEPROM chips are advantageous because they can be easily updated by the user; hardware manufacturers frequently issue BIOS updates to upgrade their products, improve compatibility and remove [[Software bug|bugs]]. However, this advantage had the risk that an improperly executed or aborted BIOS update could render the computer or device unusable. To avoid these situations, more recent BIOSes use a "boot block"; a portion of the BIOS which runs first and must be updated separately. This code verifies if the rest of the BIOS is intact (using [[Hash function|hash]] [[checksum]]s or other methods) before transferring control to it. If the boot block detects any corruption in the main BIOS, it will typically warn the user that a recovery process must be initiated by booting from [[removable media]] (floppy, CD or USB memory) so the user can try [[flashing the BIOS]] again. Some [[motherboard]]s have a ''backup'' BIOS (sometimes referred to as DualBIOS boards) to recover from BIOS corruptions. In 2007, [[Gigabyte Technology|Gigabyte]] began offering motherboards with a QuadBIOS recovery feature.<ref>"Quad BIOS is a unique GIGABYTE feature that includes DualBIOS and Xpress BIOS Rescue Technology. This combination delivers a safety assurance mechanism that sports a total of 4 copies of BIOS distributed between the Flash ROM, hard-disk and driver CD." [http://www.gigabyte-usa.com/News/Company/News_List.aspx?NewsID=1323 Gigabyte Corporate News, January 15, 2007].</ref> |
|||
[[File:Compaq Portable 386 BIOS.jpg|thumb|[[Compaq Portable]] 386 BIOS]] |
|||
Due to the limitation on the number of times flash memory media can be flashed, a flash-based BIOS is vulnerable to "flash-burn" viruses that repeatedly write to the flash, permanently corrupting chip content. Such attacks can be prevented by some form of write-protection, the ultimate protection being the replacement of the flash memory with a true ROM. |
|||
In May 1984, [[Phoenix Technologies|Phoenix Software Associates]] released its first ROM-BIOS. This BIOS enabled OEMs to build essentially fully compatible clones without having to reverse-engineer the IBM PC BIOS themselves, as Compaq had done for the [[Compaq Portable|Portable]]; it also helped fuel the growth in the PC-compatibles industry and sales of non-IBM versions of DOS.<ref>[https://books.google.com/books?id=zzAEAAAAMBAJ&pg=PA8 Phoenix Eagerly Waiting to Clone Next-Generation IBM BIOS]. {{webarchive|url=https://web.archive.org/web/20140122080016/http://books.google.com/books?id=zzAEAAAAMBAJ&pg=PA8 |date=2014-01-22 }}, ''InfoWorld'', 9 March 1987.</ref> The first [[American Megatrends]] (AMI) BIOS was released in 1986. |
|||
New standards grafted onto the BIOS are usually without complete public documentation or any BIOS listings. As a result, it is not as easy to learn the intimate details about the many non-IBM additions to BIOS as about the core BIOS services. |
|||
The size of the BIOS, and the capacities of the ROM, EEPROM and other media it may be stored on, has increased over time as new features have been added to the code; BIOS versions now exist with sizes up to 8 megabytes. |
|||
Many PC motherboard suppliers licensed the BIOS "core" and toolkit from a commercial third party, known as an "independent BIOS vendor" or IBV. The motherboard manufacturer then customized this BIOS to suit its own hardware. For this reason, updated BIOSes are normally obtained directly from the motherboard manufacturer. Major IBVs included [[American Megatrends]] (AMI), [[Insyde Software]], [[Phoenix Technologies]], and Byosoft. Microid Research and [[Award Software]] were acquired by [[Phoenix Technologies]] in 1998; Phoenix later phased out the Award brand name (although Award Software is still credited in newer AwardBIOS versions and in UEFI firmwares).{{when|date=June 2024}} [[General Software]], which was also acquired by Phoenix in 2007, sold BIOS for embedded systems based on Intel processors. |
|||
==Firmware on adapter cards== |
|||
A computer system can contain several BIOS firmware chips. The motherboard BIOS typically contains code to access fundamental hardware components such as the keyboard, [[floppy drive]]s, ATA (IDE) hard disk controllers, [[Universal Serial Bus|USB]] human interface devices, and storage devices. In addition, plug-in adapter cards such as [[SCSI]], [[RAID]], [[Network interface card]]s, and video boards often include their own BIOS, complementing or replacing the system BIOS code for the given component. |
|||
[[SeaBIOS]] is an open-source BIOS implementation. |
|||
In some devices that can be used by add-in adapters and actually directly integrated on the motherboard, the add-in ROM may also be stored as separate code on the main BIOS flash chip. It may then be possible to upgrade this "add-in" BIOS (sometimes called an [[option ROM]]) separately from the main BIOS code. |
|||
== Open-source BIOS replacements == |
|||
Add-in cards usually only require such an add-in BIOS if they: |
|||
The open-source community increased their effort to develop a replacement for proprietary BIOSes and their future incarnations with an open-sourced counterparts. [[Open Firmware]] was an early attempt to make an open specification for boot firmware. It was initially endorsed by IEEE in its ''IEEE 1275-1994'' standard but was withdrawn in 2005.<ref>{{Cite book |date=October 28, 1994 |title=IEEE Standard for Boot (Initialization Configuration) Firmware: Core Requirements and Practices |id=IEEE STD 1275-1994 |url=https://ieeexplore.ieee.org/document/763383 |pages=1–262 |doi=10.1109/IEEESTD.1994.89427|isbn=978-0-7381-1194-0 }}</ref><ref>{{Cite web |title=IEEE Standards Association |url=https://standards.ieee.org/ |access-date=2023-04-26 |website=IEEE Standards Association |language=en}}</ref> Later examples include the [[OpenBIOS]], [[coreboot]] and [[libreboot]] projects. [[Advanced Micro Devices|AMD]] provided product specifications for some chipsets using coreboot, and [[Google]] is sponsoring the project. [[Motherboard]] manufacturer [[Tyan]] offers [[coreboot]] next to the standard BIOS with their [[Opteron]] line of motherboards. |
|||
* Need to be used prior to the time that the operating system loads (e.g. they may be used as part of the process which loads ([[Booting|bootstraps]]) the operating system), and: |
|||
* Are not sufficiently simple, or generic in operation to be handled by the main BIOS directly |
|||
== {{Anchor|MEBROMI|DualBIOS}}Security == |
|||
[[Personal computer|PC]] [[operating system]]s such as [[DOS]], including all DOS-based versions of MS Windows, as well as bootloaders, may continue to make use of the BIOS to handle input and output. However, other modern operating systems will interact with hardware devices directly by using their own [[device driver]]s to directly access the hardware. Occasionally these add-in BIOSs are still called by these operating systems, in order to carry out specific tasks such as preliminary device initialization. |
|||
{{More citations needed section|date=March 2019}} |
|||
[[File:Qfj32gelötet.jpg|thumb|332px|[[Gigabyte Technology|Gigabyte]] DualBIOS [[Plastic-leaded chip carrier|PLCC]]32]] |
|||
[[File:Bios chip-2011-04-11.jpg|thumb|A detached BIOS chip]] |
|||
[[EEPROM]] and [[flash memory]] chips are advantageous because they can be easily updated by the user; it is customary for hardware manufacturers to issue BIOS updates to upgrade their products, improve compatibility and remove [[software bug|bugs]]. However, this advantage had the risk that an improperly executed or aborted BIOS update could render the computer or device unusable. To avoid these situations, more recent BIOSes use a "boot block"; a portion of the BIOS which runs first and must be updated separately. This code verifies if the rest of the BIOS is intact (using [[hash function|hash]] [[checksum]]s or other methods) before transferring control to it. If the boot block detects any corruption in the main BIOS, it will typically warn the user that a recovery process must be initiated by booting from [[removable media]] (floppy, CD or USB flash drive) so the user can try flashing the BIOS again. Some [[motherboard]]s have a ''backup'' BIOS (sometimes referred to as DualBIOS boards) to recover from BIOS corruptions. |
|||
To find these memory mapped expansion ROMs during the boot process, PC BIOS implementations scan real memory from <code>0xC0000</code> to <code>0xF0000</code> on 2 [[kibi]]byte boundaries looking for the ROM ''signature'' bytes of 55h followed by AAh (<code>0xAA55</code>). For a valid expansion ROM, its signature is immediately followed by a single byte indicating the number of 512-byte blocks it occupies in real memory. The BIOS then jumps to the offset located immediately after this size byte; at which point the expansion ROM code takes over, using the BIOS services to register [[interrupt vector]]s for use by post-boot applications and provide a user configuration interface, or display diagnostic information. |
|||
There are at least five known viruses that attack the BIOS. Two of which were for demonstration purposes. The first one found in the wild was ''Mebromi'', targeting Chinese users. |
|||
There are many methods and utilities for dumping the contents of various motherboard BIOS and expansion ROMs. Under a Microsoft OS, [[DEBUG (DOS Command)|DEBUG]] can be used to examine 64 KiB segments of memory and save the contents to a file. For UNIX systems the [[dd (Unix)| dd]] command can be used by a user with root privileges: "dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8". |
|||
The first BIOS virus was BIOS Meningitis, which instead of erasing BIOS chips it infected them. BIOS Meningitis was relatively harmless, compared to a virus like [[CIH (computer virus)|CIH]]. |
|||
==The BIOS boot specification== |
|||
If the expansion ROM wishes to change the way the system boots (such as from a network device or a SCSI adapter for which the BIOS has no driver code), it can use the ''BIOS Boot Specification'' (BBS) [[Application programming interface|API]] to register its ability to do so. Once the expansion ROMs have registered using the BBS APIs, the user can select among the available boot options from within the BIOSes user interface. This is why most BBS compliant PC BIOS implementations will not allow the user to enter the BIOS's user interface until the expansion ROMs have finished executing and registering themselves with the BBS API. |
|||
The second BIOS virus was [[CIH (computer virus)|CIH]], also known as the "Chernobyl Virus", which was able to erase flash ROM BIOS content on compatible chipsets. CIH appeared in mid-1998 and became active in April 1999. Often, infected computers could no longer boot, and people had to remove the flash ROM IC from the motherboard and reprogram it. CIH targeted the then-widespread Intel i430TX motherboard chipset and took advantage of the fact that the [[Windows 9x]] operating systems, also widespread at the time, allowed direct hardware access to all programs. |
|||
==Evolution of the role of the BIOS== |
|||
Some [[operating system]]s, for example [[MS-DOS]], rely on the BIOS to carry out most input/output tasks within the PC. A variety of technical reasons makes it inefficient for some recent operating systems written for [[32-bit]] CPUs such as [[Linux]] and [[Microsoft Windows]] to invoke the BIOS directly. Larger, more powerful, servers and workstations using [[PowerPC]] or [[SPARC]] CPUs by several manufacturers developed a platform-independent [[Open Firmware]] (IEEE-1275), based on the [[Forth (programming language)|Forth]] programming language. It is included with Sun's SPARC computers, IBM's [[RS/6000]] line, and other PowerPC [[Common Hardware Reference Platform|CHRP]] motherboards. Later x86-based personal computer operating systems, like Windows NT, use their own, native drivers which also makes it much easier to extend support to new hardware, while the BIOS still relies on a legacy 16-bit runtime interface. As such, the BIOS was relegated to [[Bootstrapping (computing)|bootstrapping]], at which point the operating system's own drivers can take control of the hardware. |
|||
Modern systems are not vulnerable to CIH because of a variety of chipsets being used which are incompatible with the Intel i430TX chipset, and also other flash ROM IC types. There is also extra protection from accidental BIOS rewrites in the form of boot blocks which are protected from accidental overwrite or dual and quad BIOS equipped systems which may, in the event of a crash, use a backup BIOS. Also, all modern operating systems such as [[FreeBSD]], [[Linux]], [[macOS]], [[Windows NT]]-based Windows OS like [[Windows 2000]], [[Windows XP]] and newer, do not allow [[Protection ring|user-mode]] programs to have direct hardware access using a [[Hardware Abstraction Layer|hardware abstraction layer]].<ref>{{Cite web |title=Definition of hardware abstraction layer |url=https://www.pcmag.com/encyclopedia/term/hardware-abstraction-layer |access-date=2022-07-11 |website=PCMAG |language=en}}</ref> |
|||
There was a similar transition for the Apple Macintosh, where the system software originally relied heavily on the [[Macintosh Toolbox|ToolBox]]—a set of drivers and other useful routines stored in ROM based on Motorola's 680x0 CPUs. These Apple ROMs were replaced by Open Firmware in the [[PowerPC]] [[Macintosh]], then [[Extensible Firmware Interface|EFI]] in Intel Macintosh computers. |
|||
As a result, as of 2008, CIH has become essentially harmless, at worst causing annoyance by infecting executable files and triggering antivirus software. Other BIOS viruses remain possible, however;<ref name="Yam">[http://www.tomshardware.com/news/bios-virus-rootkit-security-backdoor,7400.html New BIOS Virus Withstands HDD Wipes], 27 March 2009. Marcus Yam. Tom's Hardware US</ref> since most Windows home users without Windows Vista/7's UAC run all applications with administrative privileges, a modern CIH-like virus could in principle still gain access to hardware without first using an exploit.{{Citation needed|date=March 2019}}<!-- no longer relevant to modern operating systems. requires deletion?? --> The operating system [[OpenBSD]] prevents all users from having this access and the grsecurity patch for the Linux kernel also prevents this direct hardware access by default, the difference being an attacker requiring a much more difficult kernel level exploit or reboot of the machine.{{Citation needed|date=March 2019}} |
|||
Later BIOS took on more complex functions, by way of interfaces such as [[Advanced Configuration and Power Interface|ACPI]]; these functions include [[power management]], [[hot swapping]] and thermal management. However BIOS limitations (16-bit processor mode, only 1 MiB addressable space, PC AT hardware dependencies, etc.) were seen as clearly unacceptable for the newer computer platforms. [[Extensible Firmware Interface]] (EFI) is a specification which replaces the runtime interface of the legacy BIOS. Initially written for the Itanium architecture, EFI is now available for [[x86]] and [[x86-64]] platforms; the specification development is driven by [[Unified EFI Forum|The Unified EFI Forum]], an industry [[Special Interest Group]]. |
|||
The third BIOS virus was a technique presented by John Heasman, principal security consultant for UK-based Next-Generation Security Software. In 2006, at the Black Hat Security Conference, he showed how to elevate privileges and read physical memory, using malicious procedures that replaced normal [[Advanced Configuration and Power Interface|ACPI]] functions stored in flash memory.<ref>{{Cite web|url=https://www.blackhat.com/html/bh-media-archives/bh-archives-2006.html|title=Black Hat 2006 Multimedia - Presentation, Audio and Video Archives|website=www.blackhat.com|access-date=2019-04-21}}</ref> |
|||
Linux has supported EFI via the [[elilo]] boot loader. The Open Source community increased their effort to develop a replacement for proprietary BIOSes and their future incarnations with an open sourced counterpart through the [[coreboot]] and [[OpenBIOS]]/[[Open Firmware]] projects. [[Advanced Micro Devices|AMD]] provided product specifications for some chipsets, and [[Google]] is sponsoring the project. [[Motherboard]] manufacturer [[Tyan]] offers [[coreboot]] next to the standard BIOS with their [[Opteron]] line of motherboards. [[Micro-Star International|MSI]] and [[Gigabyte Technology|Gigabyte]] have followed suit with the MSI K9ND MS-9282 and MSI K9SD MS-9185 resp. the M57SLI-S4 modems. |
|||
The fourth BIOS virus was a technique called "Persistent BIOS infection." It appeared in 2009 at the CanSecWest Security Conference in Vancouver, and at the SyScan Security Conference in Singapore. Researchers [[Anibal Sacco]]<ref name="AutoTU-1"/> and Alfredo Ortega, from Core Security Technologies, demonstrated how to insert malicious code into the decompression routines in the BIOS, allowing for nearly full control of the PC at start-up, even before the operating system is booted. The proof-of-concept does not exploit a flaw in the BIOS implementation, but only involves the normal BIOS flashing procedures. Thus, it requires physical access to the machine, or for the user to be root. Despite these requirements, Ortega underlined the profound implications of his and Sacco's discovery: "We can patch a driver to drop a fully working [[rootkit]]. We even have a little code that can remove or disable antivirus."<ref name="Fisher"/> |
|||
Mebromi is a [[Trojan horse (computing)|trojan]] which targets computers with [[AwardBIOS]], [[Microsoft Windows]], and [[antivirus software]] from two Chinese companies: Rising Antivirus and Jiangmin KV Antivirus.<ref name="Giuliani"/><ref name="BMW"/><ref name="Yuan"/> Mebromi installs a rootkit which infects the [[Master boot record]]. |
|||
In a December 2013 interview with ''[[60 Minutes]]'', Deborah Plunkett, Information Assurance Director for the US [[National Security Agency]] claimed the NSA had uncovered and thwarted a possible BIOS attack by a foreign nation state, targeting the US financial system.<ref name="cbs-news-60-minutes"/> The program cited anonymous sources alleging it was a Chinese plot.<ref name="cbs-news-60-minutes"/> However follow-up articles in ''[[The Guardian]],''<ref name="Ackerman"/> ''[[The Atlantic]],''<ref>{{cite web|first1=Conor|last1=Friedersdorf|access-date=2019-03-26|title=A Question for 60 Minutes: Why Would China Want to Destroy the Global Economy?|url=https://www.theatlantic.com/international/archive/2013/12/a-question-for-em-60-minutes-em-why-would-china-want-to-destroy-the-global-economy/282376/|date=16 December 2013|website=The Atlantic}}</ref> ''[[Wired (magazine)|Wired]]''<ref>{{cite news|first1=Kevin|last1=Poulsen|access-date=2019-03-26|title=60 Minutes Puff Piece Claims NSA Saved U.S. From Cyberterrorism|url=https://www.wired.com/2013/12/60-minutes/|newspaper=Wired|date=16 December 2013|issn=1059-1028|via=www.wired.com}}</ref> and ''[[The Register]]''<ref>{{cite web|first=Simon|last=Sharwood|date=16 December 2013|access-date=2019-03-26|title=NSA alleges 'BIOS plot to destroy PCs'|url=https://www.theregister.co.uk/2013/12/16/nsa_alleges_bios_plot_to_destroy_pcs/|website=[[The Register]]}}</ref> refuted the NSA's claims. |
|||
==The BIOS business== |
|||
The vast majority of PC motherboard suppliers license a BIOS "core" and toolkit from a commercial third-party, known as an "independent BIOS vendor" or IBV. The motherboard manufacturer then customizes this BIOS to suit its own hardware. For this reason, updated BIOSes are normally obtained directly from the motherboard manufacturer. |
|||
Newer Intel platforms have [[Intel Boot Guard]] (IBG) technology enabled, this technology will check the BIOS digital signature at startup, and the IBG public key is fused into the [[Platform Controller Hub|PCH]]. End users can't disable this function. |
|||
Major BIOS vendors include [[American Megatrends]] (AMI), General Software, [[Insyde Software]], and [[Phoenix Technologies]] (which bought [[Award Software International]] in 1998). |
|||
tang ina nyo kantutan na lang |
|||
== Alternatives and successors == |
|||
==See also== |
|||
{{Hatnote|For comparable software on other computer systems, see [[booting]].}} |
|||
[[UEFI|Unified Extensible Firmware Interface]] (UEFI) supplements the BIOS in many new machines. Initially written for the [[Intel Itanium architecture]], UEFI is now available for [[x86]] and [[ARM architecture family|Arm]] platforms; the specification development is driven by the [[Unified EFI Forum]], an industry [[special interest group]]. EFI booting has been supported in only [[Microsoft Windows]] versions supporting [[GUID Partition Table|GPT]],<ref name="windows-gpt"/> the [[Linux kernel]] 2.6.1 and later, and [[macOS]] on [[Apple–Intel architecture|Intel-based Macs]].<ref name="intel-uefi"/> {{as of|2014}}, new PC hardware predominantly ships with UEFI firmware. The architecture of the rootkit safeguard can also prevent the system from running the user's own software changes, which makes UEFI controversial as a legacy BIOS replacement in the [[open hardware]] community. Also, [[Windows 11]] requires UEFI to boot,<ref>{{Cite web | url = https://www.microsoft.com/en-us/windows/windows-11-specifications | title = Windows 11 Specs and System Requirements {{pipe}} Microsoft | publisher=[[Microsoft]] | access-date=October 14, 2021}}</ref> with the exception of IoT Enterprise editions of Windows 11.<ref name=11_IoT_req></ref> UEFI is required for devices shipping with Windows 8<ref>{{cite web | url=https://www.networkworld.com/article/738394/microsoft-subnet-next-gen-boot-spec-could-forever-lock-linux-off-windows-8-pcs.html | title=Next-gen boot spec could forever lock Linux off Windows 8 PCS }}</ref><ref>{{cite web | url=https://arstechnica.com/information-technology/2011/09/windows-8-secure-boot-will-complicate-linux-installs/ | title=Windows 8 secure boot could complicate Linux installs | date=21 September 2011 }}</ref> and above. |
|||
* [[Advanced Configuration and Power Interface]] (ACPI) |
|||
* [[ARCS (computing)|ARCS]] |
|||
* [[Booting#BIOS boot devices|BIOS boot devices]] |
|||
* [[BIOS interrupt call]]s |
|||
* [[coreboot]], a project which aim is to create a [[free software|free]] replacement for the BIOS |
|||
* [[Extensible Firmware Interface]] (EFI) |
|||
* [[Firmware]] |
|||
* [[Input/Output Base Address]] |
|||
* [[Nonvolatile BIOS memory]] |
|||
* [[Open Firmware]] |
|||
* [[Real-time operating system]] |
|||
* [[POSIX]] |
|||
* [[Power-on self-test|Power-On Self Test]] (POST) |
|||
Other alternatives to the functionality of the "Legacy BIOS" in the x86 world include [[coreboot]] and [[libreboot]]. |
|||
===References=== |
|||
* {{Cite book |
|||
|title=IBM Personal Computer Technical Reference manual |
|||
|publisher=IBM Corporation |
|||
|edition= First Edition, |date=Revised March 1983}} |
|||
* [http://computer.howstuffworks.com/bios.htm/printable ''How BIOS Works''] - ''[[HowStuffWorks]]'' |
|||
Some servers and workstations use a platform-independent [[Open Firmware]] (IEEE-1275) based on the [[Forth (programming language)|Forth]] programming language; it is included with Sun's [[SPARC]] computers, IBM's [[RS/6000]] line, and other [[PowerPC]] systems such as the [[Common Hardware Reference Platform|CHRP]] motherboards, along with the x86-based [[OLPC XO-1]]. |
|||
As of at least 2015, [[Apple Inc.|Apple]] has removed legacy BIOS support from the UEFI monitor in [[Apple-Intel architecture|Intel-based Macs]]. As such, the BIOS utility no longer supports the legacy option, and prints "Legacy mode not supported on this system". |
|||
In 2017, Intel announced that it would remove legacy BIOS support by 2020. Since 2019, new Intel platform OEM PCs no longer support the legacy option.<ref>{{cite web |url=https://www.zdnet.com/article/intel-were-ending-all-legacy-bios-support-by-2020/ |title=Intel: We're ending all legacy BIOS support by 2020 |first=Liam |last=Tung |date=20 November 2017 |website=[[ZDNET]]}}</ref> |
|||
== See also == |
|||
* [[Double boot]] |
|||
* [[Extended System Configuration Data]] (ESCD) |
|||
* [[Input/Output Control System]] |
|||
* [[ACPI]] (Advanced Configuration and Power Interface) |
|||
* [[Ralf Brown's Interrupt List]] (RBIL){{snd}}interrupts, calls, interfaces, data structures, memory and port addresses, and processor opcodes for the x86 architecture |
|||
* [[System Management BIOS]] (SMBIOS) |
|||
* [[UEFI]] (Unified Extensible Firmware Interface) |
|||
* [[Das U-Boot]], often used on embedded systems |
|||
== Notes == |
|||
{{Notelist}} |
|||
== References == |
|||
{{Reflist|30em|refs= |
|||
<ref name="pcguidedefinition">{{cite web|url=http://www.pcguide.com/ref/mbsys/bios/index.htm|title=Ref — System BIOS|work=PCGuide|access-date=6 December 2014|url-status = dead|archive-url=https://web.archive.org/web/20141221071646/http://www.pcguide.com/ref/mbsys/bios/index.htm|archive-date=21 December 2014}}</ref> |
|||
<ref name="Kildall_1975_BDOS">{{citation | title = CP/M 1.1 or 1.2 BIOS and BDOS for Lawrence Livermore Laboratories | date = June 1975 | first = Gary Arlen | last = Kildall | author-link = Gary Kildall}}</ref> |
|||
<ref name="Kildall_1980_CPM">{{cite web | title = The History of CP/M - The Evolution of an Industry: One Person's Viewpoint | first = Gary Arlen | last = Kildall | author-link = Gary Kildall | date = January 1980 | publisher = [[Dr. Dobb's Journal]] of Computer Calisthenics & Orthodontia | pages = 6–7 | edition = Vol. 5, No. 1, Number 41 | url = http://www.retrotechnology.com/dri/CPM_history_kildall.txt | access-date = 2013-06-03 |url-status = live| archive-url = https://web.archive.org/web/20161124221907/http://www.retrotechnology.com/dri/CPM_history_kildall.txt | archive-date = 2016-11-24}}</ref> |
|||
<ref name="Bradley">{{cite magazine |last=Bradley |first=Tony |url=http://www.pcworld.com/article/248426/r_i_p_bios_a_uefi_primer.html |title=R.I.P. BIOS: A UEFI Primer |magazine=PCWorld |access-date=2014-01-27 |url-status = live|archive-url=https://web.archive.org/web/20140127090326/http://www.pcworld.com/article/248426/r_i_p_bios_a_uefi_primer.html |archive-date=2014-01-27}}</ref> |
|||
<ref name="Swaine_1997_Entrepreneurship">{{cite journal | first = Michael | last = Swaine | author-link = Michael Swaine (technical author) | date = 1997-04-01 | title = Gary Kildall and Collegial Entrepreneurship | journal = [[Dr. Dobb's Journal]] | url = http://www.ddj.com/184410428 | access-date = 2006-11-20 |url-status = live| archive-url = https://web.archive.org/web/20070124184442/http://www.ddj.com/184410428 | archive-date = 2007-01-24}}</ref> |
|||
<ref name="Fischer_2001_Ewing">{{cite web | title = Gary Kildall's CP/M: Some early CP/M history - 1976-1977 | first = A. Joseph "Joe" | last = Killian | author-link = Joe Killian | publisher = [[Thomas Fischer (IMSAI)|Thomas "Todd" Fischer]], [[IMSAI]] | year = 2001 | url = http://www.imsai.net/history/imsai_history/cp-m_history.htm | access-date = 2013-06-03 | url-status = dead | archive-url = https://web.archive.org/web/20121229064433/http://www.imsai.net/history/imsai_history/cp-m_history.htm | archive-date = 29 December 2012}}</ref> |
|||
<ref name="Fraley_2007_Killian">{{cite web | title = Oral History of Joseph Killian, Interviewed by: Bob Fraley, Edited by: Dag Spicer, Recorded: January 26, 2007, Mountain View, California, CHM Reference number: X3879.2007 | first1 = Bob | last1 = Fraley | first2 = Dag | last2 = Spicer | date = 2007-01-26 | publisher = Computer History Museum | url = http://archive.computerhistory.org/resources/access/text/2012/10/102658016-05-01-acc.pdf | access-date = 2013-06-03 |url-status = dead| archive-url = https://web.archive.org/web/20140714175258/http://archive.computerhistory.org/resources/access/text/2012/10/102658016-05-01-acc.pdf | archive-date = 14 July 2014}}</ref> |
|||
<ref name="hsw1">[http://computer.howstuffworks.com/bios1.htm How StuffWorks: What BIOS Does] {{webarchive|url=https://web.archive.org/web/20080207035123/http://computer.howstuffworks.com/bios1.htm |date=2008-02-07}}.</ref> |
|||
<ref name="technical-ref-5-27">page 5-27 ''IBM Personal Computer Hardware Reference Library Technical Reference'', 1984, publication number 6361459</ref> |
|||
<ref name="computing-basics-94">[http://www.smartcomputing.com/editorial/article.asp?article=articles%2F1994%2Fjuly94%2Fpcn0713%2Fpcn0713.asp Smart Computing Article - What Is The BIOS?] {{webarchive|url=https://web.archive.org/web/20120310002756/http://www.smartcomputing.com/editorial/article.asp?article=articles%2F1994%2Fjuly94%2Fpcn0713%2Fpcn0713.asp |date=2012-03-10}} - Computing Basics July 1994 • Vol.5 Issue 7</ref> |
|||
<ref name="CMOS Battery">{{cite web|last=Torres |first=Gabriel |title=Introduction and Lithium Battery |url=http://www.hardwaresecrets.com/article/81 |work=Replacing the Motherboard Battery |publisher=hardwaresecrets.com |access-date=20 June 2013 |date=24 November 2004 |url-status = dead|archive-url=https://web.archive.org/web/20131224085334/http://www.hardwaresecrets.com/article/81 |archive-date=24 December 2013}}</ref> |
|||
<ref name="Mueller-1">{{Cite book |last=Mueller |first=Scott |url=http://www.informit.com/articles/article.aspx?p=130978&seqNum=22 |title=Processor Update Feature {{pipe}} Microprocessor Types and Specifications |publisher=InformIT |date=2001-06-08 |access-date=2014-04-15 |url-status = live|archive-url=https://web.archive.org/web/20140416183228/http://www.informit.com/articles/article.aspx?p=130978&seqNum=22 |archive-date=2014-04-16}}</ref> |
|||
<ref name="microcode-09">{{cite web |url=https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=18148 |title=Linux* Processor Microcode Data File |work=Download Center |publisher=Downloadcenter.intel.com |date=2009-09-23 |access-date=2014-04-15 |url-status = live|archive-url=https://web.archive.org/web/20140416180302/https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=18148 |archive-date=2014-04-16}}</ref> |
|||
<ref name="Mueller-2">Scott Mueller, ''Upgrading and repairing PCs 15th edition'', Que Publishing, 2003 {{ISBN|0-7897-2974-1}}, pages 109-110</ref> |
|||
<ref name="smart-computing-97">"[http://www.smartcomputing.com/editorial/article.asp?article=articles%2F1997%2Fjun97%2F060997%2F060997.asp Decoding RAM & ROM] {{webarchive|url=https://web.archive.org/web/20120406173605/http://www.smartcomputing.com/editorial/article.asp?article=articles%2F1997%2Fjun97%2F060997%2F060997.asp |date=2012-04-06}}." ''[[Smart Computing]]''. June 1997. Volume 8, Issue 6.</ref> |
|||
<ref name="smart-computing-96">"[http://www.smartcomputing.com/editorial/article.asp?article=articles%2F1996%2Fmar96%2F96n0324%2F96n0324.asp Upgrading Your Flash BIOS For Plug And Play] {{webarchive|url=https://web.archive.org/web/20120406173635/http://www.smartcomputing.com/editorial/article.asp?article=articles%2F1996%2Fmar96%2F96n0324%2F96n0324.asp |date=2012-04-06}}." ''[[Smart Computing]]''. March 1996. Volume 7, Issue 3.</ref> |
|||
<ref name="smart-somputing-99">"[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0704/41u6/41u6.asp&guid= Time To Check BIOS] {{webarchive|url=https://web.archive.org/web/20110716092732/http://www.smartcomputing.com/editorial/article.asp?article=articles%2Farchive%2Fg0704%2F41u6%2F41u6.asp&guid= |date=2011-07-16}}." ''[[Smart Computing]]''. April 1999. Volume 7, Issue 4.</ref> |
|||
<ref name="geek-splashtop">{{Cite web|url=http://www.geek.com/splashtops-instant-on-linux-desktop/|archive-url=https://web.archive.org/web/20080907134251/http://www.geek.com/splashtops-instant-on-linux-desktop/|url-status=dead|title=SplashTop's Instant-On Linux Desktop {{pipe}} Geek.com<!-- Bot generated title -->|archive-date=7 September 2008}}</ref> |
|||
<ref name="Life and Times">{{cite web|last=Posted by Alex Watson, possibly repost from original content on custompc.com [unclear]|title=The life and times of the modern motherboard|url=http://www.bit-tech.net/custompc/features/601716/the-life-and-times-of-the-modern-motherboard/page1.html|work=2007-11-27|access-date=2 February 2013|url-status = live|archive-url=https://web.archive.org/web/20120724081024/http://www.bit-tech.net/custompc/features/601716/the-life-and-times-of-the-modern-motherboard/page1.html|archive-date=24 July 2012}}</ref> |
|||
<ref name="Hilber">{{cite web|last=David Hilber Jr.|title=Considerations for Designing an Embedded Intel Architecture System with System Memory Down |url=http://download.intel.com/embedded/processor/whitepaper/322506.pdf|publisher=[[Intel]]|access-date=2 February 2013|date=August 2009|url-status = live|archive-url=https://web.archive.org/web/20121018185412/http://download.intel.com/embedded/processor/whitepaper/322506.pdf|archive-date=18 October 2012}}</ref> |
|||
<ref name="AutoTU-1">{{cite web | last = Sacco | first = Anibal | author2 = Alfredo Ortéga | title = Persistent BIOS Infection | work = [[Exploiting Stuff]] | access-date = 2010-02-06 | url = http://exploiting.wordpress.com/2009/03/23/cansecwest-was-great-here-the-presentation-slides/ |url-status = live| archive-url = https://web.archive.org/web/20090804105605/http://exploiting.wordpress.com/2009/03/23/cansecwest-was-great-here-the-presentation-slides/ | archive-date = 2009-08-04 | date = 23 March 2009}}</ref> |
|||
<ref name="Fisher">{{cite web|last=Fisher |first=Dennis |title=Researchers unveil persistent BIOS attack methods |work=Threat Post |access-date=2010-02-06 |url=http://threatpost.com/en_us/blogs/researchers-unveil-persistent-bios-attack-methods-031909 |archive-url=https://web.archive.org/web/20100130001722/http://threatpost.com/en_us/blogs/researchers-unveil-persistent-bios-attack-methods-031909 |archive-date=30 January 2010 |url-status = dead}}</ref> |
|||
<ref name="Giuliani">{{cite web | last = Giuliani | first = Marco | title = Mebromi: the first BIOS rootkit in the wild | work = [[blog]] | access-date = 2011-09-19 | url = http://blog.webroot.com/2011/09/13/mebromi-the-first-bios-rootkit-in-the-wild/ |url-status = live| archive-url = https://web.archive.org/web/20110923143606/http://blog.webroot.com/2011/09/13/mebromi-the-first-bios-rootkit-in-the-wild/ | archive-date = 2011-09-23 | date = 13 September 2011}}</ref> |
|||
<ref name="BMW">{{cite web|title=360发布"BMW病毒"技术分析报告 |work=[[blog]] |access-date=2011-09-19 |url=http://bbs.360.cn/4005462/251096134.html |url-status = dead|archive-url=https://web.archive.org/web/20110925051031/http://bbs.360.cn/4005462/251096134.html |archive-date=2011-09-25}}</ref> |
|||
<ref name="Yuan">{{cite web | last = Yuan | first = Liang | title = Trojan.Mebromi | work = [[Threat Response]] | access-date = 2011-09-19 | url = http://www.symantec.com/security_response/writeup.jsp?docid=2011-090609-4557-99 |url-status = dead| archive-url = https://web.archive.org/web/20110923145036/http://www.symantec.com/security_response/writeup.jsp?docid=2011-090609-4557-99 | archive-date = 2011-09-23}}</ref> |
|||
<ref name="cbs-news-60-minutes">{{cite web |url=http://www.cbsnews.com/news/how-did-60-minutes-get-cameras-into-a-spy-agency/ |title=How did 60 Minutes get cameras into a spy agency? |work=CBS News |date=15 December 2013 |access-date=2014-04-15 |url-status = live|archive-url=https://web.archive.org/web/20140422042944/http://www.cbsnews.com/news/how-did-60-minutes-get-cameras-into-a-spy-agency/ |archive-date=2014-04-22}}</ref> |
|||
<ref name="Ackerman">{{cite news |author=Spencer Ackerman in Washington |url=https://www.theguardian.com/world/2013/dec/16/nsa-surveillance-60-minutes-cbs-facts |title=NSA goes on 60 Minutes: the definitive facts behind CBS's flawed report |work=theguardian.com |date=2013-12-16 |access-date=2014-01-27 |url-status = live|archive-url=https://web.archive.org/web/20140125020846/http://www.theguardian.com/world/2013/dec/16/nsa-surveillance-60-minutes-cbs-facts |archive-date=2014-01-25}}</ref> |
|||
<ref name="windows-gpt">{{cite web|url=http://www.microsoft.com/whdc/device/storage/gpt_faq.mspx|title=Windows and GPT FAQ|publisher=Microsoft|work=microsoft.com|access-date=6 December 2014|url-status = live|archive-url=https://web.archive.org/web/20110219111649/http://www.microsoft.com/whdc/device/storage/GPT_FAQ.mspx|archive-date=19 February 2011}}</ref> |
|||
<ref name="intel-uefi">{{cite web|url=http://www.intel.com/technology/efi/|title=Extensible Firmware Interface (EFI) and Unified EFI (UEFI)|work=Intel|access-date=6 December 2014|url-status = live|archive-url=https://web.archive.org/web/20100105051711/http://www.intel.com/technology/efi/|archive-date=5 January 2010}}</ref> |
|||
<ref name="prozessor-patches">{{cite journal |language = de |first = Andreas |last = Stiller |title = Prozessor-Patches |publisher = [[Heinz Heise|Heise]] |journal = [[c't]] |year = 2001 |issue = 5 |page = 240 |url = https://shop.heise.de/katalog/prozessor-patches |access-date = 2015-11-21 |url-status = live |archive-url = https://web.archive.org/web/20151122084533/https://shop.heise.de/katalog/prozessor-patches |archive-date = 2015-11-22}}</ref> |
|||
<ref name="Shustek_2016">{{cite web |url=http://www.computerhistory.org/atchm/in-his-own-words-gary-kildall/ |title=In His Own Words: Gary Kildall |author-first=Len |author-last=Shustek |date=2016-08-02 |work=Remarkable People |publisher=[[Computer History Museum]] |url-status = live|archive-url=https://web.archive.org/web/20161217072842/http://www.computerhistory.org/atchm/in-his-own-words-gary-kildall/ |archive-date=2016-12-17}}</ref> |
|||
<ref name="IEEE_2014_BIOS">{{cite web |title=IEEE Milestone in Electrical Engineering and Computing - CP/M - Microcomputer Operating System, 1974 |date=2014-04-25 |publisher=[[Computer History Museum]] |url=http://lazowska.cs.washington.edu/CPM_Program.pdf |access-date=2019-04-03 |url-status = live|archive-url=https://web.archive.org/web/20190403013355/http://lazowska.cs.washington.edu/CPM_Program.pdf |archive-date=2019-04-03}}</ref> |
|||
<ref name="Stiller_1996">{{cite magazine |title=Prozessorgeflüster |series=Trends & News / aktuell - Prozessoren |language=de |author-first1=Andreas |author-last1=Stiller |author-first2=Matthias R. |author-last2=Paul<!-- info contributor on processor internals --> |date=1996-05-12 |volume=1996 |issue=6 |magazine=[[c't – magazin für computertechnik]] |publisher=[[Verlag Heinz Heise GmbH & Co KG]] |issn=0724-8679 |page=20 |url=https://www.heise.de/ct/artikel/Prozessorgefluester-284546.html |access-date=2017-08-28 |url-status=live |archive-url=https://web.archive.org/web/20170828172141/https://www.heise.de/ct/artikel/Prozessorgefluester-284546.html |archive-date=2017-08-28}}</ref> |
|||
}} |
|||
== Further reading == |
|||
===Footnotes=== |
|||
* {{cite book |title=IBM Personal Computer Technical Reference |publisher=[[IBM Corporation]] |edition=Revised |date=March 1983<!-- |id=6172234 NB. This is the IBM number of the German issue of the book "IBM Personalcomputer Technisches Handbuch", also a revised edition from 1983, therefore left commented out for now. -->}} |
|||
<references /> |
|||
* {{cite book |title=IBM Personal Computer AT Technical Reference |publisher=[[IBM Corporation]] |series=IBM Personal Computer Hardware Reference Library |edition=Revised |volume=0, 1, 2 |date=March 1986 |orig-date=1984-03<!-- 1984-03 is the date of the 1st single-volume edition. The later two-volume edition was first published in 1985-09, and revised in 1986-03. --> |id=1502494, 6139362, 6183310, 6183312, 6183355, 6280070, 6280099}} |
|||
* {{cite book |title=System BIOS for IBM PC/XT/AT Computers and Compatibles — The Complete Guide to ROM-Based System Software |author=Phoenix Technologies, Ltd. |url=https://archive.org/details/System_BIOS_for_IBM_PC_XT_AT_Computers_and_Compatibles |author-link=Phoenix Technologies |series=Phoenix Technical Reference Series |publisher=[[Addison Wesley Publishing Company, Inc.]] |edition=1st |orig-date=1987 |date=1989 |isbn=0-201-51806-6}} |
|||
* {{cite book |title=CBIOS for IBM PS/2 Computers and Compatibles — The Complete Guide to ROM-Based System Software for DOS |author=Phoenix Technologies, Ltd. |author-link=Phoenix Technologies |series=Phoenix Technical Reference Series |publisher=[[Addison Wesley Publishing Company, Inc.]] |edition=1st |orig-date=1987 |date=1989 |isbn=0-201-51804-X}} |
|||
* {{cite book |title=ABIOS for IBM PS/2 Computers and Compatibles — The Complete Guide to ROM-Based System Software for OS/2 |author=Phoenix Technologies, Ltd. |author-link=Phoenix Technologies |series=Phoenix Technical Reference Series |publisher=[[Addison Wesley Publishing Company, Inc.]] |edition=1st |orig-date=1987 |date=1989 |isbn=0-201-51805-8}} |
|||
* {{cite book |title=System BIOS for IBM PCs, Compatibles, and EISA Computers — The Complete Guide to ROM-Based System Software |author=Phoenix Technologies, Ltd. |author-link=Phoenix Technologies |series=Phoenix Technical Reference Series |publisher=[[Addison Wesley Publishing Company, Inc.]] |edition=2nd |date=June 1991 |location=Amsterdam |isbn=0-201-57760-7 |url-access=registration |url=https://archive.org/details/isbn_9780201577600}} |
|||
* [http://bioshacking.blogspot.com/2012/02/bios-disassembly-ninjutsu-uncovered-1st.html BIOS Disassembly Ninjutsu Uncovered, 1st edition], a freely available book in PDF format [https://web.archive.org/web/20220402165916/http://www.lejabeach.com/sisubb/BIOS_Disassembly_Ninjutsu_Uncovered.pdf] |
|||
* [http://osxbook.com/book/bonus/chapter4/firmware/ More Power To Firmware], free bonus chapter to the ''Mac OS X Internals: A Systems Approach'' book |
|||
== External links == |
|||
[[Category:BIOS]] |
|||
{{Commons category|Basic Input Output System|the BIOS}} |
|||
[[Category:Boot loaders|Boot loaders]] |
|||
{{Wiktionary|BIOS}} |
|||
* {{cite web|url=http://www.phoenix.com/resources/specs-bbs101.pdf |archive-url=https://web.archive.org/web/20110715081320/http://www.phoenix.com/resources/specs-bbs101.pdf |url-status = dead|archive-date=15 July 2011 |title=BIOS Boot Specification 1.01|date= 11 January 1996|website=Phoenix.com}} |
|||
* {{cite web|website=How Stuff Works|url=http://computer.howstuffworks.com/bios.htm |title=How BIOS Works|date=6 September 2000 }} |
|||
* {{cite web|url=http://download.intel.com/design/flcomp/support/applnots/29216101.pdf |archive-url=https://web.archive.org/web/20071128165740/http://download.intel.com/design/flcomp/support/applnots/29216101.pdf |url-status = dead|archive-date=2007-11-28 |title=Implementing a Plug and Play BIOS Using Intel's Boot Block Flash Memory|website= Intel|date= February 1995|access-date= 28 November 2007}} |
|||
* {{cite web|url=http://www.techarp.com/freebog.aspx |archive-url=https://web.archive.org/web/20140127174941/http://www.techarp.com/freebog.aspx |url-status = dead|archive-date=2014-01-27 |title=List of BIOS options|website=techarp.com}} |
|||
* {{cite news|url=http://www.phrack.com/archives/66/p66_0x07_Persistent%20BIOS%20infection_by_aLS%20and%20Alfredo.txt|archive-url=https://web.archive.org/web/20110430213042/http://www.phrack.com/archives/66/p66_0x07_Persistent%20BIOS%20infection_by_aLS%20and%20Alfredo.txt|url-status = dead|archive-date=30 April 2011|title= Persistent BIOS Infection|work=[[Phrack]]|number=66|date= 1 June 2009|access-date= 30 April 2011}} |
|||
* {{cite web|url=http://download.intel.com/design/flcomp/applnots/29219202.PDF |archive-url=https://web.archive.org/web/20070329124418/http://download.intel.com/design/flcomp/applnots/29219202.PDF |url-status = dead|archive-date=2007-03-29 |title=Preventing BIOS Failures Using Intel Boot Block Flash Memory|website= [[Intel]]|date= December 1998|access-date= 29 March 2007}} |
|||
{{Firmware and booting}} |
|||
{{Authority control}} |
|||
[[ |
[[Category:BIOS| ]] |
||
[[Category:CP/M technology]] |
|||
[[az:BIOS]] |
|||
[[Category:DOS technology]] |
|||
[[bs:Basic Input/Output System]] |
|||
[[Category:Windows technology]] |
|||
[[br:BIOS]] |
|||
[[bg:BIOS]] |
|||
[[ca:BIOS]] |
|||
[[cs:BIOS]] |
|||
[[da:BIOS]] |
|||
[[de:Basic Input Output System]] |
|||
[[es:BIOS]] |
|||
[[eu:BIOS]] |
|||
[[fa:سیستم ابتدایی ورودی خروجی]] |
|||
[[fr:Basic Input Output System]] |
|||
[[gl:BIOS]] |
|||
[[ko:바이오스]] |
|||
[[hr:BIOS]] |
|||
[[id:BIOS]] |
|||
[[it:BIOS]] |
|||
[[he:BIOS]] |
|||
[[ku:BIOS]] |
|||
[[lv:BIOS]] |
|||
[[lb:BIOS]] |
|||
[[lt:BIOS]] |
|||
[[hu:BIOS]] |
|||
[[ml:ബയോസ്]] |
|||
[[ms:BIOS]] |
|||
[[nl:BIOS]] |
|||
[[ja:Basic Input/Output System]] |
|||
[[no:BIOS]] |
|||
[[pl:BIOS]] |
|||
[[pt:BIOS]] |
|||
[[ru:BIOS]] |
|||
[[sq:BIOS]] |
|||
[[simple:BIOS]] |
|||
[[sk:Basic Input Output System]] |
|||
[[sl:BIOS]] |
|||
[[sr:BIOS]] |
|||
[[fi:BIOS]] |
|||
[[sv:BIOS]] |
|||
[[th:ไบออส]] |
|||
[[vi:BIOS]] |
|||
[[tr:BIOS]] |
|||
[[uk:BIOS]] |
|||
[[zh:BIOS]] |
Latest revision as of 07:05, 23 November 2024
Year started | 1981[a] |
---|---|
Organization | Originally IBM as proprietary software, later industry wide as a de facto standard. In 1996, the BIOS Boot Specification was written by Compaq, Phoenix Technologies and Intel. |
Successor | UEFI |
In computing, BIOS (/ˈbaɪɒs, -oʊs/, BY-oss, -ohss; Basic Input/Output System, also known as the System BIOS, ROM BIOS, BIOS ROM or PC BIOS) is firmware used to provide runtime services for operating systems and programs and to perform hardware initialization during the booting process (power-on startup).[1] The firmware comes pre-installed on the computer's motherboard.
The name originates from the Basic Input/Output System used in the CP/M operating system in 1975.[2][3] The BIOS firmware was originally proprietary to the IBM PC; it was reverse engineered by some companies (such as Phoenix Technologies) looking to create compatible systems. The interface of that original system serves as a de facto standard.
The BIOS in older PCs initializes and tests the system hardware components (power-on self-test or POST for short), and loads a boot loader from a mass storage device which then initializes a kernel. In the era of DOS, the BIOS provided BIOS interrupt calls for the keyboard, display, storage, and other input/output (I/O) devices that standardized an interface to application programs and the operating system. More recent operating systems do not use the BIOS interrupt calls after startup.[4]
Most BIOS implementations are specifically designed to work with a particular computer or motherboard model, by interfacing with various devices especially system chipset. Originally, BIOS firmware was stored in a ROM chip on the PC motherboard. In later computer systems, the BIOS contents are stored on flash memory so it can be rewritten without removing the chip from the motherboard. This allows easy, end-user updates to the BIOS firmware so new features can be added or bugs can be fixed, but it also creates a possibility for the computer to become infected with BIOS rootkits. Furthermore, a BIOS upgrade that fails could brick the motherboard.
Unified Extensible Firmware Interface (UEFI) is a successor to the legacy PC BIOS, aiming to address its technical limitations.[5] UEFI firmware may include legacy BIOS compatibility to maintain compatibility with operating systems and option cards that do not support UEFI native operation.[6][7][8] Since 2020, all PCs for Intel platforms no longer support Legacy BIOS.[9] The last version of Microsoft Windows to officially support running on PCs which use legacy BIOS firmware is Windows 10 as Windows 11 requires a UEFI-compliant system (except for IoT Enterprise editions of Windows 11 since version 24H2[10]).
History
[edit]/* C P / M B A S I C I / O S Y S T E M (B I O S) COPYRIGHT (C) GARY A. KILDALL JUNE, 1975 */ […] /* B A S I C D I S K O P E R A T I N G S Y S T E M (B D O S) COPYRIGHT (C) GARY A. KILDALL JUNE, 1975 */— An excerpt from the BDOS.PLM file header in the PL/M source code of CP/M 1.1 or 1.2 for Lawrence Livermore Laboratories (LLL)[2]
The term BIOS (Basic Input/Output System) was created by Gary Kildall[11][12] and first appeared in the CP/M operating system in 1975,[2][3][12][13][14][15] describing the machine-specific part of CP/M loaded during boot time that interfaces directly with the hardware.[3] (A CP/M machine usually has only a simple boot loader in its ROM.)
Versions of MS-DOS, PC DOS or DR-DOS contain a file called variously "IO.SYS", "IBMBIO.COM", "IBMBIO.SYS", or "DRBIOS.SYS"; this file is known as the "DOS BIOS" (also known as the "DOS I/O System") and contains the lower-level hardware-specific part of the operating system. Together with the underlying hardware-specific but operating system-independent "System BIOS", which resides in ROM, it represents the analogue to the "CP/M BIOS".
The BIOS originally proprietary to the IBM PC has been reverse engineered by some companies (such as Phoenix Technologies) looking to create compatible systems.
With the introduction of PS/2 machines, IBM divided the System BIOS into real- and protected-mode portions. The real-mode portion was meant to provide backward compatibility with existing operating systems such as DOS, and therefore was named "CBIOS" (for "Compatibility BIOS"), whereas the "ABIOS" (for "Advanced BIOS") provided new interfaces specifically suited for multitasking operating systems such as OS/2.[16]
User interface
[edit]The BIOS of the original IBM PC and XT had no interactive user interface. Error codes or messages were displayed on the screen, or coded series of sounds were generated to signal errors when the power-on self-test (POST) had not proceeded to the point of successfully initializing a video display adapter. Options on the IBM PC and XT were set by switches and jumpers on the main board and on expansion cards. Starting around the mid-1990s, it became typical for the BIOS ROM to include a "BIOS configuration utility" (BCU[17]) or "BIOS setup utility", accessed at system power-up by a particular key sequence. This program allowed the user to set system configuration options, of the type formerly set using DIP switches, through an interactive menu system controlled through the keyboard. In the interim period, IBM-compatible PCs—including the IBM AT—held configuration settings in battery-backed RAM and used a bootable configuration program on floppy disk, not in the ROM, to set the configuration options contained in this memory. The floppy disk was supplied with the computer, and if it was lost the system settings could not be changed. The same applied in general to computers with an EISA bus, for which the configuration program was called an EISA Configuration Utility (ECU).
A modern Wintel-compatible computer provides a setup routine essentially unchanged in nature from the ROM-resident BIOS setup utilities of the late 1990s; the user can configure hardware options using the keyboard and video display. The modern Wintel machine may store the BIOS configuration settings in flash ROM, perhaps the same flash ROM that holds the BIOS itself.
Extensions (option ROMs)
[edit]Peripheral cards such as hard disk drive host bus adapters and video cards have their own firmware, and BIOS extension option ROM code may be a part of the expansion card firmware; that code provides additional capabilities in the BIOS. Code in option ROMs runs before the BIOS boots the operating system from mass storage. These ROMs typically test and initialize hardware, add new BIOS services, or replace existing BIOS services with their own services. For example, a SCSI controller usually has a BIOS extension ROM that adds support for hard drives connected through that controller. An extension ROM could in principle contain operating system, or it could implement an entirely different boot process such as network booting. Operation of an IBM-compatible computer system can be completely changed by removing or inserting an adapter card (or a ROM chip) that contains a BIOS extension ROM.
The motherboard BIOS typically contains code for initializing and bootstrapping integrated display and integrated storage. The initialization process can involve the execution of code related to the device being initialized, for locating the device, verifying the type of device, then establishing base registers, setting pointers, establishing interrupt vector tables,[18] selecting paging modes which are ways for organizing available registers in devices, setting default values for accessing software routines related to interrupts,[19] and setting the device's configuration using default values.[20] In addition, plug-in adapter cards such as SCSI, RAID, network interface cards, and video cards often include their own BIOS (e.g. Video BIOS), complementing or replacing the system BIOS code for the given component. Even devices built into the motherboard can behave in this way; their option ROMs can be a part of the motherboard BIOS.
An add-in card requires an option ROM if the card is not supported by the motherboard BIOS and the card needs to be initialized or made accessible through BIOS services before the operating system can be loaded (usually this means it is required in the boot process). An additional advantage of ROM on some early PC systems (notably including the IBM PCjr) was that ROM was faster than main system RAM. (On modern systems, the case is very much the reverse of this, and BIOS ROM code is usually copied ("shadowed") into RAM so it will run faster.)
Physical placement
[edit]Option ROMs normally reside on adapter cards. However, the original PC, and perhaps also the PC XT, have a spare ROM socket on the motherboard (the "system board" in IBM's terms) into which an option ROM can be inserted, and the four ROMs that contain the BASIC interpreter can also be removed and replaced with custom ROMs which can be option ROMs. The IBM PCjr is unique among PCs in having two ROM cartridge slots on the front. Cartridges in these slots map into the same region of the upper memory area used for option ROMs, and the cartridges can contain option ROM modules that the BIOS would recognize. The cartridges can also contain other types of ROM modules, such as BASIC programs, that are handled differently. One PCjr cartridge can contain several ROM modules of different types, possibly stored together in one ROM chip.
Operation
[edit]System startup
[edit]The 8086 and 8088 start at physical address FFFF0h.[21] The 80286 starts at physical address FFFFF0h.[22] The 80386 and later x86 processors start at physical address FFFFFFF0h.[23][24][25] When the system is initialized, the first instruction of the BIOS appears at that address.
If the system has just been powered up or the reset button was pressed ("cold boot"), the full power-on self-test (POST) is run. If Ctrl+Alt+Delete was pressed ("warm boot"), a special flag value stored in nonvolatile BIOS memory ("CMOS") tested by the BIOS allows bypass of the lengthy POST and memory detection.
The POST identifies, tests and initializes system devices such as the CPU, chipset, RAM, motherboard, video card, keyboard, mouse, hard disk drive, optical disc drive and other hardware, including integrated peripherals.
Early IBM PCs had a routine in the POST that would download a program into RAM through the keyboard port and run it.[26][27] This feature was intended for factory test or diagnostic purposes.
After the motherboard BIOS completes its POST, most BIOS versions search for option ROM modules, also called BIOS extension ROMs, and execute them. The motherboard BIOS scans for extension ROMs in a portion of the "upper memory area" (the part of the x86 real-mode address space at and above address 0xA0000) and runs each ROM found, in order. To discover memory-mapped option ROMs, a BIOS implementation scans the real-mode address space from 0x0C0000
to 0x0F0000
on 2 KB (2,048 bytes) boundaries, looking for a two-byte ROM signature: 0x55 followed by 0xAA. In a valid expansion ROM, this signature is followed by a single byte indicating the number of 512-byte blocks the expansion ROM occupies in real memory, and the next byte is the option ROM's entry point (also known as its "entry offset"). If the ROM has a valid checksum, the BIOS transfers control to the entry address, which in a normal BIOS extension ROM should be the beginning of the extension's initialization routine.
At this point, the extension ROM code takes over, typically testing and initializing the hardware it controls and registering interrupt vectors for use by post-boot applications. It may use BIOS services (including those provided by previously initialized option ROMs) to provide a user configuration interface, to display diagnostic information, or to do anything else that it requires.
An option ROM should normally return to the BIOS after completing its initialization process. Once (and if) an option ROM returns, the BIOS continues searching for more option ROMs, calling each as it is found, until the entire option ROM area in the memory space has been scanned. It is possible that an option ROM will not return to BIOS, pre-empting the BIOS's boot sequence altogether.
Boot process
[edit]After the POST completes and, in a BIOS that supports option ROMs, after the option ROM scan is completed and all detected ROM modules with valid checksums have been called, the BIOS calls interrupt 19h to start boot processing. Post-boot, programs loaded can also call interrupt 19h to reboot the system, but they must be careful to disable interrupts and other asynchronous hardware processes that may interfere with the BIOS rebooting process, or else the system may hang or crash while it is rebooting.
When interrupt 19h is called, the BIOS attempts to locate boot loader software on a "boot device", such as a hard disk, a floppy disk, CD, or DVD. It loads and executes the first boot software it finds, giving it control of the PC.[28]
The BIOS uses the boot devices set in Nonvolatile BIOS memory (CMOS), or, in the earliest PCs, DIP switches. The BIOS checks each device in order to see if it is bootable by attempting to load the first sector (boot sector). If the sector cannot be read, the BIOS proceeds to the next device. If the sector is read successfully, some BIOSes will also check for the boot sector signature 0x55 0xAA in the last two bytes of the sector (which is 512 bytes long), before accepting a boot sector and considering the device bootable.[b]
When a bootable device is found, the BIOS transfers control to the loaded sector. The BIOS does not interpret the contents of the boot sector other than to possibly check for the boot sector signature in the last two bytes. Interpretation of data structures like partition tables and BIOS Parameter Blocks is done by the boot program in the boot sector itself or by other programs loaded through the boot process.
A non-disk device such as a network adapter attempts booting by a procedure that is defined by its option ROM or the equivalent integrated into the motherboard BIOS ROM. As such, option ROMs may also influence or supplant the boot process defined by the motherboard BIOS ROM.
With the El Torito optical media boot standard, the optical drive actually emulates a 3.5" high-density floppy disk to the BIOS for boot purposes. Reading the "first sector" of a CD-ROM or DVD-ROM is not a simply defined operation like it is on a floppy disk or a hard disk. Furthermore, the complexity of the medium makes it difficult to write a useful boot program in one sector. The bootable virtual floppy disk can contain software that provides access to the optical medium in its native format.
If an expansion ROM wishes to change the way the system boots (such as from a network device or a SCSI adapter) in a cooperative way, it can use the BIOS Boot Specification (BBS) API to register its ability to do so. Once the expansion ROMs have registered using the BBS APIs, the user can select among the available boot options from within the BIOS's user interface. This is why most BBS compliant PC BIOS implementations will not allow the user to enter the BIOS's user interface until the expansion ROMs have finished executing and registering themselves with the BBS API.[citation needed]
Also, if an expansion ROM wishes to change the way the system boots unilaterally, it can simply hook interrupt 19h or other interrupts normally called from interrupt 19h, such as interrupt 13h, the BIOS disk service, to intercept the BIOS boot process. Then it can replace the BIOS boot process with one of its own, or it can merely modify the boot sequence by inserting its own boot actions into it, by preventing the BIOS from detecting certain devices as bootable, or both. Before the BIOS Boot Specification was promulgated, this was the only way for expansion ROMs to implement boot capability for devices not supported for booting by the native BIOS of the motherboard.[citation needed]
Boot priority
[edit]The user can select the boot priority implemented by the BIOS. For example, most computers have a hard disk that is bootable, but sometimes there is a removable-media drive that has higher boot priority, so the user can cause a removable disk to be booted.
In most modern BIOSes, the boot priority order can be configured by the user. In older BIOSes, limited boot priority options are selectable; in the earliest BIOSes, a fixed priority scheme was implemented, with floppy disk drives first, fixed disks (i.e., hard disks) second, and typically no other boot devices supported, subject to modification of these rules by installed option ROMs. The BIOS in an early PC also usually would only boot from the first floppy disk drive or the first hard disk drive, even if there were two drives installed.
Boot failure
[edit]On the original IBM PC and XT, if no bootable disk was found, the BIOS would try to start ROM BASIC with the interrupt call to interrupt 18h. Since few programs used BASIC in ROM, clone PC makers left it out; then a computer that failed to boot from a disk would display "No ROM BASIC" and halt (in response to interrupt 18h).
Later computers would display a message like "No bootable disk found"; some would prompt for a disk to be inserted and a key to be pressed to retry the boot process. A modern BIOS may display nothing or may automatically enter the BIOS configuration utility when the boot process fails.
Boot environment
[edit]The environment for the boot program is very simple: the CPU is in real mode and the general-purpose and segment registers are undefined, except SS, SP, CS, and DL. CS:IP always points to physical address 0x07C00
. What values CS and IP actually have is not well defined. Some BIOSes use a CS:IP of 0x0000:0x7C00
while others may use 0x07C0:0x0000
.[29] Because boot programs are always loaded at this fixed address, there is no need for a boot program to be relocatable. DL may contain the drive number, as used with interrupt 13h, of the boot device. SS:SP points to a valid stack that is presumably large enough to support hardware interrupts, but otherwise SS and SP are undefined. (A stack must be already set up in order for interrupts to be serviced, and interrupts must be enabled in order for the system timer-tick interrupt, which BIOS always uses at least to maintain the time-of-day count and which it initializes during POST, to be active and for the keyboard to work. The keyboard works even if the BIOS keyboard service is not called; keystrokes are received and placed in the 15-character type-ahead buffer maintained by BIOS.) The boot program must set up its own stack, because the size of the stack set up by BIOS is unknown and its location is likewise variable; although the boot program can investigate the default stack by examining SS:SP, it is easier and shorter to just unconditionally set up a new stack.[30]
At boot time, all BIOS services are available, and the memory below address 0x00400
contains the interrupt vector table. BIOS POST has initialized the system timers, interrupt controller(s), DMA controller(s), and other motherboard/chipset hardware as necessary to bring all BIOS services to ready status. DRAM refresh for all system DRAM in conventional memory and extended memory, but not necessarily expanded memory, has been set up and is running. The interrupt vectors corresponding to the BIOS interrupts have been set to point at the appropriate entry points in the BIOS, hardware interrupt vectors for devices initialized by the BIOS have been set to point to the BIOS-provided ISRs, and some other interrupts, including ones that BIOS generates for programs to hook, have been set to a default dummy ISR that immediately returns. The BIOS maintains a reserved block of system RAM at addresses 0x00400–0x004FF
with various parameters initialized during the POST. All memory at and above address 0x00500
can be used by the boot program; it may even overwrite itself.[31][32]
Operating system services
[edit]The BIOS ROM is customized to the particular manufacturer's hardware, allowing low-level services (such as reading a keystroke or writing a sector of data to diskette) to be provided in a standardized way to programs, including operating systems. For example, an IBM PC might have either a monochrome or a color display adapter (using different display memory addresses and hardware), but a single, standard, BIOS system call may be invoked to display a character at a specified position on the screen in text mode or graphics mode.
The BIOS provides a small library of basic input/output functions to operate peripherals (such as the keyboard, rudimentary text and graphics display functions and so forth). When using MS-DOS, BIOS services could be accessed by an application program (or by MS-DOS) by executing an interrupt 13h interrupt instruction to access disk functions, or by executing one of a number of other documented BIOS interrupt calls to access video display, keyboard, cassette, and other device functions.
Operating systems and executive software that are designed to supersede this basic firmware functionality provide replacement software interfaces to application software. Applications can also provide these services to themselves. This began even in the 1980s under MS-DOS, when programmers observed that using the BIOS video services for graphics display were very slow. To increase the speed of screen output, many programs bypassed the BIOS and programmed the video display hardware directly. Other graphics programmers, particularly but not exclusively in the demoscene, observed that there were technical capabilities of the PC display adapters that were not supported by the IBM BIOS and could not be taken advantage of without circumventing it. Since the AT-compatible BIOS ran in Intel real mode, operating systems that ran in protected mode on 286 and later processors required hardware device drivers compatible with protected mode operation to replace BIOS services.
In modern PCs running modern operating systems (such as Windows and Linux) the BIOS interrupt calls are used only during booting and initial loading of operating systems. Before the operating system's first graphical screen is displayed, input and output are typically handled through BIOS. A boot menu such as the textual menu of Windows, which allows users to choose an operating system to boot, to boot into the safe mode, or to use the last known good configuration, is displayed through BIOS and receives keyboard input through BIOS.[4]
Many modern PCs can still boot and run legacy operating systems such as MS-DOS or DR-DOS that rely heavily on BIOS for their console and disk I/O, providing that the system has a BIOS, or a CSM-capable UEFI firmware.
Processor microcode updates
[edit]Intel processors have reprogrammable microcode since the P6 microarchitecture.[33][34][35] AMD processors have reprogrammable microcode since the K7 microarchitecture. The BIOS contain patches to the processor microcode that fix errors in the initial processor microcode; microcode is loaded into processor's SRAM so reprogramming is not persistent, thus loading of microcode updates is performed each time the system is powered up. Without reprogrammable microcode, an expensive processor swap would be required;[36] for example, the Pentium FDIV bug became an expensive fiasco for Intel as it required a product recall because the original Pentium processor's defective microcode could not be reprogrammed. Operating systems can update main processor microcode also.[37][38]
Identification
[edit]Some BIOSes contain a software licensing description table (SLIC), a digital signature placed inside the BIOS by the original equipment manufacturer (OEM), for example Dell. The SLIC is inserted into the ACPI data table and contains no active code.[39][40]
Computer manufacturers that distribute OEM versions of Microsoft Windows and Microsoft application software can use the SLIC to authenticate licensing to the OEM Windows Installation disk and system recovery disc containing Windows software. Systems with a SLIC can be preactivated with an OEM product key, and they verify an XML formatted OEM certificate against the SLIC in the BIOS as a means of self-activating (see System Locked Preinstallation, SLP). If a user performs a fresh install of Windows, they will need to have possession of both the OEM key (either SLP or COA) and the digital certificate for their SLIC in order to bypass activation.[39] This can be achieved if the user performs a restore using a pre-customised image provided by the OEM. Power users can copy the necessary certificate files from the OEM image, decode the SLP product key, then perform SLP activation manually.
Overclocking
[edit]Some BIOS implementations allow overclocking, an action in which the CPU is adjusted to a higher clock rate than its manufacturer rating for guaranteed capability. Overclocking may, however, seriously compromise system reliability in insufficiently cooled computers and generally shorten component lifespan. Overclocking, when incorrectly performed, may also cause components to overheat so quickly that they mechanically destroy themselves.[41]
Modern use
[edit]Some older operating systems, for example MS-DOS, rely on the BIOS to carry out most input/output tasks within the PC.[42]
Calling real mode BIOS services directly is inefficient for protected mode (and long mode) operating systems. BIOS interrupt calls are not used by modern multitasking operating systems after they initially load.
In the 1990s, BIOS provided some protected mode interfaces for Microsoft Windows and Unix-like operating systems, such as Advanced Power Management (APM), Plug and Play BIOS, Desktop Management Interface (DMI), VESA BIOS Extensions (VBE), e820 and MultiProcessor Specification (MPS). Starting from the year 2000, most BIOSes provide ACPI, SMBIOS, VBE and e820 interfaces for modern operating systems.[43][44][45][46][47]
After operating systems load, the System Management Mode code is still running in SMRAM. Since 2010, BIOS technology is in a transitional process toward UEFI.[5]
Configuration
[edit]Setup utility
[edit]Historically, the BIOS in the IBM PC and XT had no built-in user interface. The BIOS versions in earlier PCs (XT-class) were not software configurable; instead, users set the options via DIP switches on the motherboard. Later computers, including all IBM-compatibles with 80286 CPUs, had a battery-backed nonvolatile BIOS memory (CMOS RAM chip) that held BIOS settings.[48] These settings, such as video-adapter type, memory size, and hard-disk parameters, could only be configured by running a configuration program from a disk, not built into the ROM. A special "reference diskette" was inserted in an IBM AT to configure settings such as memory size.[49]
Early BIOS versions did not have passwords or boot-device selection options. The BIOS was hard-coded to boot from the first floppy drive, or, if that failed, the first hard disk. Access control in early AT-class machines was by a physical keylock switch (which was not hard to defeat if the computer case could be opened). Anyone who could switch on the computer could boot it.[citation needed]
Later, 386-class computers started integrating the BIOS setup utility in the ROM itself, alongside the BIOS code; these computers usually boot into the BIOS setup utility if a certain key or key combination is pressed, otherwise the BIOS POST and boot process are executed.
A modern BIOS setup utility has a text user interface (TUI) or graphical user interface (GUI) accessed by pressing a certain key on the keyboard when the PC starts. Usually, the key is advertised for short time during the early startup, for example "Press DEL to enter Setup".
The actual key depends on specific hardware. The settings key is most often Delete (Acer, ASRock, Asus PC, ECS, Gigabyte, MSI, Zotac) and F2 (Asus motherboard, Dell, Lenovo laptop, Origin PC, Samsung, Toshiba), but it can also be F1 (Lenovo desktop) and F10 (HP).[50]
Features present in the BIOS setup utility typically include:
- Configuring, enabling and disabling the hardware components
- Setting the system time
- Setting the boot order
- Setting various passwords, such as a password for securing access to the BIOS user interface and preventing malicious users from booting the system from unauthorized portable storage devices, or a password for booting the system
Hardware monitoring
[edit]A modern BIOS setup screen often features a PC Health Status or a Hardware Monitoring tab, which directly interfaces with a Hardware Monitor chip of the mainboard.[51] This makes it possible to monitor CPU and chassis temperature, the voltage provided by the power supply unit, as well as monitor and control the speed of the fans connected to the motherboard.
Once the system is booted, hardware monitoring and computer fan control is normally done directly by the Hardware Monitor chip itself, which can be a separate chip, interfaced through I²C or SMBus, or come as a part of a Super I/O solution, interfaced through Industry Standard Architecture (ISA) or Low Pin Count (LPC).[52] Some operating systems, like NetBSD with envsys and OpenBSD with sysctl hw.sensors, feature integrated interfacing with hardware monitors.
However, in some circumstances, the BIOS also provides the underlying information about hardware monitoring through ACPI, in which case, the operating system may be using ACPI to perform hardware monitoring.[53][54]
Reprogramming
[edit]In modern PCs the BIOS is stored in rewritable EEPROM[55] or NOR flash memory,[56] allowing the contents to be replaced and modified. This rewriting of the contents is sometimes termed flashing. It can be done by a special program, usually provided by the system's manufacturer, or at POST, with a BIOS image in a hard drive or USB flash drive. A file containing such contents is sometimes termed "a BIOS image". A BIOS might be reflashed in order to upgrade to a newer version to fix bugs or provide improved performance or to support newer hardware. Some computers also support updating the BIOS via an update floppy disk or a special partition on the hard drive.[57]
Hardware
[edit]The original IBM PC BIOS (and cassette BASIC) was stored on mask-programmed read-only memory (ROM) chips in sockets on the motherboard. ROMs could be replaced,[58] but not altered, by users. To allow for updates, many compatible computers used re-programmable BIOS memory devices such as EPROM, EEPROM and later flash memory (usually NOR flash) devices. According to Robert Braver, the president of the BIOS manufacturer Micro Firmware, Flash BIOS chips became common around 1995 because the electrically erasable PROM (EEPROM) chips are cheaper and easier to program than standard ultraviolet erasable PROM (EPROM) chips. Flash chips are programmed (and re-programmed) in-circuit, while EPROM chips need to be removed from the motherboard for re-programming.[59] BIOS versions are upgraded to take advantage of newer versions of hardware and to correct bugs in previous revisions of BIOSes.[60]
Beginning with the IBM AT, PCs supported a hardware clock settable through BIOS. It had a century bit which allowed for manually changing the century when the year 2000 happened. Most BIOS revisions created in 1995 and nearly all BIOS revisions in 1997 supported the year 2000 by setting the century bit automatically when the clock rolled past midnight, 31 December 1999.[61]
The first flash chips were attached to the ISA bus. Starting in 1998, the BIOS flash moved to the LPC bus, following a new standard implementation known as "firmware hub" (FWH). In 2005, the BIOS flash memory moved to the SPI bus.[62]
The size of the BIOS, and the capacity of the ROM, EEPROM, or other media it may be stored on, has increased over time as new features have been added to the code; BIOS versions now exist with sizes up to 32 megabytes. For contrast, the original IBM PC BIOS was contained in an 8 KB mask ROM. Some modern motherboards are including even bigger NAND flash memory ICs on board which are capable of storing whole compact operating systems, such as some Linux distributions. For example, some ASUS notebooks included Splashtop OS embedded into their NAND flash memory ICs.[63] However, the idea of including an operating system along with BIOS in the ROM of a PC is not new; in the 1980s, Microsoft offered a ROM option for MS-DOS, and it was included in the ROMs of some PC clones such as the Tandy 1000 HX.
Another type of firmware chip was found on the IBM PC AT and early compatibles. In the AT, the keyboard interface was controlled by a microcontroller with its own programmable memory. On the IBM AT, that was a 40-pin socketed device, while some manufacturers used an EPROM version of this chip which resembled an EPROM. This controller was also assigned the A20 gate function to manage memory above the one-megabyte range; occasionally an upgrade of this "keyboard BIOS" was necessary to take advantage of software that could use upper memory.[citation needed]
The BIOS may contain components such as the Memory Reference Code (MRC), which is responsible for the memory initialization (e.g. SPD and memory timings initialization).[64]: 8 [65]
Modern BIOS[66] includes Intel Management Engine or AMD Platform Security Processor firmware.
Vendors and products
[edit]Company | AwardBIOS | AMIBIOS | Insyde | SeaBIOS |
---|---|---|---|---|
License | Proprietary | Proprietary | Proprietary | LGPL v3 |
Maintained / developed | Terminated | Terminated | Terminated | Yes |
32-bit PCI BIOS calls | Yes | Yes | Yes | Yes |
AHCI | Yes | Yes | Yes | Yes |
APM | Yes | Yes | Yes (1.2) | Yes (1.2) |
BBS | Yes | Yes | Yes | Yes |
Boot menu | Yes | Yes | Yes | Yes |
Compression | Yes (LHA[67]) | Yes (LHA) | Yes (RLE) | Yes (LZMA) |
CMOS | Yes | Yes | Yes | Yes |
EDD | Yes | Yes | Yes | Yes |
ESCD | Yes | Yes | ? | No |
Flash from ROM | ? | Yes | ? | No |
Language | Assembly | Assembly | Assembly | C |
LBA | Yes (48) | Yes (48) | Yes | Yes (48) |
MultiProcessor Specification | Yes | Yes | Yes | Yes |
Option ROM | Yes | Yes | Yes | Yes |
Password | Yes | Yes | Yes | No |
PMM | ? | Yes | ? | Yes |
Setup screen | Yes | Yes | Yes | No |
SMBIOS | Yes | Yes | Yes | Yes |
Splash screen | Yes (EPA)[68] | Yes (PCX) | Yes | Yes (BMP, JPG) |
TPM | Unknown | Unknown | Unknown | Some |
USB booting | Yes | Yes | Yes | Yes |
USB hub | ? | ? | ? | Yes |
USB keyboard | Yes | Yes | Yes | Yes |
USB mouse | Yes | Yes | Yes | Yes |
IBM published the entire listings of the BIOS for its original PC, PC XT, PC AT, and other contemporary PC models, in an appendix of the IBM PC Technical Reference Manual for each machine type. The effect of the publication of the BIOS listings is that anyone can see exactly what a definitive BIOS does and how it does it.
In May 1984, Phoenix Software Associates released its first ROM-BIOS. This BIOS enabled OEMs to build essentially fully compatible clones without having to reverse-engineer the IBM PC BIOS themselves, as Compaq had done for the Portable; it also helped fuel the growth in the PC-compatibles industry and sales of non-IBM versions of DOS.[69] The first American Megatrends (AMI) BIOS was released in 1986.
New standards grafted onto the BIOS are usually without complete public documentation or any BIOS listings. As a result, it is not as easy to learn the intimate details about the many non-IBM additions to BIOS as about the core BIOS services.
Many PC motherboard suppliers licensed the BIOS "core" and toolkit from a commercial third party, known as an "independent BIOS vendor" or IBV. The motherboard manufacturer then customized this BIOS to suit its own hardware. For this reason, updated BIOSes are normally obtained directly from the motherboard manufacturer. Major IBVs included American Megatrends (AMI), Insyde Software, Phoenix Technologies, and Byosoft. Microid Research and Award Software were acquired by Phoenix Technologies in 1998; Phoenix later phased out the Award brand name (although Award Software is still credited in newer AwardBIOS versions and in UEFI firmwares).[when?] General Software, which was also acquired by Phoenix in 2007, sold BIOS for embedded systems based on Intel processors.
SeaBIOS is an open-source BIOS implementation.
Open-source BIOS replacements
[edit]The open-source community increased their effort to develop a replacement for proprietary BIOSes and their future incarnations with an open-sourced counterparts. Open Firmware was an early attempt to make an open specification for boot firmware. It was initially endorsed by IEEE in its IEEE 1275-1994 standard but was withdrawn in 2005.[70][71] Later examples include the OpenBIOS, coreboot and libreboot projects. AMD provided product specifications for some chipsets using coreboot, and Google is sponsoring the project. Motherboard manufacturer Tyan offers coreboot next to the standard BIOS with their Opteron line of motherboards.
Security
[edit]This section needs additional citations for verification. (March 2019) |
EEPROM and flash memory chips are advantageous because they can be easily updated by the user; it is customary for hardware manufacturers to issue BIOS updates to upgrade their products, improve compatibility and remove bugs. However, this advantage had the risk that an improperly executed or aborted BIOS update could render the computer or device unusable. To avoid these situations, more recent BIOSes use a "boot block"; a portion of the BIOS which runs first and must be updated separately. This code verifies if the rest of the BIOS is intact (using hash checksums or other methods) before transferring control to it. If the boot block detects any corruption in the main BIOS, it will typically warn the user that a recovery process must be initiated by booting from removable media (floppy, CD or USB flash drive) so the user can try flashing the BIOS again. Some motherboards have a backup BIOS (sometimes referred to as DualBIOS boards) to recover from BIOS corruptions.
There are at least five known viruses that attack the BIOS. Two of which were for demonstration purposes. The first one found in the wild was Mebromi, targeting Chinese users.
The first BIOS virus was BIOS Meningitis, which instead of erasing BIOS chips it infected them. BIOS Meningitis was relatively harmless, compared to a virus like CIH.
The second BIOS virus was CIH, also known as the "Chernobyl Virus", which was able to erase flash ROM BIOS content on compatible chipsets. CIH appeared in mid-1998 and became active in April 1999. Often, infected computers could no longer boot, and people had to remove the flash ROM IC from the motherboard and reprogram it. CIH targeted the then-widespread Intel i430TX motherboard chipset and took advantage of the fact that the Windows 9x operating systems, also widespread at the time, allowed direct hardware access to all programs.
Modern systems are not vulnerable to CIH because of a variety of chipsets being used which are incompatible with the Intel i430TX chipset, and also other flash ROM IC types. There is also extra protection from accidental BIOS rewrites in the form of boot blocks which are protected from accidental overwrite or dual and quad BIOS equipped systems which may, in the event of a crash, use a backup BIOS. Also, all modern operating systems such as FreeBSD, Linux, macOS, Windows NT-based Windows OS like Windows 2000, Windows XP and newer, do not allow user-mode programs to have direct hardware access using a hardware abstraction layer.[72]
As a result, as of 2008, CIH has become essentially harmless, at worst causing annoyance by infecting executable files and triggering antivirus software. Other BIOS viruses remain possible, however;[73] since most Windows home users without Windows Vista/7's UAC run all applications with administrative privileges, a modern CIH-like virus could in principle still gain access to hardware without first using an exploit.[citation needed] The operating system OpenBSD prevents all users from having this access and the grsecurity patch for the Linux kernel also prevents this direct hardware access by default, the difference being an attacker requiring a much more difficult kernel level exploit or reboot of the machine.[citation needed]
The third BIOS virus was a technique presented by John Heasman, principal security consultant for UK-based Next-Generation Security Software. In 2006, at the Black Hat Security Conference, he showed how to elevate privileges and read physical memory, using malicious procedures that replaced normal ACPI functions stored in flash memory.[74]
The fourth BIOS virus was a technique called "Persistent BIOS infection." It appeared in 2009 at the CanSecWest Security Conference in Vancouver, and at the SyScan Security Conference in Singapore. Researchers Anibal Sacco[75] and Alfredo Ortega, from Core Security Technologies, demonstrated how to insert malicious code into the decompression routines in the BIOS, allowing for nearly full control of the PC at start-up, even before the operating system is booted. The proof-of-concept does not exploit a flaw in the BIOS implementation, but only involves the normal BIOS flashing procedures. Thus, it requires physical access to the machine, or for the user to be root. Despite these requirements, Ortega underlined the profound implications of his and Sacco's discovery: "We can patch a driver to drop a fully working rootkit. We even have a little code that can remove or disable antivirus."[76]
Mebromi is a trojan which targets computers with AwardBIOS, Microsoft Windows, and antivirus software from two Chinese companies: Rising Antivirus and Jiangmin KV Antivirus.[77][78][79] Mebromi installs a rootkit which infects the Master boot record.
In a December 2013 interview with 60 Minutes, Deborah Plunkett, Information Assurance Director for the US National Security Agency claimed the NSA had uncovered and thwarted a possible BIOS attack by a foreign nation state, targeting the US financial system.[80] The program cited anonymous sources alleging it was a Chinese plot.[80] However follow-up articles in The Guardian,[81] The Atlantic,[82] Wired[83] and The Register[84] refuted the NSA's claims.
Newer Intel platforms have Intel Boot Guard (IBG) technology enabled, this technology will check the BIOS digital signature at startup, and the IBG public key is fused into the PCH. End users can't disable this function.
Alternatives and successors
[edit]Unified Extensible Firmware Interface (UEFI) supplements the BIOS in many new machines. Initially written for the Intel Itanium architecture, UEFI is now available for x86 and Arm platforms; the specification development is driven by the Unified EFI Forum, an industry special interest group. EFI booting has been supported in only Microsoft Windows versions supporting GPT,[85] the Linux kernel 2.6.1 and later, and macOS on Intel-based Macs.[86] As of 2014[update], new PC hardware predominantly ships with UEFI firmware. The architecture of the rootkit safeguard can also prevent the system from running the user's own software changes, which makes UEFI controversial as a legacy BIOS replacement in the open hardware community. Also, Windows 11 requires UEFI to boot,[87] with the exception of IoT Enterprise editions of Windows 11.[10] UEFI is required for devices shipping with Windows 8[88][89] and above.
Other alternatives to the functionality of the "Legacy BIOS" in the x86 world include coreboot and libreboot.
Some servers and workstations use a platform-independent Open Firmware (IEEE-1275) based on the Forth programming language; it is included with Sun's SPARC computers, IBM's RS/6000 line, and other PowerPC systems such as the CHRP motherboards, along with the x86-based OLPC XO-1.
As of at least 2015, Apple has removed legacy BIOS support from the UEFI monitor in Intel-based Macs. As such, the BIOS utility no longer supports the legacy option, and prints "Legacy mode not supported on this system".
In 2017, Intel announced that it would remove legacy BIOS support by 2020. Since 2019, new Intel platform OEM PCs no longer support the legacy option.[90]
See also
[edit]- Double boot
- Extended System Configuration Data (ESCD)
- Input/Output Control System
- ACPI (Advanced Configuration and Power Interface)
- Ralf Brown's Interrupt List (RBIL) – interrupts, calls, interfaces, data structures, memory and port addresses, and processor opcodes for the x86 architecture
- System Management BIOS (SMBIOS)
- UEFI (Unified Extensible Firmware Interface)
- Das U-Boot, often used on embedded systems
Notes
[edit]- ^ Although the term BIOS predates 1981, the standard for IBM PC–compatible computers started with the release of the original IBM Personal Computer.
- ^ The signature at offset
+0x1FE
in boot sectors is0x55 0xAA
, that is0x55
at offset+0x1FE
and0xAA
at offset+0x1FF
. Since little-endian representation must be assumed in the context of IBM PC–compatible compatible, this can be written as 16-bit word0xAA55
in programs for x86 processors (note the swapped order), whereas it would have to be written as0x55AA
in programs for other CPU architectures using a big-endian representation. Since this has been mixed up numerous times in books and even in original Microsoft reference documents, this article uses the offset-based byte-wise on-disk representation to avoid any possible misinterpretation.
References
[edit]- ^ "Ref — System BIOS". PCGuide. Archived from the original on 2014-12-21. Retrieved 2014-12-06.
- ^ a b c Kildall, Gary Arlen (June 1975), CP/M 1.1 or 1.2 BIOS and BDOS for Lawrence Livermore Laboratories
- ^ a b c Kildall, Gary Arlen (January 1980). "The History of CP/M - The Evolution of an Industry: One Person's Viewpoint" (Vol. 5, No. 1, Number 41 ed.). Dr. Dobb's Journal of Computer Calisthenics & Orthodontia. pp. 6–7. Archived from the original on 2016-11-24. Retrieved 2013-06-03.
- ^ a b "Booting · Linux Inside". 0xax.gitbooks.io. Retrieved 2020-11-10.
- ^ a b Bradley, Tony. "R.I.P. BIOS: A UEFI Primer". PCWorld. Archived from the original on 2014-01-27. Retrieved 2014-01-27.
- ^ "Unified Extensible Firmware Interface". Intel.
- ^ "UEFI". OSDev.org.
- ^ "Intel® Platform Innovation Framework for EFI Compatibility Support Module Specification (revision 0.97)" (PDF). Intel. 2007-09-04. Retrieved 2013-10-06.
- ^ "Removal of Legacy Boot Support for Intel Platforms Technical Advisory". Retrieved 2024-07-25.
- ^ a b "Minimum System Requirements for Windows IoT Enterprise". Microsoft Learn. 2024-05-22. Retrieved 2024-06-07.
- ^ Swaine, Michael (1997-04-01). "Gary Kildall and Collegial Entrepreneurship". Dr. Dobb's Journal. Archived from the original on 2007-01-24. Retrieved 2006-11-20.
- ^ a b "IEEE Milestone in Electrical Engineering and Computing - CP/M - Microcomputer Operating System, 1974" (PDF). Computer History Museum. 2014-04-25. Archived (PDF) from the original on 2019-04-03. Retrieved 2019-04-03.
- ^ Shustek, Len (2016-08-02). "In His Own Words: Gary Kildall". Remarkable People. Computer History Museum. Archived from the original on 2016-12-17.
- ^ Killian, A. Joseph "Joe" (2001). "Gary Kildall's CP/M: Some early CP/M history - 1976-1977". Thomas "Todd" Fischer, IMSAI. Archived from the original on 2012-12-29. Retrieved 2013-06-03.
- ^ Fraley, Bob; Spicer, Dag (2007-01-26). "Oral History of Joseph Killian, Interviewed by: Bob Fraley, Edited by: Dag Spicer, Recorded: January 26, 2007, Mountain View, California, CHM Reference number: X3879.2007" (PDF). Computer History Museum. Archived from the original (PDF) on 2014-07-14. Retrieved 2013-06-03.
- ^ Glass, Brett (1989). "The IBM PC BIOS". Byte: 303–310. Retrieved 2021-12-31.
- ^ "HP BIOS Configuration Utility". Hewlett-Packard. 2013. Archived from the original on 2015-01-12. Retrieved 2015-01-12.
- ^ Phoenix Technologies, Ltd. (June 1991). System BIOS for IBM PCs, Compatibles, and EISA Computers — The Complete Guide to ROM-Based System Software. Phoenix Technical Reference Series (2nd ed.). Amsterdam: Addison Wesley Publishing Company, Inc. ISBN 0-201-57760-7.
- ^ Phoenix Technologies, Ltd. (1989) [1987]. System BIOS for IBM PC/XT/AT Computers and Compatibles — The Complete Guide to ROM-Based System Software. Phoenix Technical Reference Series (1st ed.). Addison Wesley Publishing Company, Inc. ISBN 0-201-51806-6.
- ^ Sanchez, Julio; Canton, Maria P. (2003-02-26). The PC Graphics Handbook. CRC Press. ISBN 978-0-203-01053-2.
- ^ "iAPX 86,88 User's Manual" (PDF). Intel. 1981. System Reset, p. 2-29, table 2-4. Retrieved 2018-04-15.
- ^ "AMD 80286 Datasheet" (PDF). AMD. 1985. p. 13.
the 286 begins execution in real mode with the instruction at physical location FFFFF0H.
- ^ "80386 Programmer's Reference Manual" (PDF). Intel. 1990. Section 10.1 Processor State After Reset, pages 10-1 - 10.3.
- ^ "80386 Programmer's Reference Manual" (PDF). Intel. 1990. Section 10.2.3 First Instruction, p. 10-4. Retrieved 2013-11-03.
Execution begins with the instruction addressed by the initial contents of the CS and IP registers. To allow the initialization software to be placed in a ROM at the top of the address space, the high 12 bits of addresses issued for the code segment are set, until the first instruction which loads the CS register, such as a far jump or call. As a result, instruction fetching begins from address 0FFFFFFF0H.
- ^ "Intel® 64 and IA-32 Architectures Software Developer's Manual" (PDF). Intel. May 2012. Section 9.1.4 First Instruction Executed, p. 2611. Archived from the original (PDF) on 2012-08-08. Retrieved 2012-08-23.
The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0h. This address is 16 bytes below the processor's uppermost physical address. The EPROM containing the software-initialization code must be located at this address.
- ^ page 5-27 IBM Personal Computer Hardware Reference Library Technical Reference, 1984, publication number 6361459
- ^ "IBM 5162 PC XT286 TechRef 68X2537 Technical Reference manual" (PDF). August 1986. p. 35 (System BIOS A-5). Archived (PDF) from the original on 2014-12-11. Retrieved 2014-12-11.
- ^ How StuffWorks: What BIOS Does Archived 2008-02-07 at the Wayback Machine.
- ^ Akeljic, Bekir (2017-01-01). "BIOS BASIC INPUT/ OUTPUT SYSTEM BIOS FUNCTIONS AND MODIFICATIONS". BIOS: 12. Archived from the original on 2022-08-08. Retrieved 2022-08-08 – via INTERNATIONAL UNIVERSITY TRAVNIKFACULITY OF INFORMATION TECHNOLOGY TRAVNIKSOFTWARE PROGRAMMING.
- ^ "BIOS - CodeDocs". codedocs.org. Retrieved 2022-08-08.
- ^ "Memory Layout and Memory Map". flint.cs.yale.edu. Retrieved 2022-08-08.
- ^ "BIOS Data ACPI Table (BDAT)" (PDF). Interface Specification. 4 (5): 67. 2020. Archived (PDF) from the original on 2021-07-03. Retrieved 2022-08-08.
- ^ Stiller, Andreas; Paul, Matthias R. (1996-05-12). "Prozessorgeflüster". c't – magazin für computertechnik. Trends & News / aktuell - Prozessoren (in German). Vol. 1996, no. 6. Verlag Heinz Heise GmbH & Co KG. p. 20. ISSN 0724-8679. Archived from the original on 2017-08-28. Retrieved 2017-08-28.
- ^ Mueller, Scott (2001-06-08). Processor Update Feature | Microprocessor Types and Specifications. InformIT. Archived from the original on 2014-04-16. Retrieved 2014-04-15.
- ^ "Linux* Processor Microcode Data File". Download Center. Downloadcenter.intel.com. 2009-09-23. Archived from the original on 2014-04-16. Retrieved 2014-04-15.
- ^ Scott Mueller, Upgrading and repairing PCs 15th edition, Que Publishing, 2003 ISBN 0-7897-2974-1, pages 109-110
- ^ "KB4100347: Intel microcode updates". support.microsoft.com. Retrieved 2020-09-20.
- ^ "Microcode - Debian Wiki". wiki.debian.org. Retrieved 2020-09-19.
- ^ a b "How SLP and SLIC Works". guytechie.com. 2010-02-25. Archived from the original on 2015-02-03. Retrieved 2015-02-03.
- ^ "Create and add an OEM ACPI SLIC table module to a congatec BIOS" (PDF). congatec.com. 2011-06-16. Archived (PDF) from the original on 2014-08-02. Retrieved 2015-02-03.
- ^ Whitson Gordon (2014-01-13). "A Beginner's Introduction to Overclocking Your Intel Processor". Lifehacker. Gawker Media. Archived from the original on 2014-12-07. Retrieved 2014-12-06.
- ^ Smart Computing Article - What Is The BIOS? Archived 2012-03-10 at the Wayback Machine - Computing Basics July 1994 • Vol.5 Issue 7
- ^ "What is ACPI (Advanced Configuration and Power Interface)? - Definition from WhatIs.com". SearchWindowsServer. Retrieved 2020-09-18.
- ^ "Changing hardware abstraction layer in Windows 2000 / XP – Smallvoid.com". 2001-01-15. Retrieved 2020-09-18.
- ^ "What is ACPI?". www.spo-comm.de. Retrieved 2020-09-18.
- ^ lorihollasch. "Support for headless systems - Windows drivers". docs.microsoft.com. Retrieved 2020-12-05.
- ^ "Memory Map (x86) - OSDev Wiki". wiki.osdev.org. Retrieved 2020-12-11.
- ^ Torres, Gabriel (2004-11-24). "Introduction and Lithium Battery". Replacing the Motherboard Battery. hardwaresecrets.com. Archived from the original on 2013-12-24. Retrieved 2013-06-20.
- ^ Beales, R. P. (2006-08-11). PC Systems, Installation and Maintenance. Routledge. ISBN 978-1-136-37441-8.
- ^ "How to Enter the BIOS on Any PC: Access Keys by Manufacturer". Tom's Hardware. 2022-02-04.
- ^ Constantine A. Murenin (2010-05-21). "11.1. Interfacing from the BIOS". OpenBSD Hardware Sensors – Environmental Monitoring and Fan Control (MMath thesis). University of Waterloo: UWSpace. hdl:10012/5234. Document ID: ab71498b6b1a60ff817b29d56997a418.
- ^ Constantine A. Murenin (2007-04-17). "2. Hardware review". Generalised Interfacing with Microprocessor System Hardware Monitors. Proceedings of 2007 IEEE International Conference on Networking, Sensing and Control, 15–17 April 2007. London, United Kingdom: IEEE. pp. 901–906. doi:10.1109/ICNSC.2007.372901. ISBN 978-1-4244-1076-7. IEEE ICNSC 2007, pp. 901—906.
- ^ "aibs – ASUSTeK AI Booster ACPI ATK0110 voltage, temperature and fan sensor". OpenBSD, DragonFly BSD, NetBSD and FreeBSD. 2010.
- ^ "acpi_thermal(4)". www.freebsd.org. Retrieved 2021-02-24.
- ^ Clarke, Glen E.; Tetz, Edward (2007-01-30). CompTIA A+ Certification All-In-One Desk Reference for Dummies. John Wiley & Sons. ISBN 978-0-471-74811-3.
- ^ Micheloni, Rino; Crippa, Luca; Marelli, Alessia (2010-07-27). Inside NAND Flash Memories. Springer. ISBN 978-90-481-9431-5.
- ^ Mueller, Scott (2004). Upgrading and Repairing PCS. Que. ISBN 978-0-7897-2974-3.
- ^ Clarke, Glen E.; Tetz, Edward (2007-01-30). CompTIA A+ Certification All-In-One Desk Reference for Dummies. John Wiley & Sons. ISBN 978-0-471-74811-3.
- ^ "Decoding RAM & ROM Archived 2012-04-06 at the Wayback Machine." Smart Computing. June 1997. Volume 8, Issue 6.
- ^ "Upgrading Your Flash BIOS For Plug And Play Archived 2012-04-06 at the Wayback Machine." Smart Computing. March 1996. Volume 7, Issue 3.
- ^ "Time To Check BIOS Archived 2011-07-16 at the Wayback Machine." Smart Computing. April 1999. Volume 7, Issue 4.
- ^ "Archived copy". Archived from the original on 2021-08-18. Retrieved 2021-04-01.
{{cite web}}
: CS1 maint: archived copy as title (link) - ^ "SplashTop's Instant-On Linux Desktop | Geek.com". Archived from the original on 2008-09-07.
- ^ Posted by Alex Watson, possibly repost from original content on custompc.com [unclear]. "The life and times of the modern motherboard". 2007-11-27. Archived from the original on 2012-07-24. Retrieved 2013-02-02.
- ^ David Hilber Jr. (August 2009). "Considerations for Designing an Embedded Intel Architecture System with System Memory Down" (PDF). Intel. Archived (PDF) from the original on 2012-10-18. Retrieved 2013-02-02.
- ^ "Types of BIOS". rompacks.com. Retrieved 2021-09-20.
- ^ Stiller, Andreas (2001). "Prozessor-Patches". c't (in German) (5). Heise: 240. Archived from the original on 2015-11-22. Retrieved 2015-11-21.
- ^ "Award BIOS logo". 2015-06-15. Archived from the original on 2015-12-21. Retrieved 2015-12-06.
- ^ Phoenix Eagerly Waiting to Clone Next-Generation IBM BIOS. Archived 2014-01-22 at the Wayback Machine, InfoWorld, 9 March 1987.
- ^ IEEE Standard for Boot (Initialization Configuration) Firmware: Core Requirements and Practices. 1994-10-28. pp. 1–262. doi:10.1109/IEEESTD.1994.89427. ISBN 978-0-7381-1194-0. IEEE STD 1275-1994.
- ^ "IEEE Standards Association". IEEE Standards Association. Retrieved 2023-04-26.
- ^ "Definition of hardware abstraction layer". PCMAG. Retrieved 2022-07-11.
- ^ New BIOS Virus Withstands HDD Wipes, 27 March 2009. Marcus Yam. Tom's Hardware US
- ^ "Black Hat 2006 Multimedia - Presentation, Audio and Video Archives". www.blackhat.com. Retrieved 2019-04-21.
- ^ Sacco, Anibal; Alfredo Ortéga (2009-03-23). "Persistent BIOS Infection". Exploiting Stuff. Archived from the original on 2009-08-04. Retrieved 2010-02-06.
- ^ Fisher, Dennis. "Researchers unveil persistent BIOS attack methods". Threat Post. Archived from the original on 2010-01-30. Retrieved 2010-02-06.
- ^ Giuliani, Marco (2011-09-13). "Mebromi: the first BIOS rootkit in the wild". blog. Archived from the original on 2011-09-23. Retrieved 2011-09-19.
- ^ "360发布"BMW病毒"技术分析报告". blog. Archived from the original on 2011-09-25. Retrieved 2011-09-19.
- ^ Yuan, Liang. "Trojan.Mebromi". Threat Response. Archived from the original on 2011-09-23. Retrieved 2011-09-19.
- ^ a b "How did 60 Minutes get cameras into a spy agency?". CBS News. 2013-12-15. Archived from the original on 2014-04-22. Retrieved 2014-04-15.
- ^ Spencer Ackerman in Washington (2013-12-16). "NSA goes on 60 Minutes: the definitive facts behind CBS's flawed report". theguardian.com. Archived from the original on 2014-01-25. Retrieved 2014-01-27.
- ^ Friedersdorf, Conor (2013-12-16). "A Question for 60 Minutes: Why Would China Want to Destroy the Global Economy?". The Atlantic. Retrieved 2019-03-26.
- ^ Poulsen, Kevin (2013-12-16). "60 Minutes Puff Piece Claims NSA Saved U.S. From Cyberterrorism". Wired. ISSN 1059-1028. Retrieved 2019-03-26 – via www.wired.com.
- ^ Sharwood, Simon (2013-12-16). "NSA alleges 'BIOS plot to destroy PCs'". The Register. Retrieved 2019-03-26.
- ^ "Windows and GPT FAQ". microsoft.com. Microsoft. Archived from the original on 2011-02-19. Retrieved 2014-12-06.
- ^ "Extensible Firmware Interface (EFI) and Unified EFI (UEFI)". Intel. Archived from the original on 2010-01-05. Retrieved 2014-12-06.
- ^ "Windows 11 Specs and System Requirements | Microsoft". Microsoft. Retrieved 2021-10-14.
- ^ "Next-gen boot spec could forever lock Linux off Windows 8 PCS".
- ^ "Windows 8 secure boot could complicate Linux installs". 2011-09-21.
- ^ Tung, Liam (2017-11-20). "Intel: We're ending all legacy BIOS support by 2020". ZDNET.
Further reading
[edit]- IBM Personal Computer Technical Reference (Revised ed.). IBM Corporation. March 1983.
- IBM Personal Computer AT Technical Reference. IBM Personal Computer Hardware Reference Library. Vol. 0, 1, 2 (Revised ed.). IBM Corporation. March 1986 [1984-03]. 1502494, 6139362, 6183310, 6183312, 6183355, 6280070, 6280099.
- Phoenix Technologies, Ltd. (1989) [1987]. System BIOS for IBM PC/XT/AT Computers and Compatibles — The Complete Guide to ROM-Based System Software. Phoenix Technical Reference Series (1st ed.). Addison Wesley Publishing Company, Inc. ISBN 0-201-51806-6.
- Phoenix Technologies, Ltd. (1989) [1987]. CBIOS for IBM PS/2 Computers and Compatibles — The Complete Guide to ROM-Based System Software for DOS. Phoenix Technical Reference Series (1st ed.). Addison Wesley Publishing Company, Inc. ISBN 0-201-51804-X.
- Phoenix Technologies, Ltd. (1989) [1987]. ABIOS for IBM PS/2 Computers and Compatibles — The Complete Guide to ROM-Based System Software for OS/2. Phoenix Technical Reference Series (1st ed.). Addison Wesley Publishing Company, Inc. ISBN 0-201-51805-8.
- Phoenix Technologies, Ltd. (June 1991). System BIOS for IBM PCs, Compatibles, and EISA Computers — The Complete Guide to ROM-Based System Software. Phoenix Technical Reference Series (2nd ed.). Amsterdam: Addison Wesley Publishing Company, Inc. ISBN 0-201-57760-7.
- BIOS Disassembly Ninjutsu Uncovered, 1st edition, a freely available book in PDF format [1]
- More Power To Firmware, free bonus chapter to the Mac OS X Internals: A Systems Approach book
External links
[edit]- "BIOS Boot Specification 1.01" (PDF). Phoenix.com. 1996-01-11. Archived from the original (PDF) on 2011-07-15.
- "How BIOS Works". How Stuff Works. 2000-09-06.
- "Implementing a Plug and Play BIOS Using Intel's Boot Block Flash Memory" (PDF). Intel. February 1995. Archived from the original (PDF) on 2007-11-28. Retrieved 2007-11-28.
- "List of BIOS options". techarp.com. Archived from the original on 2014-01-27.
- "Persistent BIOS Infection". Phrack. No. 66. 2009-06-01. Archived from the original on 2011-04-30. Retrieved 2011-04-30.
- "Preventing BIOS Failures Using Intel Boot Block Flash Memory" (PDF). Intel. December 1998. Archived from the original (PDF) on 2007-03-29. Retrieved 2007-03-29.