coreboot

Från Wikipedia
Coreboot
Först släppt1999; för 25 år sedan (1999)
Utvecklingsstatusaktiv
TypFirmware
LicensGPLv2
Webbplatswww.coreboot.org

Coreboot (tidigare känt som LinuxBIOS[1]) ä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.[2]

Historik[redigera | redigera wikitext]

Coreboot-projektet startades vintern 1999 på Advanced Computing Laboratory vid Los Alamos National Laboratory (LANL).[3] 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.[källa behövs] Google sponsrar delvis coreboot-projektet.[4] CME Group, började stödja coreboot-projektet 2009.[5]

Plattformar[redigera | redigera wikitext]

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.[6]

Design[redigera | redigera wikitext]

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[7], som laddar Microsoft Windows 2000/XP/Vista/7 och olika BSD-varianter (tidigare stöddes Windows 2000/XP och OpenBSD genom ADLO[8][9]). 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.[10] 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[redigera | redigera wikitext]

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,[11] 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[redigera | redigera wikitext]

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[redigera | redigera wikitext]

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[12]-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[redigera | redigera wikitext]

Källor[redigera | redigera wikitext]

  1. ^ ”LinuxBIOS Welcome to coreboot”. 12 januari 2008. http://coreboot.org/pipermail/coreboot/2008-January/029133.html. Läst 29 november 2010. 
  2. ^ ”The Free Software Foundation's Campaign for Free BIOS”. http://www.fsf.org/campaigns/free-bios.html. Läst 29 november 2010. 
  3. ^ ”Who is working on coreboot?”. http://www.coreboot.org/FAQ#Who_is_working_on_coreboot.3F. Läst 29 november 2010. 
  4. ^ ”Google Sponsors the LinuxBIOS project”. Arkiverad från originalet den 28 december 2006. https://web.archive.org/web/20061228172547/http://google-code-updates.blogspot.com/2006/11/google-sponsors-linuxbios-project.html. Läst 29 november 2010. 
  5. ^ ”CME Group Dives Into Coreboot”. Arkiverad från originalet den 12 augusti 2010. https://web.archive.org/web/20100812092429/http://www.wallstreetandtech.com/it-infrastructure/showArticle.jhtml?articleID=217400294. Läst 29 november 2010. 
  6. ^ ”Flashrom” (på engelska). coreboot.org. Arkiverad från originalet den 8 april 2016. https://web.archive.org/web/20160408133504/https://code.coreboot.org/p/flashrom/. Läst 25 maj 2016. 
  7. ^ ”SeaBIOS (tidigare känt som LegacyBIOS) är en legacy-BIOS implementation baserad på öppen källkod”. http://www.coreboot.org/SeaBIOS. Läst 29 november 2010. 
  8. ^ ”coreboot Add-on Layer (ADLO)”. Arkiverad från originalet den 25 november 2010. https://web.archive.org/web/20101125130605/http://www.coreboot.org/ADLO. Läst 29 november 2010. 
  9. ^ ”SEBOS page archived on archive.org”. Arkiverad från originalet den 19 juni 2007. https://web.archive.org/web/20070619101948/http://www.missl.cs.umd.edu/sebos_phase2.html. Läst 29 november 2010. 
  10. ^ ”coreboot v3 early startup code”. Arkiverad från originalet den 10 juli 2012. https://archive.today/20120710041412/http://lxr.linux.no/coreboot-v3+r777/arch/x86/geodelx/stage0.S. Läst 29 november 2010. 
  11. ^ ”IOSS”. Arkiverad från originalet den 25 november 2010. https://web.archive.org/web/20101125084500/http://www.ioss.com.tw/. Läst 29 november 2010. 
  12. ^ ”A Framework for Using Processor Cache as RAM (CAR)”. http://www.coreboot.org/images/6/6c/LBCar.pdf. Läst 29 november 2010. 

Externa länkar[redigera | redigera wikitext]