Coreboot

Coreboot (tidigare känt som LinuxBIOS) är ett projekt för att utveckla fri programvara som alternativ till den proprietära inbyggda programvaran i datorer (BIOS och dess motsvarigheter).

Då moderna operativsystem behöver den inbyggda programvaran närmast till att starta operativsystemet kan coreboot-programmet göras mycket enklare än BIOS.

Projektet stöds av Free Software Foundation.

Historik 
Coreboot-projektet startades vintern 1999 på Advanced Computing Laboratory vid Los Alamos National Laboratory (LANL). Det är licensierat under GNU General Public License (GPL). De största bidragen till projektet har varit från LANL, AMD, coresystems GmbH och Linux Networx, Inc, såväl som från moderkortstillverkarna MSI, Gigabyte och Tyan, som erbjudit coreboot vid sidan av deras standard-BIOS eller tillhandahållit specifikationer för hårdvarugränssnittet för några av deras senaste moderkort. Tyan verkar emellertid ha släppt stödet för coreboot. Google sponsrar delvis coreboot-projektet. CME Group, började stödja coreboot-projektet 2009.

Plattformar 
Förutom arkitekturerna x86 och x86_64, stödjer Coreboot även AMD:s processor Geode. Det som började som stöd för Geode GX-stöd utvecklat av AMD för datorn OLPC, utökades av Artec Group genom att lägga till Geode LX-stöd för sin modell DBE61 ThinCan. AMD infogade sedan den koden och utvecklade den vidare för OLPC efter att den uppgraderades till Geode LX-plattformen. Den koden utvecklas nu vidare av coreboot-communityn för att stödja andra Geode-baserade plattformar.

Coreboot kan flashas till ett moderkorts BIOS genom programmet Flashrom.

Design 
Coreboot laddar vanligtvis in en Linux-kärna, men den kan ladda in vilket annat ELF-program som helst, som exempelvis Etherboot, som kan boota Linux från en boot server, eller SeaBIOS, som laddar Microsoft Windows 2000/XP/Vista/7 och olika BSD-varianter (tidigare stöddes Windows 2000/XP och OpenBSD genom ADLO). Coreboot kan också ladda nästan vilket operativsystem som helst från stödda enheter, såsom Myrinet, Quadrics, eller SCI cluster interconnects. Vissa operativsystem (som Windows 2000/XP/Vista/7 och BSD) kräver legacy BIOS-funktioner som tillgodoses via SeaBIOS.

Till skillnad från BIOS, som nästan alltid helt körs i 16-bitarsläge, kör x86-versionen av Coreboot i 32-bitarsläge efter att ha exekverat endast tio instruktioner. Detta är en likhet med Intels nyare EFI firmware, som används på Intel-baserade Macintosh-datorer och annan nyare PC-hårdvara.

Coreboot kan boota andra kärnor, eller överlåta kontrollen till en bootloader för att låta den boota en kärna eller avbild istället. Coreboot kan också boota en Plan 9 from Bell Labs kärna direkt. En version av GNU GRUB 2 med coreboot-möjligheter finns.

Som standard tillhandahåller coreboot inte BIOS-anropstjänster. En mjukvara kallad SeaBIOS kan användas för att ta hand om BIOS-anrop och därmed tillåta coreboot att ladda operativsystem som kräver dessa tjänster, även om de flesta moderna operativsystem sköter anrop till hårdvara på annat sätt och använder BIOS-anrop endast i uppstartsfasen och som fallback-mekanism.

Att utveckla och avlusa coreboot 
Eftersom Coreboot måste initialisera hårdvaran från grunden, måste coreboot porteras till varje chipset och moderkort som det stödjer. Innan initialisering av arbetsminnet, intialiserar coreboot serieporten (endast adresseringscache och register), så att det kan skicka information för felanalys till en inkopplad terminal. Programmet kan också skicka byte-koder till port 0x80 som visas på en two-hex-digit display på ett inkopplat POST-kort. Ett annat portnings-hjälpmedel är den kommersiella "RD1 BIOS Savior" från IOSS, som är en kombination av två "boot memory devices" som pluggas i boot-minnes-socketen och har en manuell brytare för att välja mellan de två enheterna. Datorn kan boota från en enhet, och sen kan brytaren växlas för att låta datorn omprogrammera eller "flasha" den andra enheten. Ett dyrare alternativ är en extern EPROM/flash programmerare. Det finns också CPU-emulatorer som antingen ersätter  CPUn eller ansluter via en JTAG-port. Kod kan byggas på, eller laddas ner till, BIOS-emulatorer istället för att flasha BIOS-enheten.

Olika Payloads 
Coreboot kan ladda en payload.
SeaBIOS är en implementation av x86 BIOS.
FILO är en GRUB-liknande bootloader med stöd för USB-boot.
Etherboot kan boota ett operativsystem över nätverk. gPXE, som är efterträdaren till Etherboot, fungerar när den körs under SeaBIOS.

Initialisera DRAM 
Den "svåraste" hårdvara som coreboot initialiserar är DRAM controllers och DRAM (Dynamic random access memory). I vissa fall är dokumentationen av dessa skyddade av NDA eller icke tillgängliga. Initialisering av RAM är en speciell svårighet eftersom RAM innan det är initialiserat inte kan användas. Därför kan initialiseringskoden för DRAM-controllers och DRAM bara ha CPU:ns generella register eller Cache-as-RAM som tillfällig lagringsplats.

romcc, en C-kompilator som använder register istället för RAM, underlättar uppgiften. Genom att använda romcc är det relativt enkelt att göra SMBus-accesser till SPD-ROM:arna hos DRAM DIMMarna, som möjliggör användandet av RAM-minnet.

Med nyare x86-processorer, kan processor-cachen användas som RAM tills DRAM initialiseras. Processorcachen måste initialiseras som Cache-as-RAM-läge också, men detta kräver färre instruktioner än att initialisera DRAM. Cache-as-RAM-initialisering är specifik för CPU-arkitektur och således mer generell än DRAM-initialisering som är specifik för varje chipset och moderkort.

Se även 
 OpenBIOS
 Open Firmware
 ThinCan
 Splashtop
 Latitude ON
 Rapid Boot
 LOBOS
 Extensible Firmware Interface

Källor

Externa länkar 
 Anton Borisov (6 januari 2009) The Open Source BIOS is Ten. An interview with the coreboot developers, The H
 "Open BIOSes for Linux", by Peter Seebach
 "LinuxBIOS ready to go mainstream", by Bruce Byfield
 "First desktop motherboard supported by LinuxBIOS: GIGABYTE M57SLI-S4", by Brandon Howard
 Video recording of Ron Minnich's LinuxBIOS talk from FOSDEM 2007
 Coreboot with X Server Inside (YouTube video)
 OLPC booting with coreboot (YouTube video)
 Trying Coreboot under QEMU/KVM emulator

Linux
BIOS