Chcę się dowiedzieć o systemie BIOS na płycie głównej Raspberry Pi. Jak nazywa się BIOS? Czy ma określoną nazwę, czy po prostu nazywa się BIOS na Raspberry Pi?
BIOS przechowuje niektóre oprogramowanie do sterowania komputerem przed jego uruchomieniem (przykładowy dysk twardy, pamięć itp.). Pi nie używa „BIOS” jak na komputerze PC. Po prostu inicjuje układ Broadcom (procesor, pamięć podręczną, GPU) przy użyciu oprogramowania układowego zapisanego dla tego układu i przechodzi bezpośrednio do systemu operacyjnego. System operacyjny wykrywa następnie sprzęt i pamięci RAM zgłoszone przez Broadcom. To sprawia, że uruchamianie jest naprawdę szybkie, ale tylko Broadcom wie, jak debugować lub „ustawiać” właściwości w locie.
Piotr Kula
Odpowiedzi:
32
Oprogramowanie to zastrzeżony kod źródłowy zaprogramowany w procesorze SoC (System on a Chip), którego nie można modyfikować. Po włączeniu zasilania oprogramowanie uruchomi moduł ładujący na karcie SD. Nie wierzę, aby jakiekolwiek inne usługi były świadczone przez oprogramowanie układowe SoC, więc tak naprawdę nie jest to „BIOS” (Basic Input / Output System) per se. Po tym punkcie wszystko inne pochodzi z karty SD.
Zgodnie z sekcją oprogramowania wiki kolejność uruchamiania jest następująca:
Program ładujący pierwszego stopnia - służy do zamontowania partycji rozruchowej FAT32 na karcie SD, aby można było uzyskać dostęp do programu ładującego drugiego stopnia. Jest on programowany w samym SoC podczas produkcji RPi i nie może być przeprogramowany przez użytkownika.
Drugi etap programu ładującego (bootcode.bin) - służy do pobierania oprogramowania układowego GPU z karty SD, programowania oprogramowania układowego, a następnie uruchamiania GPU.
Oprogramowanie układowe GPU (start.elf) - Po załadowaniu umożliwia to GPU uruchomienie procesora. Dodatkowy plik fixup.dat służy do konfigurowania partycji SDRAM między GPU a CPU. W tym momencie procesor jest zwalniany z resetowania i wykonywanie jest przenoszone.
Kod użytkownika - może to być dowolna liczba plików binarnych. Domyślnie jest to jądro Linuksa (zwykle o nazwie kernel.img), ale może to być także inny program ładujący (np. U-Boot) lub aplikacja bez systemu operacyjnego.
Dodałbym tylko, że bootloader pierwszego etapu jest spalony na małej pamięci ROM wewnątrz SoC. Jak wspomniano, jedynym obowiązkiem jest ładowanie bootcode.binz karty SD. To jest powód, dla którego nie można uruchomić RaspberryPi z nośnika innego niż karta SD.
@TevoD ma prawie rację w tym, co napisał w swojej odpowiedzi - RaspberryPi używa binarnego oprogramowania układowego jako bootloadera. Aktualna wersja znajduje się tutaj . Dwa pliki, które tworzą oprogramowanie wewnętrzne to bootcode.bin(bootloader 2. etapu) i start.elf(„firmware” GPU). Co ciekawe i dość unikalne dla RaspberryPi, to to, że zaczyna się od GPU(układ graficzny) i właśnie tam działa bootloader. GPUnastępnie uruchamia ARM CPUi uruchamia jądro Linuksa.
GPUJednak po uruchomieniu Linuksa kod nie jest zwalniany. Zamiast tego działa własny, prosty system operacyjny o nazwie VCOS( Video Core Operating System). Jądro Linux komunikuje się ze swoimi usługami za pomocą specjalnych mailbox protocoli wykorzystujących przerwania (GPU może wytwarzać przerwania ARM). Można przeczytać informacje na temat protokołu używanego do poczty framebuffertutaj . GPU jest odpowiedzialna nie tylko za elementy graficzne - kontroluje również zegary i wytwarza na przykład dźwięk. Pod tym względem oprogramowanie układowe GPU można uznać za coś podobnego do BIOSzwykłego komputera PC. Więcej informacji na ten temat można znaleźć w czytaniu sterowników jądra Linux RaspberryPi.
Możesz również znaleźć więcej informacji w tej odpowiedzi.
Słuszna uwaga. Zastanawiałem się nad pytaniem BIOS-u, aby wyraźnie odnosiło się do wbudowanego oprogramowania układowego, a nie karty SD, i dodałem kolejność uruchamiania, aby uzyskać pełniejszą odpowiedź. Twój na pewno bierze się stąd. +1
Odpowiedzi:
Oprogramowanie to zastrzeżony kod źródłowy zaprogramowany w procesorze SoC (System on a Chip), którego nie można modyfikować. Po włączeniu zasilania oprogramowanie uruchomi moduł ładujący na karcie SD. Nie wierzę, aby jakiekolwiek inne usługi były świadczone przez oprogramowanie układowe SoC, więc tak naprawdę nie jest to „BIOS” (Basic Input / Output System) per se. Po tym punkcie wszystko inne pochodzi z karty SD.
Zgodnie z sekcją oprogramowania wiki kolejność uruchamiania jest następująca:
źródło
bootcode.bin
z karty SD. To jest powód, dla którego nie można uruchomić RaspberryPi z nośnika innego niż karta SD.@TevoD ma prawie rację w tym, co napisał w swojej odpowiedzi - RaspberryPi używa binarnego oprogramowania układowego jako bootloadera. Aktualna wersja znajduje się tutaj . Dwa pliki, które tworzą oprogramowanie wewnętrzne to
bootcode.bin
(bootloader 2. etapu) istart.elf
(„firmware” GPU). Co ciekawe i dość unikalne dla RaspberryPi, to to, że zaczyna się odGPU
(układ graficzny) i właśnie tam działa bootloader.GPU
następnie uruchamiaARM CPU
i uruchamia jądro Linuksa.GPU
Jednak po uruchomieniu Linuksa kod nie jest zwalniany. Zamiast tego działa własny, prosty system operacyjny o nazwieVCOS
(Video Core Operating System
). Jądro Linux komunikuje się ze swoimi usługami za pomocą specjalnychmailbox protocol
i wykorzystujących przerwania (GPU może wytwarzać przerwania ARM). Można przeczytać informacje na temat protokołu używanego do pocztyframebuffer
tutaj . GPU jest odpowiedzialna nie tylko za elementy graficzne - kontroluje również zegary i wytwarza na przykład dźwięk. Pod tym względem oprogramowanie układowe GPU można uznać za coś podobnego doBIOS
zwykłego komputera PC. Więcej informacji na ten temat można znaleźć w czytaniu sterowników jądra Linux RaspberryPi.Możesz również znaleźć więcej informacji w tej odpowiedzi.
źródło