Jak uruchamia się Raspberry Pi?

57

Mam mini-komputer malinowy i zastanawiam się, jak to działa przez cały proces uruchamiania. Mogę skompilować własne jądro i inicjować ramdysk z własnymi skryptami i zbudować swój własny minimalny system Linux na PC, ale do tego muszę użyć jakiegoś bootloadera. Raspberry wcale nie obsługuje programów ładujących.

Wydaje się, że w jakiś sposób uruchamia się za pomocą swojego GPU, który odczytuje partycję na karcie SD (prawdopodobnie tę z flagą rozruchową), która musi zostać sformatowana w FAT32, a następnie odczytuje stamtąd niektóre pliki, które są dostarczane, na przykład przez raspbian.

Ale jak mam uruchomić własne jądro z własnymi dostosowaniami, które sam skompilowałem? Gdzie mam skopiować obraz jądra / initrd (dysk RAM), aby malina go znalazła i uruchomiła się z niego? Zasadniczo szukam bardzo szczegółowej dokumentacji technicznej, która opisuje proces rozruchu na malinie lub po prostu wyjaśnienie tego.

Petr
źródło
1
możliwy duplikat Co dzieje się podczas procesu uruchamiania?
asalamon74

Odpowiedzi:

59

Z tego postu na forum Raspberry Pi [Edytowane w celu odzwierciedlenia loader.binjako anachronizm] :

  1. Po pierwszym włączeniu Raspberry Pi rdzeń ARM jest wyłączony, a rdzeń GPU jest włączony. W tym momencie SDRAM jest wyłączony.
  2. Procesor graficzny rozpoczyna uruchamianie programu ładującego pierwszego etapu, który jest przechowywany w pamięci ROM na karcie SoC. Program ładujący pierwszego etapu odczytuje kartę SD, ładuje program ładujący drugiego stopnia ( bootcode.bin) do pamięci podręcznej L2 i uruchamia go.
  3. bootcode.binwłącza SDRAM i odczytuje trzeci etap bootloadera (loader.bin) z karty SD do pamięci RAM i uruchamia go. [Nowsze wersje nie używają bootloadera trzeciego etapu. ]
  4. [Jeśli dotyczy] loader.binodczytuje oprogramowanie układowe GPU ( start.elf).
  5. start.elfczyta config.txt, cmdline.txtikernel.img

loader.binnie robi wiele. Może obsługiwać .elfpliki, dlatego jest potrzebny do załadowania start.elfna górze pamięci (ARM używa SDRAM od zera adresu). Istnieje plan, aby dodać obsługę ładowania elfów bootcode.bin, co uczyniłoby to loader.binniepotrzebnym, ale jest to niski priorytet (myślę, że może zaoszczędzić 100 ms przy starcie). [Od tego czasu nastąpiła zmiana. ]

Oto niektóre zasoby, które mogą być pomocne:

syb0rg
źródło
2
Czy zawartość tych plików bin jest oprogramowaniem zastrzeżonym?
Petr
3
@Petr Oto Github dla oprogramowania Raspberry Pi, zmodyfikuję go w mojej odpowiedzi.
syb0rg
1
W często zadawanych pytaniach na temat Raspberry Pi napisano: „Musisz uruchomić komputer z SD, ale USB HD może„ przejąć ”po pierwszym uruchomieniu. Nie możesz uruchomić bez karty SD.”
syb0rg
1
Czy to parycja, która jest czytana jako pierwsza, jakaś partycja z flagą B, czy to musi być pierwsza partycja? Co jeśli zrobię to za duże i chciałbym stworzyć kolejną na końcu karty SD, która byłaby mniejsza
Petr
1
@Petr Powinieneś zadać to jako kolejne pytanie!
syb0rg