Coreboot (dawniej LinuxBIOS) jest projektem programistycznym mającym zastąpić tradycyjny BIOS lżejszym, otwartym oprogramowaniem. Coreboot jest w stanie ładować bezpośrednio jądro Linuxa oraz programy rozruchowe, implementację BIOS(SeaBIOS[1]) oraz implementację UEFI(TianoCore[2]). Coreboot nie obsługuje funkcji BIOS lub UEFI bez SeaBIOS[1] lub TianoCore[2] i nie może załadować systemów operacyjnych, które ich wymagają.

Coreboot
ilustracja
Aktualna wersja stabilna 4.13
Platforma sprzętowa x86, PowerPC, ARM, MIPS, RISC-V
Rodzaj firmware
Licencja GPL
Strona internetowa

Projekt rozpoczął się podczas zimy 1999 roku w Los Alamos National Laboratory[3]. Jest opublikowany na licencji GNU General Public License. Wsparcia udzielało między innymi LANL, AMD, coresystems GmbH oraz Linux Networx, Inc. Producenci płyt głównych, w tym MSI, Gigabyte oraz Tyan, dostarczyli dokumentacje sprzętu lub zaoferowali Coreboot jako zamiennik standardowego BIOSu.

DziałanieEdytuj

Coreboot potrafi załadować jądro Linuksa lub plik ELF - w tym również Etherboot, pozwalający załadować jądro poprzez sieć, i SeaBIOS pozwalający załadować Windows 2000/XP/Vistę/7 oraz *BSD. Potrafi on załadować prawie każdy system operacyjny. Systemy korzystające z funkcji BIOS wymagają SeaBIOS.

Rozwijanie CorebootEdytuj

Ponieważ Coreboot musi zainicjalizować sprzęt musi on być portowany na każdy chipset i płytę główną z osobna. Przed uruchomieniem pamięci RAM, inicjalizuje port szeregowy, aby móc przesyłać informacje o procesie uruchamiania do podłączonego terminala. Może on również wysyłać kody błędu do portu 0x80, aby były wyświetlone przez kartę. Przydatne przy portowaniu jest "RD1 BIOS Savior" łączący dwie pamięci zmieniane za pomocą przełącznika. Komputer może być uruchomiony z pomocą jednej z pamięci po czym druga pamięć może zostać zmieniona po przełączeniu. Inną metodą jest użycie zewnętrznego programatora EEPROM. Można skorzystać również z emulatora CPU, który zastępuje procesor lub łączy się przez port JTAG.

Inicjalizacja pamięci dynamicznejEdytuj

Najtrudniejszym zadaniem wykonywanym przez Coreboot jest inicjalizacja kontrolera DRAM i DRAMu. W pewnych przypadkach dokumentacja techniczna jest chroniona przez tajemnicę handlową lub nie jest dostępna. Dodatkowym utrudnieniem jest to, że nie można użyć pamięci dynamicznej przed jej inicjalizacją – dlatego żeby uruchomić kontroler pamięci oraz RAM kod musi używać wyłącznie rejestrów procesora. Istnieje jednak kompilator C, romcc, który ułatwia to zadanie kompilując kod tak aby nie używał pamięci dynamicznej, w tym stosu. Względnie łatwo można uzyskać dostęp do ROMu SPD pamięci DIMM używając SMBus co pozwala na użycie RAMu. Na nowoczesnych procesorach x86 pamięć podręczna może być używana jako RAM dopóki DRAM nie jest uruchomiona. Wymaga to przestawienia jej w odpowiedni tryb – wymaga to mniejszej ilości instrukcji. O ile jest to zależne od architektury procesora to jest ogólniejsze od inicjalizacji DRAMu, która jest zależna od chipsetu i płyty głównej.

PrzypisyEdytuj

  1. a b https://www.seabios.org/SeaBIOS SeaBIOS] (ang.) – otwarta implementacja starych funkcji BIOS
  2. a b TianoCore (ang.) – otwarta implementacja UEFI
  3. Coreboot FAQ: Who is working on coreboot?