Uruchom ROM

Boot ROM to rodzaj pamięci ROM używanej do uruchamiania systemu komputerowego. Istnieją dwa typy: z maską , której nie można później zmienić, oraz rozruchowa pamięć EEPROM , która może zawierać implementację UEFI .

Zamiar

Po włączeniu sprzęt zwykle uruchamia się bez zainicjowania. Aby kontynuować uruchamianie, system może wymagać odczytania programu ładującego z jakiegoś urządzenia peryferyjnego. Często łatwiej jest zaimplementować procedury odczytu z zewnętrznych urządzeń pamięci masowej w oprogramowaniu niż w sprzęcie. Boot ROM zapewnia miejsce do przechowywania tego początkowego kodu ładowania, w ustalonej lokalizacji, natychmiast dostępnej dla procesora po rozpoczęciu wykonywania.

Operacja

Boot ROM jest odwzorowywany w pamięci w ustalonej lokalizacji, a procesor jest zaprojektowany tak, aby po resecie rozpocząć wykonywanie z tej lokalizacji. Zwykle jest umieszczany na tej samej matrycy co procesor, ale może to być również zewnętrzny ROM , jak to ma miejsce w starszych systemach.

Rozruchowa pamięć ROM zainicjuje następnie magistrale sprzętowe i urządzenia peryferyjne potrzebne do rozruchu. W niektórych przypadkach bootowalna pamięć ROM jest w stanie zainicjować pamięć RAM , aw innych przypadkach to zależy od programu ładującego .

Pod koniec inicjalizacji sprzętu bootowalna pamięć ROM spróbuje załadować program ładujący z zewnętrznych urządzeń peryferyjnych (takich jak eMMC, karta microSD itd.) lub za pośrednictwem określonych protokołów na magistrali do transmisji danych ( jak USB, UART itp.).

W wielu systemach na chipie można skonfigurować urządzenia peryferyjne lub magistrale, z których bootowalna pamięć ROM próbuje załadować program ładujący , oraz kolejność, w jakiej są ładowane. Tę konfigurację można wykonać, przepalając niektóre bezpieczniki elektroniczne wewnątrz systemu na chipie w celu zakodowania tych informacji lub umieszczając określone piny systemu na chipie w stanie wysokim lub niskim podczas rozruchu.

Niektóre rozruchowe pamięci ROM są w stanie sprawdzić podpis cyfrowy programu ładującego i odmówią uruchomienia programu ładującego i zatrzymają rozruch, jeśli podpis nie jest ważny lub nie został podpisany autoryzowanym kluczem. W przypadku niektórych rozruchowych pamięci ROM skrót klucza publicznego potrzebny do weryfikacji podpisów jest zakodowany w elektronicznych bezpiecznikach wewnątrz systemu na chipie . Niektóre systemy w rozruchowych ROM-ach obsługują również infrastrukturę klucza publicznego , a zamiast tego skrót klucza publicznego urzędu certyfikacji (CA) jest kodowany w bezpiecznikach elektronicznych , a rozruchowy ROM będzie mógł wtedy sprawdzić, czy program ładujący jest podpisany przez autoryzowany klucz poprzez weryfikację tego klucza z kluczem publicznym CA (którego skrót jest zakodowany w bezpiecznikach elektronicznych ).

Funkcji tej można następnie użyć do wdrożenia funkcji bezpieczeństwa lub użyć jako sprzętowego źródła zaufania w łańcuchu zaufania , ale po skonfigurowaniu użytkownicy nie mają możliwości wymiany programu ładującego na taki, jakiego chcą. Z tego powodu funkcja ta wzbudziła poważne obawy społeczności wolnego oprogramowania.

Tuż przed przejściem do programu ładującego niektóre systemy na chipie również usuwają rozruchową pamięć ROM z mapowania pamięci, podczas gdy inne tego nie robią, co umożliwia zrzucenie pamięci rozruchowej z późniejszej analizy. Jeśli rozruchowa pamięć ROM jest nadal widoczna, programy ładujące mogą również wywołać kod rozruchowej pamięci ROM (co czasami jest udokumentowane).

Zawieś do pamięci RAM

Kiedy system na chipie przechodzi w tryb zawieszenia pamięci RAM , w wielu przypadkach procesor jest całkowicie wyłączony, podczas gdy pamięć RAM przechodzi w tryb samoodświeżania. Po wznowieniu rozruchowa pamięć ROM jest wykonywana ponownie, a wiele rozruchowych pamięci ROM jest w stanie wykryć, że system na chipie był w zawieszeniu do pamięci RAM i można wznowić, przeskakując bezpośrednio do jądra , które następnie zajmuje się ponownym włączeniem urządzeń peryferyjnych, które były wyłączone i przywracanie stanu, w jakim komputer znajdował się wcześniej.

Konkretne wdrożenia

Zwycięzca

W wielu systemach Allwinner na chipie (A10, A20, A64) rozruchowa pamięć ROM albo czeka na załadowanie programu ładującego przez USB (jeśli określony kod PIN jest wysoki), albo próbuje uruchomić kilka urządzeń peryferyjnych w ustalonej kolejności.

Niektóre systemy Allwinner na chipie mogą weryfikować sygnaturę booloaderów. Ale większość produkowanych urządzeń nie jest do tego skonfigurowana. Umożliwiło to bezpłatnemu i otwartemu oprogramowaniu dodanie obsługi wielu systemów Allwinner na chipie i urządzeniach wykorzystujących je w programach ładujących , takich jak U-Boot .

Jabłko

Na urządzeniach z systemem iOS rozruchowa pamięć ROM nosi nazwę „SecureROM”. Jest to okrojona wersja iBoot . Zapewnia aktualizacji oprogramowania układowego urządzenia (DFU), który można aktywować za pomocą specjalnej kombinacji klawiszy.

NXP

Boot ROM systemów NXP na chipie obsługuje konfigurację urządzeń peryferyjnych za pomocą określonych pinów systemu na chipie. W rodzinie I.MX6 obsługuje również konfigurowanie kolejności rozruchu za pomocą efusów .

Boot ROM kilku systemów NXP na chipie ma wiele sposobów ładowania bootloadera pierwszego stopnia (z eMMC, microSD, USB itp.).

Kilka systemów NXP na chipie można skonfigurować w celu weryfikacji podpisu programów ładujących. Wiele urządzeń z takim systemem na chipie zostało sprzedanych bez skonfigurowanej weryfikacji, a na tych urządzeniach użytkownicy mogą zainstalować żądany program ładujący , w tym kilka darmowych programów ładujących o otwartym kodzie źródłowym, takich jak Das U-Boot i Barebox .

Instrumenty z Teksasu

Rozruchowa pamięć ROM kilku systemów Texas Instruments na chipie obsługuje konfigurację urządzeń peryferyjnych za pomocą określonych pinów systemu na chipie.

Rozruchowa pamięć ROM kilku systemów Texas Instruments na chipie ma wiele sposobów ładowania programu ładującego pierwszego stopnia (który nazywa się MLO w systemach w podręcznikach referencyjnych układów scalonych):

  • Można go ładować z różnych urządzeń pamięci masowej (MMC/SD/eMMC, NAND itp.).
  • W przypadku MMC/SD/eMMC można go załadować bezpośrednio z sektorów karty (w instrukcji nazywany trybem RAW) lub z partycji FAT12/16/32.
  • Można go również załadować z USB lub UART.

W systemie OMAP36xx na chipie bootowalna pamięć ROM szuka bootloadera pierwszego stopnia w sektorach 0x0 i 0x20000 (128 KB), a w systemie AM3358 na chipie dodatkowo sprawdza 0x40000 (256KiB) i 0x60000 (384KiB). W obu przypadkach jego maksymalny rozmiar to 128KiB. Dzieje się tak, ponieważ program ładujący (pierwszego etapu) jest ładowany do pamięci SRAM znajdującej się w systemie na chipie .

OMAP i AM335x na chipie można skonfigurować tak, aby weryfikowały podpis booloaderów. Wiele urządzeń z takim systemem na chipie zostało sprzedanych bez skonfigurowanej weryfikacji, a na tych urządzeniach użytkownicy mogą zainstalować żądany program ładujący , w tym kilka darmowych programów ładujących o otwartym kodzie źródłowym, takich jak Das U-Boot i Coreboot oraz Barebox .

STMicro STM32

Mikrokontrolery z rodziny STMicro STM32 mają wbudowaną pamięć ROM (nazywaną również „wbudowanym programem ładującym”), która ułatwia flashowanie pustego systemu. Pewne kombinacje pinów lub czasami bezpieczniki i/lub puste kontrole pamięci flash wymuszają uruchomienie układu z pamięci ROM zamiast oprogramowania układowego w głównej pamięci flash. Pozwala to na flashowanie pustych chipów bez uciekania się do sprzętowych interfejsów programistycznych. Technicznie ta pamięć ROM jest przechowywana w dedykowanym obszarze macierzy flash i programowana przez STMicro podczas produkcji. Większość mikrokontrolerów STM32 można co najmniej flashować przez UART, niektóre obsługują USB i ewentualnie inne interfejsy, takie jak np. I2C , SPI , czy CAN . Rdzeń procesora Cortex -M zwykle pobiera wektory z dobrze znanych adresów 0x00000000 (początkowa wartość wskaźnika stosu ) i 0x00000004 (początkowa wartość licznika programu ). Jednak piny i/lub bezpieczniki określają, która pamięć jest mapowana na te adresy. Wbudowana bootowalna pamięć ROM jest jedną z opcji mapowania, inną zazwyczaj jest główne oprogramowanie układowe w pamięci flash. W tym przypadku oprogramowanie układowe powinno wykonywać wszystkie zadania, które wykonują rozruchowe pamięci ROM; część oprogramowania układowego może działać jako program ładujący, podobny do rozruchowej pamięci ROM ST. Sprzęt mógłby zapewniać wymuszanie tylko do odczytu w obszarze rozruchowym, zamieniając go w dostarczoną przez użytkownika wersję rozruchowej pamięci ROM.

Bezpieczeństwo

Jabłko

Na urządzeniach z systemem iOS exploity boot ROM (takie jak Limera1n i checkm8) są czasami wykorzystywane do jailbreakowania iOS . Zaletą dla osób, które chcą jailbreakować swoje urządzenia w stosunku do exploitów wpływających na iOS , jest to, że ponieważ rozruchowej pamięci ROM nie można modyfikować - a urządzenia z systemem iOS nie mają bezpieczników do dołączania kodu do rozruchowej pamięci ROM, Apple nie może naprawić luki w istniejących urządzeniach.

Nvidia Tegra

Rozruchowa pamięć ROM Tegra SoC firmy Nvidia (używana przez konsolę Nintendo Switch ) zawierała lukę w zabezpieczeniach, która umożliwiała użytkownikom uruchomienie żądanego programu ładującego .

Zobacz też