Pierwsze podejście do ODROID-XU3
ODROID-XU3 to obecnie najmocniejszy model oferowany przez koreańską firmę Hardkernel. Uzbrojony jest w 8 rdzeniowy procesor Exynos5422 z czterema rdzeniami Cortex A15 oraz dodatkowymi czterema Cortex A7. W przypadku rdzeni A15 zastosowano taktowanie zegarem 2GHz, natomiast A7 taktowane są zegarem 1.4GHz. Najciekawszą jednak technologią (oprócz big.LITTLE) jest tutaj HMP (Heterogeneous Multi-Processing), która umożliwia wykorzystywanie wszystkich ośmiu rdzeni w dowolnej konfiguracji, zwiększając wydajność systemu nawet o 20%. Nie ma tutaj więc sztywnego przydziału rdzeni na mniej lub bardziej wymagające zadania.
Hardkernel wypuścił również odchudzoną wersję ODRDOID-XU3 Lite, która posiada wolniejsze zegary taktowania 1.8GHz dla rdzeni A15 oraz 1.3GHz dla rdzeni A7. Została również pozbawiona portu DisplayPort i układów mierzączych pobór energii przez kluczowe podsystemy, takie jak procesor, pamięć i GPU.
Ubuntu 14.04.1 bez większych problemów
Na chwilę obecną jest dostępna dystrybucja Ubuntu 14.04.1 z jądrem 3.10.61. Nie zauważyłem żadnych większych problemów w jego działaniu. Bez obaw możemy dokonać aktualizacji systemu, nie martwiąc się o losy kolejnego restartu.
Wraz z Ubuntu 14.04.1, dostajemy dwa specjalne narzędzia: EnergyMonitor, który pozwala nam obserwować i mierzyć zapotrzebowanie na moc poszczególnych układów oraz ODROID Utility, za pomocą którego w łatwy sposób pobierzemy nowszą wersję jądra i ustawimy niektóre opcje.
Kilka testów na początek
W przypadku kompresji i dekompresji pliku BZIP oraz kompresji pliku WAV do MP3, ODROID-XU3 wypada odrobinę gorzej niż NVIDIA Jetson TK1. Różnice są praktycznie niezauważalne.
Sytuacja zmienią się w przypadku pomiaru prędkości nośnika eMMC. Prędkość odczytu ODROID-XU3 oscyluje w granicach 96MB/s, a w przypadku Jetsona wartość ta wynosi 79MB/s. Tak spora różnica wynika z zastosowanego nośnika eMMC, gdzie Hardkernel zastosował kości pamięci w wersji 5.0, natomiast NVIDIA w wersji 4.41.
Sytuacja odwraca się jednak przy Timing cached reads, gdzie Jetson pokazuje przewagę w zastosowanej pamięci DDR3L taktowanej zegarem 933MHz:
Zobaczmy zatem, jak wypadną wyniki testu OpenSSL Speed AES. Najpierw dla jednego rdzenia, a potem wszystkich dostępnych:
Niestety nawet dostępność HMP w ODROID-XU3, nie pozwoliło przegonić wyników jakie osiągnął Jetson TK1. Na koniec zobaczmy wyniki programu sysbench:
OpenGL / OpenGL ES 3.0 ?
Na tym polu ciężko porównać wyniki, ponieważ Jetson TK1 ma problem z programem glmark2-es2, a z kolei ODROID-XU3 nie obsługuje OpenGL. Wyniki zatem będą prawie na pewno nie do porównania. Ale, co tam.
Standardowo nie uda się uzyskać dobrych wyników, ponieważ sterowniki nie pozwalają przekroczyć 70 fps, uzyskując tym samym ogólny wynik 65 punktów.
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-T628
GL_VERSION: OpenGL ES 3.0
=======================================================
[build] use-vbo=false: FPS: 63 FrameTime: 15.873 ms
[build] use-vbo=true: FPS: 72 FrameTime: 13.889 ms
[texture] texture-filter=nearest: FPS: 71 FrameTime: 14.085 ms
[texture] texture-filter=linear: FPS: 71 FrameTime: 14.085 ms
[texture] texture-filter=mipmap: FPS: 71 FrameTime: 14.085 ms
[shading] shading=gouraud: FPS: 71 FrameTime: 14.085 ms
[shading] shading=blinn-phong-inf: FPS: 71 FrameTime: 14.085 ms
[shading] shading=phong: FPS: 71 FrameTime: 14.085 ms
[bump] bump-render=high-poly: FPS: 70 FrameTime: 14.286 ms
[bump] bump-render=normals: FPS: 72 FrameTime: 13.889 ms
[bump] bump-render=height: FPS: 72 FrameTime: 13.889 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 71 FrameTime: 14.085 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 71 FrameTime: 14.085 ms
[pulsar] light=false:quads=5:texture=false: FPS: 71 FrameTime: 14.085 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 62 FrameTime: 16.129 ms
[desktop] effect=shadow:windows=4: FPS: 67 FrameTime: 14.925 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 34 FrameTime: 29.412 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 34 FrameTime: 29.412 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 42 FrameTime: 23.810 ms
[ideas] speed=duration: FPS: 55 FrameTime: 18.182 ms
[jellyfish] <default>: FPS: 71 FrameTime: 14.085 ms
[terrain] <default>: FPS: 30 FrameTime: 33.333 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 71 FrameTime: 14.085 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 70 FrameTime: 14.286 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 71 FrameTime: 14.085 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 72 FrameTime: 13.889 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 70 FrameTime: 14.286 ms
=======================================================
glmark2 Score: 65
=======================================================
Dopiero pomiar w trybie --off-screen daje miarodajne rezultaty:
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-T628
GL_VERSION: OpenGL ES 3.0
=======================================================
[build] use-vbo=false: FPS: 796 FrameTime: 1.256 ms
[build] use-vbo=true: FPS: 926 FrameTime: 1.080 ms
[texture] texture-filter=nearest: FPS: 1009 FrameTime: 0.991 ms
[texture] texture-filter=linear: FPS: 1002 FrameTime: 0.998 ms
[texture] texture-filter=mipmap: FPS: 1018 FrameTime: 0.982 ms
[shading] shading=gouraud: FPS: 720 FrameTime: 1.389 ms
[shading] shading=blinn-phong-inf: FPS: 748 FrameTime: 1.337 ms
[shading] shading=phong: FPS: 675 FrameTime: 1.481 ms
[bump] bump-render=high-poly: FPS: 408 FrameTime: 2.451 ms
[bump] bump-render=normals: FPS: 1077 FrameTime: 0.929 ms
[bump] bump-render=height: FPS: 1001 FrameTime: 0.999 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 767 FrameTime: 1.304 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 261 FrameTime: 3.831 ms
[pulsar] light=false:quads=5:texture=false: FPS: 965 FrameTime: 1.036 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 180 FrameTime: 5.556 ms
[desktop] effect=shadow:windows=4: FPS: 400 FrameTime: 2.500 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 132 FrameTime: 7.576 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 128 FrameTime: 7.812 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 162 FrameTime: 6.173 ms
[ideas] speed=duration: FPS: 229 FrameTime: 4.367 ms
[jellyfish] <default>: FPS: 532 FrameTime: 1.880 ms
[terrain] <default>: FPS: 33 FrameTime: 30.303 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 940 FrameTime: 1.064 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 733 FrameTime: 1.364 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 919 FrameTime: 1.088 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 882 FrameTime: 1.134 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 676 FrameTime: 1.479 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 881 FrameTime: 1.135 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 882 FrameTime: 1.134 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 780 FrameTime: 1.282 ms
=======================================================
glmark2 Score: 662
=======================================================
glmark2 dla OpenGL ES 3.0 zwrócił ogólny wynik 662 punktów. Jak wspomniałem wcześniej, uruchomienie glmark2-es2 na Jetson TK1 kończy się wywrotką programu, ale doskonale za to działa glmark2 dla OpenGL. Zobaczmy jak wyniki będą wyglądać tutaj, po ustawieniu wszystkich rdzeni w tryb performance:
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: GK20A/NullRM/AXI
GL_VERSION: 4.4.0 NVIDIA 21.1
=======================================================
[build] use-vbo=false: FPS: 1739 FrameTime: 0.575 ms
[build] use-vbo=true: FPS: 3660 FrameTime: 0.273 ms
[texture] texture-filter=nearest: FPS: 2436 FrameTime: 0.411 ms
[texture] texture-filter=linear: FPS: 2459 FrameTime: 0.407 ms
[texture] texture-filter=mipmap: FPS: 2538 FrameTime: 0.394 ms
[shading] shading=gouraud: FPS: 1830 FrameTime: 0.546 ms
[shading] shading=blinn-phong-inf: FPS: 1790 FrameTime: 0.559 ms
[shading] shading=phong: FPS: 1764 FrameTime: 0.567 ms
[bump] bump-render=high-poly: FPS: 1595 FrameTime: 0.627 ms
[bump] bump-render=normals: FPS: 3215 FrameTime: 0.311 ms
[bump] bump-render=height: FPS: 3063 FrameTime: 0.326 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 520 FrameTime: 1.923 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 201 FrameTime: 4.975 ms
[pulsar] light=false:quads=5:texture=false: FPS: 1954 FrameTime: 0.512 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 223 FrameTime: 4.484 ms
[desktop] effect=shadow:windows=4: FPS: 409 FrameTime: 2.445 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 322 FrameTime: 3.106 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 299 FrameTime: 3.344 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 449 FrameTime: 2.227 ms
[ideas] speed=duration: FPS: 1106 FrameTime: 0.904 ms
[jellyfish] <default>: FPS: 466 FrameTime: 2.146 ms
[terrain] <default>: FPS: 49 FrameTime: 20.408 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 2166 FrameTime: 0.462 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1839 FrameTime: 0.544 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 2167 FrameTime: 0.461 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 2010 FrameTime: 0.498 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1719 FrameTime: 0.582 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 2012 FrameTime: 0.497 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 2010 FrameTime: 0.498 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1941 FrameTime: 0.515 ms
=======================================================
glmark2 Score: 1598
=======================================================
Wynik 1598 (!!) punktów robi wrażenie. Nie zapominajmy jednak, że układ graficzny zastosowany w Jetson TK1 to zupełnie inna bajka.
Wróćmy jednak do nośnika eMMC
Z reguły nie potrafię się przekonać do pomiarów programem hdparm. Dlatego sprawdziłem to jeszcze raz, bardziej naturalną metodą. Oczywiście wiemy już, że zastosowane pamięci eMMC 5.0 w ODROID XU3 przełożą się na lepsze wyniki.
time sh -c "dd if=/dev/zero of=/home/file bs=4k count=200000 && sync"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 12.1435 s, 67.5 MB/s
real 0m13.767s
user 0m0.100s
sys 0m6.300s
sync ; sh -c 'echo 3 > /proc/sys/vm/drop_caches'
time sh -c "dd if=/home/file of=/dev/zero bs=4k count=200000"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 6.6226 s, 124 MB/s
real 0m6.635s
user 0m0.055s
sys 0m2.200s
Oraz dla Jetson TK1:
time sh -c "dd if=/dev/zero of=/home/file bs=4k count=200000 && sync"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 17.9846 s, 45.5 MB/s
real 0m19.686s
user 0m0.216s
sys 0m6.588s
sync ; sh -c 'echo 3 > /proc/sys/vm/drop_caches'
time sh -c "dd if=/home/file of=/dev/zero bs=4k count=200000"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 10.2501 s, 79.9 MB/s
real 0m10.352s
user 0m0.125s
sys 0m2.101s
Prędkości odczytu 124MB/s vs. 79MB/s oraz zapisu 67MB/s vs.45 MB/s. Widać tutaj doskonale różnicę pomiędzy eMMC 5.0 i eMMC 4.41.
W przypadku Jetsona nie jest to jednak kluczowy problem, ponieważ możemy podłączyć dysk twardy bezpośrednio pod kontroler SATA, gdzie dla dysku HDD uzyskujemy wynik 88 MB/s podczas zapisu oraz 107 MB/s podczas odczytu. Oczwiście podłączenie dysku SSD to już inna historia :)
Podsumowanie
ODROID-XU3 nabyłem głównie pod kątem HTPC do pokoju dziennego, aby zastąpił wysłużonego już ODROID-X2. Pomimo tego, że Linux działa tutaj zaskakująco dobrze, to na chwilę obecną nie uraczymy niestety XBMC / Kodi z obsługą akceleracji sprzętowej. Tutaj zdecydowanie lepiej sprawdzi się Jetson TK1 z pełną obsługą OpenGL, który poradzi sobie nawet z bitrate 120Mbps oraz materiałem 4K. Za jakiś czas pewnie się to zmieni, ale póki co ODROID-y zawsze pozostaną dla mnie sprzętem szytym pod Androida - chyba, że myślimy o zastosowaniach serwerowych... no dobra, mini-serwerowych :)
Jak wypadnie Android na ODROID-XU3? O tym dowiecie się z kolejnego odcinka.
Reklama
Nowy MarsBoard A20 z układem Allwinner A20
HAOYU Electronics wypuściła na rynek kolejną płytkę, opartą o dwurdzeniowy procesor Allwinner A20 ARM Cortex-A7 Dual-Core taktowany zegarem 1GHz - mowa tutaj o New MarsBoard A20, któremu przyjrzymy się bliżej dzięki uprzejmości sklepu ArduinoSolutions. Tak jak w innych konstrukcjach tego typu, za grafikę odpowiada układ graficzny Mali400MP2 obsługujący standard OpenGL ES 2.0.
New MarsBoard A20 został wyposażony w 1GB pamięci DRAM taktowanej zegarem 480MHz oraz 8GB pamięci Flash. Cechą szczególną jest wbudowana karta WiFi RTL8188EU oraz port SATA. Do płytki możemy również przylutować odbiornik podczerwieni IR (nie ma go w zestawie). Jeśli chodzi o dostępne złącza, to do dyspozycji dostajemy: 4x USB 2.0, 1x USB 2.0 OTG, 1x DEBUG, 10/100 Mbps port Ethernet z układem LAN8710A, slot kart pamięci microSD, wyjście audio oraz wejście mikrofonowe.
Płytkę możemy podłączyć za pomocą pełnowymiarowego złącza HDMI lub standardowego złącza VGA. Jeśli istnieje taka potrzeba, możemy skorzystać również z 7" dotykowego panelu TFT LCD HU070CTP-HD obsługującego rozdzielczość 1024x600. Jakość obrazu oraz działanie 10 punktowego dotyku jest tutaj o niebo lepsze, niż w przypadku opisywanego już modelu HY070CTP-A z rozdzielczością 800x480.
Ciekawym dodatkiem są gniazda TV In oraz TV Out, pozwalające na podłączenie zewnętrznego źródła obrazu CVBS oraz dedykowana aplikacja pod system Android umożliwiająca jego wyświetlenie. Niestety nie udało mi się zmusić tego elementu do działania, ponieważ program miał wyraźny problem z odbiorem sygnału, wyświetlając jedynie niebieski obraz.
New MarsBoard A20 udostępnia również dwa porty rozszerzeń, gdzie jeden z nich jest przeznaczony do obsługi kamer CIF, natomiast drugi stanowi port rozszerzeń I/O.
Ogromnym rozczarowaniem jest jednak port SATA - pomimo tego, że jest, podłączenie dysku twardego wymaga zewnętrznego źródła zasilania. Na osłodę dostajemy jednak owtorzy montażowe, których w RK3066 nie doświadczyliśmy :)
New MarsBoard A20 / MarsBoard RK3066
Najsłabsze ogniwo - system operacyjny
Jeśli chodzi o dostępne oprogramowanie, to stanowi one obecnie najsłabszą stronę nowego Marsa. Należy jednak zwrócić szczególną uwagę na to, że jest to platforma nowa, która premierę miała w czerwcu i wiele może się jeszcze zmienić. Zresztą podobna sytuacja była w przypadku MarsBoard RK3066 kiedy opisywałem ją po raz pierwszy. Dziś jest dostępna już pełna dystrybucja Ubuntu Trusty 14.04 LTS ze środwiskiem LXDE, ze sprzętową akceleracją graficzną układu Mali oraz obsługą ekranów LCD HY070CTP-A/HD z dotykiem. Ale wróćmy do tematu.
Na chwilę obecną dostępne są trzy dystrybucje Linuksa: Debian Wheezy 7.1 (LXDE), Ubuntu 12.10 (Lubuntu) oraz Raspbian Debian Wheezy (LXDE). Wielką zaletą w nowym MarsBoard jest Dual-Boot, dzięki któremu mamy możliwość wypalenia ich na karcie SD pozostawiając system w pamięci NAND nietkniętym. Ubuntu jako jedyne obsługuje panel dotykowy (Debian również działa z ekranem LCD, ale bez dotyku), ale repozytorium jest w całkowitej rozsypce, co dyskwalifikuje go do sensownego użytku. Debian wygląda już dużo lepiej, bowiem można doinstalować wymagane oprogramowanie. Natomiast żadna dystrybucja nie obsługuje wspomnianego wejścia/wyjścia video oraz nie wspiera akceleracji OpenGL ES.
Debian Wheezy 7.1 / Rasbian Debian Wheezy
O Androidzie 4.2.2, można powiedzieć tylko, że jest. Nie udało mi się zainstalować na nim Google Play i oferowanego przez niego oprogramowania.
Testy porównawcze
NewMars Board A20 to sprzęt zbliżony możliwościami do CubieTruck i trudno oczekiwać czegoś innego. Obie platformy oparte są o ten sam procesor. Za Marsem przemawia jednak prawie dwukrotna niższa cena i genialny dotykowy wyświetlacz, co pozwala na wykorzystanie go w mniejszych, niskobudżetowych projektach. Jeśli tylko producent dopracuje oprogramowanie, będzie to bardzo interesująca platforma w przyzwoitej cenie.
Porównanie parametrów
Sprzęt do testu dostarczył sklep ArduinoSolutions.
ODROID-U3 najciekawszy członek rodziny Odroidów?
Na łamach mojego Bloga pojawiły się już dwa komputerki z rodziny ODROID-ów - mianowice 4-rdzeniowy ODROID-X2 oparty o układ SoC Exynos 4412 oraz 8-rdzeniowy ODROID-XU wyposażony w jednostkę SoC Exynos 5410 obsługujący technologię big.LITTLE. W ofercie firmy Hardkernel jest jeszcze jeden bardzo ciekawy i często niedoceniany model oznaczony symbolem U3 (nowsza wersja wcześniejszego U2). Dla wielu osób, w tym mnie, jest to chyba najbardziej ciekawy i wszechstronny model, kosztujący zaledwie 65$, a więc odrobinę drożej niż bardzo popularny Raspberry Pi.
Podobnie jak jednostka ODROID-X2, został on wyposażony w układ Exynos4412 Prime Cortex-A9 Quad taktowany częstotliwością 1.7GHz z akceleratorem graficznym Mali-400 i 2GB pamięci RAM. W tym modelu zdecydowano się na chłodzenie pasywne, jednak istnieje możliwość wymiany radiatora na wersję z wentylatorem. To co wyróżnia U3 to niewątpliwie rozmiar wynoszący jedynie 83 x 48 mm oraz wyprowadzenie portów I/O do złącz, które pozwalają na podłączenie dedykowanych rozszerzeń, takich jak: I/O Shield, UPS Shield, Show Shield.
ODROID-U3 posiada również 3 porty USB 2.0, gniazdo Ethernet 10/100Mbps, port HDMI, wyjście słuchawkowe, czytnik katy microSD oraz eMMC. Jedynie czego nie znajdziemy w tym modelu, to gniazda do podłączenia ekranu LCD.
Dwie wersje ODROID-U3 v0.2 i v0.5
Kupując ODROID-U3 zwróć uwagę na jego wersję, bowiem wielu sprzedawców oferuje jeszcze jego starszą wersję oznaczoną numerem v0.2. Od nowszej wersji v0.5 różni się brakiem wyprowadzenia magistrali SPI oraz mocowaniem radiatora. Niemałą różnicą w nowszej wersji, jest również zdolność pracy portu USB w trybie OTG. Wersję 0.5 można również rozpoznać po nadruku ODROID-U3+. Posiadanie nowszej wersji niesie za sobą jeszcze szereg zalet, ale o tym dalej.
ODROID-U3 (po lewo wersja v0.2 / po prawo wersja v0.5)
Akcesoria
Wybór dedykowanych akcesoriów jest bardzo spory, w skład których wchodzą między innymi: karta sieciowa Wi-Fi Realtek RTL8188CUS 802.11n, moduł Bluetooth CSR V2.1 EDR, karta pamięci eMMC oparta o 19nm kości NAND Toshiby, wentylator o prędkości obrotowej 4000rpm zasilany napięciem 5V, moduł USB-UART, bateria CR2032 3V o pojemności 220mAH do podtrzymywania działania zegara RTC, zasilacz 5V/2A oraz kamera 720p z 1Mpix sensorem CMOS Novatek NY99140 i kontrolerem SONIX SN9C259.
Karta eMMC 16GB
Czytnik kart eMMC
Moduł BT (HCI)
Karta Wi-FI USB
Bateria RTC 3V
Moduł USB-UART
Radiator z wentulatorem
Na stronie producenta, znajdziemy jeszcze szereg innych dodatków w postaci shieldów - zasilania awaryjnego UPS, wyświetlacza LCD, czy I/O shielda przynosząca dobrodziejstwa platformy Arduino. Ale o tym za chwilę...
Ubuntu 14.04 Trusty Dev Center
Aktualna wersja Ubuntu 14.04 Trusty Dev Center (18/05/2014) jest naprawdę konkretna. Zawiera jądro w wersji 3.8.13.18, sterowniki Mali r4p0 do obsługi OpenGL ES2 oraz serwer Xorg z nałożonymi łatkami dla sterownika armsoc, co znacznie przyśpiesza działanie samego pulpitu.
Wiele osób powinna ucieszyć obecność dostosowanego Gstreamera do sprzętowego dekodowania materiału video za pomocą MFC/FIMC, więc materiały w rozdzielczości 1080p nie stanowią już żadnego problemu. Natomiast na osoby chcące przerobić U3 na centrum multimedialne, a nie przepadających za Androidem (swoją drogą, dostępna jest wersja 4.4.4), czeka XBMC 13.1 Gotham, który sprawuje się jak żyleta.
Więcej informacji na temat tej dystrybucji znajdziecie na forum społeczności Hardkernel.
U3 I/O Shield
U3 I/O Shield to genialna nakładka na ODROID-U3 wyposażona w mikrokontroler ATMEGA328P. Jest ona w pełni zgodna programowo z Arduino UNO, która po wpięciu do U3 jest od razu dostępna pod portem szeregowym ttyACM99. Dzięki temu możemy ją programować bezpośrednio z Arduino IDE. Gdyby tego było mało, dostajemy również expander I2C TCA6416A, który daje nam kolejne 16 portów GPIO, mogących pracować z napięciami od 1.65V do 5.5V, gdzie możemy oddzielnie dobrać napięcia po stronie portów jak i szyny SDA/SCL - oznacza to, że z automatu dostajemy dwukierunkowy konwerter poziomów logicznych.
Jeśli posiadamy nowszą wersję ODROID-U3+ (rev. 0.5) oraz I/O Shield (rev. 0.3), otrzymujemy jeszcze dostęp do sprzętowej magistrali SPI podłączonej do szeregowej pamięci Flash o pojemności 2Mbit (256kB).
Dla majsterkowiczów - żyć, nie umierać!
U3 I/O przed zamontowaniem
Nieśmiertelny przykład blink.ino
Niebieska dioda jako LED13
Porównanie parametrów
CubieTruck - prawdziwy smok z układem Allwinner A20
Przez moje łapska przewinęło się już kilka płytek opartych o układ SoC Allwinner A10/A20, ale tym razem, mam dla Was prawdziwego smoka - CubieTruck lub jak kto woli Cubieboard3. Dzięki ponownej uprzejmości sklepu ArduinoSolutions mam okazję przyjrzeć się mu z bliska.
CubieTruck zapakowany jest w solidne kartonowe pudełko, które zawiera płytkę jak i niezbędne akcesoria. Znajdziemy w nim kabel USB OTG, przyklejany radiator, kabel SATA, akrylowe plexi, zestaw miedzianych kołków dystansowych oraz przejściówkę zasilającą DC«»USB.
CubieTruck wyposażony jest dwurdzeniowy układ AllWinnerTech A20 (ARM® Cortex™-A7) z układem graficznym Mali400 MP2 wspierającym OpenGL ES 2.0. Do dyspozycji dostajemy 2GB pamięci RAM DDR3 taktowaną częstotliwością 480MHz. W komunikacji ze światem pomoże nam port Ethernet 10M/100M/1G oraz wbudowana karta WiFi oraz Bluetooth z wewnętrzną anteną. Płytka została także wyposażona w port SATA 2.0 oraz linię zasilania 5V dla dysków 2.5". Możliwe jest również podłączenie dysku 3.5", jednak będziemy potrzebowali oddzielnego źródła zasilania 12V.
Jeśli chodzi o gniazda to znajdziemy tutaj 2x USB, 1x OTG (do wypalania wbudowanej pamięci NAND o rozmiarze 8GB) oraz optyczne gniazdo SDPIF. Bardzo cieszy również odbiornik podczerwieni IR oraz gniazdo słuchawkowe. Na płytce umieszczono również baterię litową do podtrzymywania zegara RTC.
Robotycy również znajdą coś dla siebie. Na 54 pinach dwóch portów rozszerzeń dostępne są takie szyny jak: I2S, I2C, SPI, CVBS, LRADC, UART, PS2, PWM, TS/CSI, IRDA oraz TVIN. Wszystko to na płytce o rozmiarze 11 cm x 8 cm.
Montaż
Zlożenie całości zajmuje niewiele czasu i jest kompletnie bezproblemowe. Do jednej z akrylowych plexi możemy przymocować dysk twardy i umieścić go na samym spodzie konstrukcji. Jest to naprawdę fajne rozwiązanie, ponieważ nie musimy się martwić, że coś nam wysunie i zniszczy podczas transportu i użytkowania.
Na koniec pozostaje nam już tylko przymocować CubieTruck, założyć akrylową osłonę oraz podłąćzyć dysk twardy.
Instalacja programu LiveSuit
Aby zainstalować system w pamięci NAND z poziomu Linuksa będziemy potrzebowali programu LiveSuit, który możemy pobrać stąd (zarówno w wersji 32-bitowej jak i 64-bitowej). Jeśli korzystacie z Ubuntu/Debiana wystarczy uruchomić program instalacyjny LiveSuit.run, który skompiluje odpowiedni moduł jądra oraz wgra program do katalogu domowego ~/LiveSuit.
- # chmod +x LiveSuit.run
- # sudo LiveSuit.run
Jeśli korzystacie natomiast z dystrybucji, której nie wspiera instalator (np. Slackware), należy wypakować zawartość i skompilować moduł jądra samodzielnie:
- # tail -n +60 LiveSuit.run > LiveSuit.tar.bz2
- # tar xjvf LiveSuit.tar.bz2
- # cd LiveSuit
- # rpm2cpio awdev-0.5-1dkms.noarch.rpm | cpio -idmv
- # cd usr/src/awdev-0.4
- # make
Otrzymamy w ten sposób plik awusb.ko, który kopiujemy do katalogu modułów jądra i wydajemy polecenie depmod
- # sudo cp awusb.ko /lib/modules/*wersja*jadra*/misc/
- # sudo depmod
- # sudo modprobe awsusb
Instalacja systemu
Do wyboru mamy sporą ilość dystrybucji Linuksa - ArchLinux, Cubian, Debian, Fedora, Lubuntu oraz Ubuntu. Wszystko co musimy zrobić to pobrać interesujący nas obraz, wypakować oraz wgrać go pamięci NAND za pomocą programu LiveSuit. W tym celu uruchamiamy LiveSuit, wybieramy rozpakowany obraz w formacie img i podłączamy CubieBoard poprzez port USB OTG trzymając jednocześnie przycisk FEL. Po podłączeniu zasilania, LiveSuite powinien zacząć wgrywać obraz do pamięci NAND.
Uruchomienie systemu
Po kilku chwilach uruchamia się wybrany przez nas system. Ja na początek wybrałem Ubuntu Desktop.
Na pierwszy "rzut" postanowiłem sprawdzić wydajność dysku podłączonego pod port SATA oraz pamięci NAND.
Wygląda zachęcająco - średnia prędkość odczytu z dysku twardego to około 80MB/s w porównaniu do 10MB/s dla pamięci NAND. Widoczny pik 160MB/s spowodowany jest właściwością dysku twardego Seagate Momentus XT, który wyposażony jest 8GB pamięci SSD.
Jak przeprowadzić się z system na dysk?
Booloader nie pozwala na bezpośrednie uruchomienie jądra z innego miejsca niż pamięć NAND, dlatego musimy przenieść tylko system plików rootfs na wybrany przez nas dysk. Po ówczesnym założeniu partycji na dysku, musimy skopiować system plików z pamięci NAND na wybraną partycję. Ja na wstępne testy, utworzyłem tylko jedną partycję sda1.
Postępujemy dalej następująco:
- # sudo dd if=/dev/nandb of=/dev/sda1 bs=1M
- # resize2fs -f /dev/sda1
Na koniec musimy wyedytować plik bootujący na partycji /dev/nanda
- # sudo mount /dev/nanda /mnt
- # sudo vi /mnt/uEnv.txt
Na początek dopisujemy do linii parametrów rootdelay=3 oraz zamieniamy wpis nand_root=/dev/nanda na nand_root=/dev/sda1
Zapisujemy i restartujemy :)
- # sudo umount /mnt
- # sudo sync
- # sudo reboot
Po restarcie mamy już uruchomiony system z dysku twardego.
Kilka uwag na koniec
CubieTruck to kawałek dobrego sprzętu, który idealnie nada się zastosowania sieciowe w naszej sieci domowej. Gigabitowy port Ethernet oraz możliwość podłączenia dysku SATA daje niemałe możliwości. Oczywiście nielubiany układ graficzny Mali400 nie uraduje wszystkich zainteresowanych, jednak uzyskanie akceleracji sprzętowej do odtwarzania filmów jest możliwe - pokazałem to na przykładzie własnej dystrybucji Sunflower dla Iteaduino Plus A10. Z tego co zauwazyłem dystrybucja Fedora 20 korzysta już ze sterownika fbturbo i posiada wszelkie niezbędne moduły jądra do akceleracji sprzętowej video. Warto również zaznacznyć, że w przypadku Cubieboardów działa prężnie działająca społeczność zgromadzona na forum dyskusyjnym oraz jest dostępna obszerna dokumentacja.
Jeśli macie jakieś pytania odnośnie Cubietruck chętnie sprawdzę to dla Was, a w między czasie "ugotuję" własną dystrybucję!
Sprzęt do testu dostarczył sklep ArduinoSolutions.
MarsBoard RK3066. Część 3: Debian 7.2, openSUSE 12.3, Ubuntu Server 12.06
Nie minęło wiele czasu, a producent MarsBoard RK3066 przygotował trzy nowe dystrybucje współpracujące z tym mini komputerem ARM. Zanim jednak przejdę do tego tematu, chciałbym przypomnieć dystrybucję PicUntu 0.9 RC2.2 (Ubuntu Qantal 12.10), która borykała się z problemem działania karty sieciowej Ethernet. Wraz z nowymi dystrybucjami Debian 7.2, openSUSE 12.3 i Ubuntu Server 12.06 udostępniono również nową wersję PicUntu z odświeżonym firmware V2.13, który definitywnie rozwiązał ten problem. Od teraz, oprócz HDMI, możemy skorzystać z ekranu dotykowego HY070CTP-A i sterownika ft5x06 LCD touch. Dodano również możliwość dostępu do GPIO poprzez sys/gpio oraz możliwość przesyłania dźwięku przez HDMI kodekiem RTL5631. Pojawiły się również dodatkowe sterowniki urządzeń USB - kamer, myszek i klawiatur..
openSUSE 12.3
Dystrybucja bazuje na kompilacji openSUSE-12.3-ARM-XFCE-rootfs.armv7l-1.12.1-Build49.1. Podczas pierwszego uruchomienia powita nas tekstowy konfigurator YaST2, pozwalający na ustawienie między innymi języka, nazwy użytkownika i haseł. Zalecane jest korzystanie z partycji SWAP o minimalnym rozmiarze 512MB w celu uniknięcia przycinek systemu. Warto wyłączyć również wygaszacz ekranu, ponieważ ma on problemy z powrotem do pulpitu. System działa bardzo przyzwoicie, a domyślnym środowiskiem jest XFCE.
Debian 7.2
Miłośnicy Debiana również powinni być zadowoleni. Debian 7.2 "Wheezy" oraz środowisko graficzne LXDE to jeden z najczęstszych wyborów przy instalacji na mini komputerach ARM
Ubuntu Server 12.06
Dla tych, którzy nie planują korzystania z powłok graficznych, a głównym celem jest postawienie małego serwera w domu, przygotowano Ubuntu Server 12.06, bazującą na Linaro 12.06. Wśród preinstalowanego oprogramowania znajdziemy: Apache2 2.2.22, Bind 9.8.1, GCC 4.6.3, mySQL 5.5, Perl 5.14.2, PHP 5.3.10, Python 2.7.3 oraz wszystkie niezbędne elementy do postawienia "marsjańskiego" serwera :) Pominięto tutaj kompletnie powłokę graficzną.
Sprzęt do testu dostarczył sklep ArduinoSolutions.