Trochę tła
Najważniejszą rzeczą, którą powinieneś wiedzieć, jest to, że RaspberryPi to dziwna bestia, w której ARM CPUnie 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 mailboxpomocą 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 Linuxjądro, RISC OSa czasem nawet niektóre systemy operacyjne. Nie ma dobra dokumentacja o tym jednak trzeba by kopać w RaspberryPi forum,githubi 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ć VCOSwł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 USBstos 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 Coremoże być również trudne - istnieje pewien otwarty kod źródłowy dla bibliotek graficznych, ale tylko z ARMboku.
To powiedziawszy, możliwe było udostępnienie RISC OSportu 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 FreeBSDport, „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 GPUbinarny, a nie ARMbinarny, 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 flashRaspberryPi. 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ąć.