Coreboot

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Coreboot
firmware
Platforma sprzętowa x86, PowerPC
Aktualna wersja stabilna 2
Licencja GPL
http://www.coreboot.org

Coreboot (dawniej LinuxBIOS) jest projektem mającym zastąpić tradycyjny BIOS lżejszym, otwartym oprogramowaniem. Coreboot jest w stanie ładować 32-bitowe i 64-bitowe systemy operacyjne, jednakże nie obsługuje bezpośrednio funkcji BIOS i dlatego nie może ładować bezpośrednio systemów, które z nich korzystają (może je jednak załadować poprzez SeaBIOS[1]).

Projekt rozpoczął się podczas zimy 1999 roku w Los Alamos National Laboratory[2]. 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. Jednakże Tyan prawdopodobnie przestał wspierać projekt[potrzebne źródło].

Działanie[edytuj | edytuj kod]

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.

Coreboot szybciej ładuje nowoczesne systemy[potrzebne źródło] poprzez złamanie kompatybilności z tradycyjnym, 16-bitowym BIOSem – między innymi od razu przechodzi w tryb chroniony, co jest jego unikalną właściwością. Dokonuje on tylko inicjalizacji sprzętu, która nie może być wykonana przez system operacyjny.

Rozwijanie Coreboot[edytuj | edytuj kod]

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 dynamicznej[edytuj | edytuj kod]

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.

Przypisy

  1. SeaBIOS (ang.) – (znany wcześniej jako LegacyBIOS) jest otwartą implementacją starych funkcji BIOS
  2. Coreboot FAQ: Who is working on coreboot?