BeagleBone Black
Raspberry Pi cieszy się co raz większą popularnością – nic więc dziwnego, że na rynku pojawia się co raz więcej konkurencyjnych rozwiązań. Od kilku miesięcy na moim biurku leży BeagleBone Black, czyli miniaturowy komputer za kilka złotych.
Urządzenie można kupić w sklepach elektronicznych – TME, Kamami, Farnell (mój egzemplarz pochodził właśnie z tego ostatniego). Regularnie są też wystawiane na allegro, jednak czas dostawy towaru sugeruje, że sprzedawca ściąga urządzenia prosto z Anglii (Farnell). Co ciekawe przy zamówieniu przesyłki z Farnella do godziny 16 przesyłka powinna trafić do nas już następnego dnia. Cena urządzenia kształtuje się na poziomie około 220zł brutto. Samo urządzenie już kiedyś na łamach bloga opisywał kyrol, więc dla przypomnienia specyfikacji technicznej przypomnę jedynie że BeagleBone Black pracuje pod kontrolą procesora 1GHz (ARM, Cortex A8, 512MB RAM, 2GB wbudowanego NANDu). Sam procesor posiada 65 portów GPIO co pozwala na sterowanie urządzeniami zewnętrznymi (lub odbieranie od nich informacji). Oczywiście, niektóre z nich możemy wykorzystać do połączenia z wykorzystaniem RS‑232, I2C czy SPI, inne natomiast tylko jako binarne wejścia oraz wyjścia. Dzięki temu urządzenie staje się niemal uniwersalnym.
System operacyjny
Najszybciej skorzystać z gotowych rozwiązań. Pełną listę systemów przeznaczonych na platformę BBB znaleźć można na stronie projektu (www.beaglebone.org). Po moich doświadczeniach z tą platformą mogę zauważyć, że Angstrom (domyślnie zainstalowany system na BBB) bardzo wolno pobiera treści z sieci. Maksymalny transfer jaki osiągnąłem to około 300kB/s, bez względu na miejsce zapisu (NAND, microSD). System posiada, „wszystko co niezbędne”, ma również od razu zainstalowany tryb graficzny. Kolejnym system jaki zdecydowałem się uruchomić na tej platformie jest Ubuntu. W tym przypadku zdecydowanie zwiększyła się prędkość pobierania danych z internetu. Podstawowa wersja tego OSa nie posiada trybu graficznego (należy go zainstalować ręcznie). Niestety w przypadku wykorzystywania pamięci wewnętrznej nie uda nam się zainstalować domyślnego trybu graficznego – zwyczajnie zabraknie nam miejsca. Jeśli zdecydujemy się na wykorzystanie karty microSD o wielkości minimum 4GB i wydaniu w konsoli polecenia
sudo apt-get update sudo apt-get install ubuntu-desktop
i podłączeniu monitora lub telewizora do urządzenia po kilku chwilach na ekranie powinien pojawić się obraz w rozdzielczości FullHD w trybie 24fps. Niestety układ graficzny w BeagleBonie jest słabszy niż ten wykorzystywany w RaspberryPi i próba obejrzenie filmu w rozdzielczości 1920x1080 może zakończyć się nerwicą lub zawieszeniem urządzenia. Na desktopie korzystam z Windowsa. Jeśli już muszę skorzystać z Linuxa wybieram Debiana, którego kompilacja również jest przygotowana na BeagleBona. Co prawda na tym systemie nie instalowałem trybu graficznego ale najprawdopodobniej również w tym przypadku potrzebujemy większej karty microSD. Sterownik sieci pracuje z pełną prędkością, podobnie jak ma to miejsce w „Łubudubu” a kompilacja jest wyposażona również w sterowniki umożliwiające wykorzystanie GPIO, RS232 i innych interfejsów.
Możliwości połączenia
Oczywiście BeagleBone Black to komputer, który może pracować samodzielnie i po podłączeniu myszy, klawiatury i monitora możliwe jest wykorzystanie go do normalnej pracy. Częściej jednak jest wykorzystywany jako platforma uruchomieniowa lub urządzenie hostujące jakąś usługę. Jeśli więc chcemy uruchomić BeagleBona bez monitora, to możemy z niego korzystać z następujących połączeń:
- SSH (chyba nie trzeba opisywać
- SerialPort (wykorzystując UART)
Pierwszy przypadek wykorzystywany jest bardzo często, nie tylko w systemach wbudowanych, ale również w poważnych komputerach i serwerach. Za jego pomocą możemy również przesyłać pliki.
Drugi sposób przyda się szczególnie jeśli nie znamy adresu IP naszego BB lub zmieniliśmy konfigurację sieci i teraz urządzenie nie może połączyć się z siecią. Połączenie to jest możliwe z wykorzystanie kabla USB‑>UART i dzięki niemu możemy połączyć się z urządzeniem bez wykorzystania sieci TCP/IP. Po prawidłowym połączeniu należy zalogować się jako użytkownik komputera i... korzystać z urządzenia. To połączenie co prawda jest stosunkowo powolne, nie umożliwia przesyłania plików (ale nic nie stoi na przeszkodzie, aby w prosty sposób taką funkcjonalność zaimplementować) ale ma jedną podstawową zaletę - pozwala obserwować i analizować cały proces uruchamiania urządzenia począwszy od uboota aż do momentu uruchomienia systemu operacyjnego.
Cross – kompilacja
Platforma jaką jest Beaglebone Black czy Raspberry Pi może posłużyć nam również jako platforma dla naszych własnych aplikacji. Jednak ze względu na jej wydajność wątpliwym jest, aby ktoś wykorzystywał ją zarówno jako urządzenie docelowe jak i sprzęt na którym zdecyduje się tworzyć program. Najwygodniej w takim przypadku skorzystać z cross – kompilacji, czyli tworzyć kod na jednej platformie i kompilować go dla drugiej platformy. W tym celu najlepiej jest skorzystać z IDE Eclipse (w wersji na Windowsa lub Linuxa*). Oprócz środowiska potrzebujemy również toolchaina, który umożliwi kompilowanie kodu dla odpowiedniego formatu binarnego, rozumianego przez procesor urządzenia docelowego. Dla Beaglebona, wraz z Debianem proponuję skorzystać z Toolchaina Linaro (do ściągnięcia z https://launchpad.net/linaro-toolchain-binaries, w przypadku wykorzystania jako hosta Linuxa, należy również doinstalować: libc6, libstdc++6, libncurses5, zlib1g; jeśli korzystasz z Windowsa zainstaluj MinGW lub cygwina). Gdy nasz system jest już gotowy, a binarki toolchaina leżą na dysku należy stworzyć nowy projekt w środowisku Eclipse i w opcjach projektu dokonać kilku zmian. W tym celu należy zmienić wykorzystywany kompilator oraz linker na te z toolchaina Linaro. Można dokonać tego w prosty sposób: prawoklik na projekt › Properties › C/C++ Build › Settings. W oknie należy zmienić ustawienia kompilatora oraz linkera – można tego dokonać zmieniając wpis w textboxie Command na wskazujący plik wykonywalny kompilatora. Jeśli umieściliście toolchaina w wersji 4.8 bezpośrednio na partycji C: i nie zmieniliście nazwy folderu to ścieżka dla kompilatora C++ powinna wyglądać następująco (dla linkera jest to dokładnie ta sama ścieżka):
C:\gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_win32\gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_win32\bin\arm-linux-gnueabihf-c++.exe
Kompilator C:
C:\gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_win32\gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_win32\bin\arm-linux-gnueabihf-c.exe
Po poprawnej konfiguracji możecie bez problemu skompilować projekt, a następnie wynikowy plik umieścić w urządzeniu docelowym po czym uruchomić program.
*Dzięki narzędziu xapt łatwe staje się korzystanie z dodatkowych bibliotek