Poziom zdolności do hakowania malinowego pi

35

Pracuję z systemami wbudowanymi (głównie mikrokontrolerami) od około 3 lat. Chcę wiedzieć, ile RPi faktycznie ma otwarte oprogramowanie? Wiem, że arduino podaje nam pełne informacje o sprzęcie / oprogramowaniu itp. Ale co z RPi? Jest to ważne, ponieważ mój zespół i ja chcemy wykonać następujące czynności z Raspberry Pi [ten projekt zamierza używać RPi dokładnie tak jak arduino => brak systemu operacyjnego]:

  1. Przepisz podstawowy program ładujący (ROM), aby uruchamiał się z pamięci flash, a nie z zewnętrznej karty SD.
  2. Mają dodatkowy bootloader we wbudowanej pamięci flash, aktywuje to port USB pi i nasłuchuje. Musi zaakceptować kod binarny (który dostanie z mojego komputera) i zapisać go we flashu. później zacznij go wykonywać.
  3. Opracuj własne sterowniki urządzeń do obsługi protokołów komunikacyjnych.
  4. Opracuj własne środowisko do przesyłania i debugowania dla PI, a także naszą niestandardową implementację wbudowanego C dla ARM (niezbędną do kontrolowania GPIO itp.).
  5. W miarę możliwości zaimplementuj własny system operacyjny dla systemów wbudowanych.

Czy to możliwe z Raspberry Pi? Jeśli nie:
-> Który z moich pięciu celów nie jest możliwy z Raspberry Pi. jakie zmiany muszę wprowadzić w swoim projekcie, jeśli muszę pracować z PI?
-> Jakie inne tablice są na rynku, co pozwoli mi osiągnąć dokładnie to, czego chcę?

deepak
źródło

Odpowiedzi:

76

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ąć.

Krzysztof Adamski
źródło
3
Chcę +100 tej odpowiedzi. Dobra robota.
orithena
@maligree lol, nie martw się - to już zostało zrobione! :)
xxmbabanexx
1
+1 dla Beablebone, ponieważ jest w 100% open source, a ty masz możliwość „respin” sprzętu i stworzyć własną płytkę drukowaną
portforwardpodcast
5

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.

nealmcb
źródło
Osobiście uważam, że alternatywy nie są tak świetne, wiele płyt ODROID wymusza sprawdzanie podpisów na bootloaderze i powstrzymuje cię przed uruchomieniem na nich własnego kodu. Rodzina TI OMAP3 istnieje w trybie bezpiecznym przed wywołaniem kodu, co również ogranicza możliwości jego użycia. VPU na RPi jest całkiem fajne, myślę, że to daje mu przewagę nad innymi płytami, a teraz, gdy mamy do tego dobry łańcuch narzędzi, wszystko wygląda dobrze.
Kristina Brooks,
1

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.

Alan Mimms
źródło
1
Jest to odpowiedź, która może być przydatna na początku, ale po kilku latach linki przestają działać i nie ma żadnej wskazówki na temat ich treści. Rozważ przynajmniej powiedzenie, której gałęzi U-boot i jakiego kompilatora użyłeś.
Dmitrij Grigoryev,
Dzięki Dmitry. Wrócę do tego wkrótce i naprawię to, kiedy będę miał trochę czasu.
Alan Mimms,