Trochę tła
Najważniejszą rzeczą, którą powinieneś wiedzieć, jest to, że RaspberryPi to dziwna bestia, w której ARM CPU
nie jest to główny procesor - to tylko koprocesor VideoCore GPU
. Kiedy RaspberryPi uruchamia się, kropla GPU jest odczytywana z karty SD do pamięci podręcznej L2 i wykonywana. Ten kod następnie wyświetla wszystkie ważne urządzenia peryferyjne (pamięć RAM, zegary itp.) I uruchamia ARM CPU
. Następnie można uruchomić program ładujący drugiego etapu lub sam system operacyjny ARM CPU
.
Obiekt blob GPU to nie tylko program ładujący. W rzeczywistości jest to sam system operacyjny (Video Core OS). Niektóre ważne elementy systemu nie są bezpośrednio dostępne dla procesora ARM i musi się z nimi komunikować GPU
(za mailbox
pomocą systemu przesyłania komunikatów), aby z nich korzystać. Dostępna jest częściowa dokumentacja na ten temat. Now Video Core OS
( VCOS
) jest okresowo przedłużany przez pracowników Broadcom, aby włączyć funkcje wymagane przez Linux
jądro, RISC OS
a czasem nawet niektóre systemy operacyjne. Nie ma dobra dokumentacja o tym jednak trzeba by kopać w RaspberryPi forum
,github
i ewentualnie inne miejsca, w których można znaleźć informacje na ten temat. Ale jest tam gdzieś. I jest kilka osób, które piszą swój własny kod, a nawet systemy operacyjne na RaspberryPi, aby ci pomóc. I oczywiście dużo otwartego kodu - na przykład jądro Linuksa RasbperryPi.
VideoCore jest zastrzeżony, nie ma oficjalnej dokumentacji i narzędzi programistycznych. Więc jeśli nie chcesz włożyć dużo wysiłku, nie możesz przepisać VCOS
własnego kodu. Istnieje jednak pewien wysiłek, aby dokonać inżynierii wstecznej Video Core, niektóre informacje można znaleźć tutaj .
Innym problemem jest to, że USB
stos firmy Synopsys jest zastrzeżony i znowu nie ma dla niego dokumentacji i wydaje się, że nawet przy dokumentacji trudno jest go niezawodnie wdrożyć. Ale znowu kod jest dostępny (jądro Linux, u-boot, CSUD ). Korzystanie z zaawansowanych funkcji graficznych Video Core
może być również trudne - istnieje pewien otwarty kod źródłowy dla bibliotek graficznych, ale tylko z ARM
boku.
To powiedziawszy, możliwe było udostępnienie RISC OS
portu z informacji (dla mnie nie jest do końca jasne, czy używają tylko informacji publicznie dostępnych), niektóre osoby przepisują (niezależnie od Broadcom) jądro Linuksa na linię główną, tam to FreeBSD
port, „U-boot” i inne. Jest więc zdecydowanie możliwe napisanie własnego systemu operacyjnego. To po prostu nie jest tak proste, jak mogłoby być.
Twoje cele
Numer 1
O ile mi wiadomo, nie ma sposobu, aby SoC mógł zacząć w inny sposób niż opisany. Więc bootloader pierwszego etapu musi być włączony SD card
. I to musi być plik GPU
binarny, a nie ARM
binarny, co jest kolejnym problemem. A w RaspberryPi nie ma wbudowanej pamięci flash, co również stanowi problem.
Numer 2
Głównym problemem jest to, że nie ma na pokładzie flash
RaspberryPi. Możesz dodać jeden i można go aktywować w bootloaderze (który musiałby być już bootloaderem 2. etapu). Jednak pisanie sterownika USB może być problematyczne.
Liczba 3, 4, 5
To nie powinno stanowić większego problemu. Większość urządzeń peryferyjnych (przynajmniej tych dostępnych dla ARM
) jest tutaj udokumentowana . Istniejący program ładujący sprawia, że jest to jeszcze łatwiejsze, ponieważ konfiguracja SoC jest całkowicie skonfigurowana. Możesz tu i tutaj poszukać kodu i dokumentacji.
Alternatywy
Nie znam żadnej innej płyty tak dobrej jak RaspberryPi, więc ciężko jest coś polecić, ale możesz rzucić okiem na niektóre dojrzałe projekty, takie jak Beagleboard / Beaglebone / Pandaboard oparty na OMAP lub możesz śledzić rozwój nowych płyt, takich jak Allwinner Cubieboard lub PCduino . Wszystko zależy od tego, co dokładnie chcesz osiągnąć.
Aby zaktualizować świetną odpowiedź Krzysztofa, Broadcom ostatecznie opublikował jakiś kod, licencjonowany jako 3-Clause BSD, aby pomóc w tworzeniu sterownika GPU typu open source. Próba „rpi-open-firmware” w celu zastąpienia obiektu blob Raspberry Pi VPU rozpoczęła się w 2016 r .: https://github.com/christinaa/rpi-open-firmware . Zobacz więcej na https://news.ycombinator.com/item?id=11703842
Istnieje wiele alternatywnych płyt krótko opisanych i powiązanych z RaspberryPi - Debian Wiki , w tym ODROID-C1, Cubieboard, Banana Pi, Olimex's OLinuxIno Wifi i OlinuxIno Mini, EOMA68 i Beaglebone black.
źródło
Jest wiele rzeczy, które możesz zrobić z bootloaderem U-boot z Raspberry Pi. Zasadniczo po prostu pozwalasz GPU załadować twój koprocesor ARM SoC z obrazem U-boot jako „OS”.
Uważam, że ten artykuł był pomocny jako przykład. Nie zrobiłem tego (jeszcze), ale planuję. Zdarzyło mi się znaleźć twoje pytanie, kiedy sam szukałem sposobu, aby to zrobić, a potem znalazłem artykuł i wyglądało na to, że może być przydatny dla innych szukających podobnych.
Jest jeszcze jeden artykuł, który zawiera bardziej szczegółowe instrukcje budowania obrazu U-boot.
źródło