SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

W końcu dotarła do mnie długo wyczekiwana platforma deweloperska, którą bez wątpienia można nazwać superkomputerem w segmencie Embedded - a mianowicie NVIDIA Jetson TK1. Od strony sprzętowej mamy tutaj bardzo mocny układ SoC Tegra TK1 wykorzystujący cztery rdzenie Cortex-A15 taktowany zegarem 2.32GHz w architekturze NVIDIA 4-Plus-1. Jednak prawdziwą bombą jest rdzeń graficzny oparty o architekturę NVIDIA Kepler (GK20a), uzbrojony w 192 rdzenie CUDA. Pozwala to osiągnąć wydajność na poziomie 300 GFLOPS, dla porównania układ Mali-T628 MP6 zastosowany w procesorach Exynos5422 osiąga połowę mniej, bo 146 GFLOPS. Układ SoC chłodzi radiator oraz przymocowany 1.3W wentylator, zasilany napięciem 12V.

Na płycie znajdziemy również 2GB pamięci DDR3L taktowanej zegarem 933MHz oraz 16GB pamięci eMMC 4.51. Jetson TK1 został również wyposażony w gigabitowy port Ethernet wykorzystujący układ Realtek RTL8111GS, jeden port USB 3.0 oraz jeden port micro-USB 2.0, który możemy wykorzystać jako standardowy port USB dzięki dołączonemu adapterowi.

Ogromnie cieszy port SATA oraz gniazdo mini-PCIe, do którego możemy wpiąć  karty rozszerzeń, takie jak: karty Wi-Fi, dyski SSD, modemy 3G, kontrolery SATA RAID, kontrolery USB itd.  Za dźwięk odpowiada układ ALC5639.

Jeśli chodzi o dodatkowe złącza, to wymienić można port szeregowy RS232, wyjście audio, wejście mikrofonowe, gniazdo HDMI 1.4, czytnik kart SD, port JTAG oraz 125 pinowy port rozszerzeń udostępniający następujące porty:

  • dwa szybkie porty kamer CSI-2 MIPI (4-torowy i 1-torowy),
  • port LCD obsługujący panele LVDS i eDP,
  • porty dotykowe SPI (4-torowy oraz 1-torowy CSI-2),
  • UART,
  • HSIC,
  • trzy porty I2C,
  • osiem pinów GPIO (logika 1.8V)

Dodatki

Ponieważ Jetson TK1 posiada gniazdo mini-PCIe, warto również zaopatrzyć się kartę sieciową Wi-Fi. Do testów skombinowałem Intel Centrino Wireless-N 2230 oraz Athreos AR5B95, wraz z różnymi antenami. Niestety karty sieciowe nie działają out-of-box, ponieważ niezbędna będzie ponowna kompilacją jądra.

Okazuje się, że konieczne jest również dokupienie kabla zasilającego do zasilacza, ponieważ w komplecie dostarczony jest z wtyczką amerykańską. Natomiast aby wykorzystać port micro-USB 2.0 jak dodatkowy port, zaopatrzmy się również w adapter micro-USB na USB (żenskie). Problemem może okazać się tylko jeden port USB 3.0 w standardowym rozmiarze, jeśli nie posiadamy klawiatury i myszki z odbiornikiem Unifying, niezbędne będzie podłączenie aktywnego huba USB.

Linux For Tegra R19.2, czyli Ubuntu 14.04

Jetsona TK1 wyróżnia w pełni wspierane sprzętowo standardy CUDA 6.0, OpenGL 4.4, OpenGL ES 3.1, NPP, EGL 1.4, OpenCV4Tegra oraz VisionWorks. Wszystko to pod Linuksem z jądrem 3.10.24 i pełną obsługą X11 oraz RandR 1.4. Domyślnie zainstalowana jest dystrybucja Ubuntu 14.04 ze środowiskiem Unity. Podczas pracy rdzenie procesora są usypiane w razie potrzeby, ograniczając tym samym pobór prądu.


Oczywiście możemy włączyć na stałe wszystkie cztery rdzenie oraz ustawić profil na performance:

Dekodowanie filmów 1080p odbywa się bez zajęknięcia. Jeśli kogoś interesuje XBMC, to również nie ma z nim najmniejszych problemów.  Co ciekawe - XBMC wykorzystuje Open GL ES.

Porównanie z innymi platformami

NVIDIA Jetson w działaniu

Porównanie parametrów

  ODROID-XU ODROID-XU3 Jetson TK1
   
Procesor Exynos 5410 Exynos5422 Tegra TK1
Rodzina ARM Cortex A15
ARM Cortex A7 big.LITTLE
ARM Cortex A15
ARM Cortex A7 big.LITTLE
HMP
ARM Cortex A15
NVIDIA 4-Plus-1
Zegar procesora  1.6 GHz 2.0 GHz 2.32 GHz
Liczba rdzeni 8 8 4 + 1
Układ graficzny PowerVR SGX 544MP
76 GFLOPS
Mali-T628 MP6
142 GFLOPS
NVIDIA Kepler (GK20a)
300 GFLOPS
Zegar grafiki 640 MHz 695 MHz 933 MHz
OpenGL ES 2.0 3.0 3.1
OpenGL nie nie 4.4
OpenVG 1.1 b/d ??
OpenCL 1.1 1.1 ??
CUDA nie nie 6.0
 Pamięć RAM  2048 MB 2048 MB 2048 MB
 USB 2.0  Tak (4x)  Tak (4x) Tak (1x)
USB 3.0 Tak (1x) Tak (1x) Tak (1x)
USB 3.0 OTG Tak (1x) Tak (1x) Nie
 HDMI Tak Tak Tak
DisplayPort Tak Tak Nie
eMMC Tak
Version 4.5
Tak
Version 5.0
Tak
Version 4.51
microSD Tak Tak Nie
SDHC Nie Nie Tak
10/100/1000 Ethernet Tak / Tak / Nie Tak / Tak / Nie Tak / Tak / Tak
IO Ports 30 pinów
GPIO, IRQ, SPI, ADC
30 pinów
GPIO, IRQ, SPI, ADC
125 pinów
GPIO, I2C, CSI, UART
LCD panel Tak
MIPI
Nie Tak
MIPI / LVDS
Wymiary   69.80 x 94 mm 94 x 70 mm 127 x 127 mm

Reklama

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

Zasilacz 5V / 2A
Obudowa
Kamera 720p 1Mpix

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

  ODROID-X2 ODROID-U3 ODROID-XU
   
Procesor Exynos 4412 Exynos 4412 Exynos 5410
Rodzina ARM Cortex A9 ARM Cortex A9 ARM Cortex A15
ARM Cortex A7 big.LITTLE
Zegar procesora  1,7 GHz  1,7 GHz  1,6G Hz
Liczba rdzeni 4 4 8
Układ graficzny ARM Mali-400
34 GFLOPS
ARM Mali-400
34 GFLOPS
PowerVR SGX 544MP
76 GFLOPS
Zegar grafiki 440 MHz 440 MHz 640 MHz
OpenGL ES 2.0 2.0 2.0
OpenVG 1.1 1.1 1.1
OpenCL Nie Nie 1.1
 Pamięć RAM 2048 MB 2048 MB  2048 MB
 USB 2.0 Tak (6x)   Tak (3x)  Tak (4x)
USB 3.0 Nie Nie Tak (1x)
USB 3.0 OTG Nie Nie Tak (1x)
 HDMI Tak Tak Tak
DisplayPort NIe Nie Tak
eMMC Tak
Version 4.41
Tak
Version 4.41
Tak
Version 4.5
microSD Nie Tak Tak
SDHC Tak Nie Nie
10/100 Ethernet Tak Tak Tak
IO Ports 50 pinów
LCD, I2C, UART, SPI, ADC, GPIO
12 pinów
GPIO, UART, I2C, SPI
30 pinów
GPIO, IRQ, SPI, ADC
LCD panel Tak
LVDS / RGB
Nie Tak
MIPI
Wymiary    90 x 94 mm 83 x 48 mm  69.80 x 94 mm

Hardkernel zapowiedział nowego ODROIDa oznaczonego symbolem XU3. Jednostka ta wykorzystuje 8 rdzeniowy procesor Exynos5422 z czterema rdzeniami Cortex A15 oraz Cortex A7, taktowanymi zegarem 2GHz. Exynos5422 wspiera technologię big.LITTLE wraz z systemem system HMP (Heterogeneous Multi-Processing), który umożliwia wykorzystywanie wszystkich 8 rdzeni w dowolnej konfiguracji zwiększając wydajność nawet o 20%.

W przypadku ODROID-XU, który również posiada 8 rdzeni wygląda to tak, że pierwszy czterordzeniowy Cortex A15 odpowiada za obsługę wymagających aplikacji, natomiast drugi Cortex A7 wykorzystywany jest przez mniej wymagające aplikacje. Dzięki systemowi HMP nie będzie miało to już żadnego znaczenia. Drugą zasadniczą różnicą pomiędzy modelem XU, a XU3 jest zastosowanie akceleratora graficznego Mali-T628 MP6, wspierającego OpenGL ES 3.0/2.0/1.1 oraz OpenCL 1.1.

ODRDOID-XU3 wyposażony jest w 2GB pamięci LPDDR3 RAM, taktowanej zegarem  933MHz, co pozwoli na osiągnięcie przepustowości na poziomie 14.9GB/s. Zdecydowano się również na szybsze  pamięci NAND eMMC w wersji 5.0. Deklarowany, sekwencyjny odczyt to 198MB/s oraz zapis na poziomie 74MB/s.

Jeśli chodzi o dostępne porty, to dostajemy do dyspozycji 2 porty USB 3.0 (jeden pracujący w trybie hosta oraz jeden w trybie OTG) oraz 4 porty USB 2.0. Standardowo mamy już możlwiość podłączenia ODROID-a za pomocą gniazda micro-HDMI obsługującego rozdzielczość do 1920x1080 i/lub gniazda DisplayPort1.1 obsługującego rozdzielczość do 3840x2160. Oba gniazda mogą pracować jednocześnie w trybie Dual Head.


Zdecydowano się również na zintegrowane czujniki poboru mocy wszystkich elementów płytki - Big CPU, Little CPU, GPU oraz pamięci DRAM. Dotychczas taki wariant było dostępny jedynie w rozszerzonej wersji ODROID-XU+E.  Na płytce znajdziemy również port Ethernet 10/100Mbps, wyjście słuchawkowe, slot kart pamięci microSD oraz 30 pinowy port rozszerzeń I/O.

ODROID-XU3 został wyceniony na 179$. W ten cenie dostajemy płytkę bazową, 4A zasilacz 5V oraz obudowę. Pierwsze zamówienia realizowane będą już 18 sierpnia 2014. Natomiast w okolicach grudnia 2014 zostanie przedstawiona odchudzona wersja, która ma kosztować poniżej 100$.

Porównanie parametrów

  ODROID-X2 ODROID-XU ODROID-XU3
   
Procesor Exynos 4412 Exynos 5410 Exynos5422
Rodzina ARM Cortex A9 ARM Cortex A15
ARM Cortex A7 big.LITTLE
ARM Cortex A15
ARM Cortex A7 big.LITTLE
HMP
Zegar procesora  1.7 GHz  1.6 GHz 2.0 GHz
Liczba rdzeni 4 8 8
Układ graficzny ARM Mali-400
34 GFLOPS
PowerVR SGX 544MP
76 GFLOPS
Mali-T628 MP6
142 GFLOPS
Zegar grafiki 440 MHz 640 MHz 695 MHz
OpenGL ES 2.0 2.0 3.0
OpenVG 1.1 1.1 b/d
OpenCL Nie 1.1 1.1
 Pamięć RAM 2048 MB  2048 MB 2048 MB
 USB 2.0 Tak (6x)    Tak (4x)  Tak (4x)
USB 3.0 Nie Tak (1x) Tak (1x)
USB 3.0 OTG Nie Tak (1x) Tak (1x)
 HDMI Tak Tak Tak
DisplayPort NIe Tak Tak
eMMC Tak
Version 4.41
Tak
Version 4.5
Tak
Version 5.0
eMMC
Read / Write
44 / 28 MB/s 117 / 56 MB/s 198 / 74 MB/s
microSD Nie Tak Tak
SDHC Tak Nie Nie
10/100 Ethernet Tak Tak Tak
IO Ports 50 pinów
LCD, I2C, UART, SPI, ADC, GPIO
30 pinów
GPIO, IRQ, SPI, ADC
30 pinów
GPIO, IRQ, SPI, ADC
LCD panel Tak
LVDS / RGB
Tak
MIPI
Nie
Wymiary    90 x 94 mm  69.80 x 94 mm 94 x 70 mm

Jakiś czas temu stałem się posiadaczem karty AVerMedia Live Gamer HD Lite do przechwytywania sygnału HDMI w rozdzielczości FullHD z prędkością 30fps. Głównie mam ją zamiar wykorzystywać do nagrywania materiałów z mini komputerów z układami SoC (Odroid/Marsboard/Cubieboard itp.), gdzie nagrywanie obrazu bezpośrednio z uruchomionego systemu jest praktycznie niemożliwe.

Na upartego problem mnie nie dotyczył, ponieważ zawsze mogę przełączyć się na Windowsa i tam nagrać materiał bezpośrednio z karty graficznej czy dowolnego urządzenia, ale problem pojawił się, gdy chciałem przechwycić w miarę płynny film z pulpitu Linuksa pod większym obciążeniem. Dodatkowo, każdy kto próbował nagrać rozgrywkę gry wykorzystującej OpenGL i tryb pełnoekranowy wie, że to droga przez mękę, która w większości przypadków kończy się niepowodzeniem lub fatalną ilością klatek na sekundę. Gdyby AVerMedia Live Gamer HD / Lite był obsługiwany pod Linuksem, nie było by w ogóle tematu, a tak trzeba sobie jakoś radzić na około. Z pomocą przychodzi nam wirtualizacja.

Wymagania

Do tej sztuczki będzie nam potrzebny procesor z obsługą AMD-VI/VT-D oraz jądro 2.15 z włączoną obsługą IOMMU / KVM oraz nałożoną łatką acs override. Oczywiście nie obejdzie się bez 64-bitowego Windowsa 7 lub 8 i QEMU 2.0. Jeśli macie pecha tak jak ja i posiadacie na płycie głównej kontroler SATA Marvel 88SE91xx to napotkacie problem z dostępem DMA przy włączonej opcji iommu.

  1. ata8: SATA max UDMA/133 abar m2048@0xfa310000 port 0xfa310180 irq 48
  2. ata8: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
  3. ata8.00: qc timeout (cmd 0xec)
  4. ata8.00: failed to IDENTIFY (I/O error, err_mask=0x4)
  5. ata8: SATA link up 6.0 Gbps (SStatus 133 SControl 300)

Problem można rozwiązać wyłączając ten kontroler w BIOS-ie (jeśli z niego nie korzystacie, ja niestety mam podłączony pod niego trzeci dysk twardy) lub nakładając łatki dma-alias-v4. Dlaczego o tym wspominam? Po pierwsze, możesz posiadać taki kontroler na swojej płycie. Po drugie, problem ten może pojawić się z innymi specyficznymi urządzeniami. Zalecam zatem sprawdzić na początek działanie iommu tylko z nałożoną łatką acs override. Osobiście nie doświadczyłem negatywnych skutków działania tej łaty na innych systemach, nawet kiedy nie jest potrzebna.

Uruchomienie jądra z obsługą IOMMU i ACS

Do parametrów tak skompilowanego jądra dołączamy następujące opcje:

intel_iommu=on pci-stub.ids=1af2:a001 pcie_acs_override=downstream

Jeśli posiadasz procesor AMD to intel_iommu zamieniamy na amd_iomu. Użyty identyfikator 1af2:a001 to VendorID oraz ProductID naszej karty. Zweryfikować to można za pomocą polecenia lspci:

  1. # lspci
  2. 02:00.0 Unassigned class [ff00]: Device 1af2:a001

W ten sposób "odłączamy" ją z systemu hosta. Sprawdźmy zatem, czy po ponownym uruchomieniu wszystko jest jak należy:

  1. dmesg | grep dmar
  2. [    0.049835] dmar: Host address width 36
  3. [    0.049839] dmar: DRHD base: 0x000000fed91000 flags: 0x1
  4. [    0.049848] dmar: IOMMU 0: reg_base_addr fed91000 ver 1:0 cap c9008020660262 ecap f0105a
  5. [    0.049851] dmar: RMRR base: 0x000000bf4cc000 end: 0x000000bf4eefff
  1. # dmesg | grep -i iommu
  2. [    0.000000] Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA
  3. [    0.000000] Intel-IOMMU: enabled
  4. [    0.049848] dmar: IOMMU 0: reg_base_addr fed91000 ver 1:0 cap c9008020660262 ecap f0105a
  5. [    0.049921] IOAPIC id 0 under DRHD base  0xfed91000 IOMMU 0
  6. [    0.243132] IOMMU 0 0xfed91000: using Queued invalidation
  7. [    0.243135] IOMMU: Setting RMRR:
  8. [    0.243144] IOMMU: Setting identity map for device 0000:00:1a.0 [0xbf4cc000 - 0xbf4eefff]
  9. [    0.243163] IOMMU: Setting identity map for device 0000:00:1d.0 [0xbf4cc000 - 0xbf4eefff]
  10. [    0.243173] IOMMU: Prepare 0-16MiB unity mapping for LPC
  11. [    0.243180] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]
  1. # dmesg | grep pci-stub
  2. [   14.574603] pci-stub: add 1AF2:A001 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
  3. [   14.574615] pci-stub 0000:02:00.0: claimed by stub

Podłączenie karty AVerMedia Live Gamer HD

Istnieje kilka sposobów podłączenia tej karty. Zalecana metoda to połączenie karty graficznej kablem HDMI do wejścia Input, a monitora do wyjścia Output.

Ja podłączyłem monitor bezpośrednio do karty graficznej kablem DVI, a na obu systemach ustawiłem tryb pracy klonowania. W ten sposób mam ten sam obraz na obu wyjściach, pozostawiając wciąż wolne HDMI w monitorze.

Bindowanie karty do vfio-pci

W następnej kolejności musimy przypisać naszą kartę do vfio-pci. Dla ułatwienia możemy posłużyć się skryptem avermedia.sh

  1. #!/bin/bash
  2.  
  3. modprobe vfio-pci
  4.  
  5. dev=0000:02:00.0
  6. vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  7. device=$(cat /sys/bus/pci/devices/$dev/device)
  8.  
  9. if [ -e /sys/bus/pci/devices/$dev/driver ]; then
  10.     echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  11. fi
  12.  
  13. echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id

Zwróć uwagę na zmienną dev zawierającą ciąg 0000:02:00.0  - powinna zwierać identyfikator Twojej szyny PCI do której wpięta jest karta AVerMedia (sprawdzaliśmy to poleceniem lspci)

Uruchamiamy powyższy skrypt:

  1. # chmod 755 +x avermedia.sh
  2. # avermedia.sh

Dla ułatwienia, możemy dodać ten skrypt do rc.local, aby wykonywał się automatycznie przy starcie systemu.

Uruchomienie QEMU

Zakładam, że nie masz jeszcze zainstalowanego Windowsa, więc tworzymy sobie na początek 20GB dysk twardy,

  1. # dd if=/dev/zero of=windows.img bs=1M seek=20000 count=0

Następnie instalujemy Widnowsa:

  1. #qemu-system-x86_64
  2.     -enable-kvm
  3.     -M q35
  4.     -m 2048
  5.     -cpu host
  6.     -smp 2,sockets=1,cores=2,threads=1
  7.     -bios /usr/share/qemu/bios.bin
  8.     -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1
  9.     -device vfio-pci,host=02:00.0,bus=root.1,addr=00.0,multifunction=on
  10.     -drive file=windows.img,id=disk,format=raw
  11.     -device ide-hd,bus=ide.0,drive=disk
  12.     -drive file=cdwin.iso,id=isocd
  13.     -device ide-cd,bus=ide.1,drive=isocd
  14.     -display sdl -sdl

Dobór parametrów pamięci, ilość dostępnych rdzeni i wątków procesora pozostawiam Wam, ponieważ jest to kwestia indywidualna, zależna od procesora i ilości pamięci RAM jaką posiadamy. Tutaj ponownie sprawdźcie, czy parametr -device vfio-pci,host posiada odpowiedni identyfikator szyny PCI hosta.

Uruchomienie i instalacja sterowników

Po uruchomieniu systemu zobaczymy w menadzerze urządzeń naszą kartę:

Po zainstalowaniu sterowników ze strony producenta, urządzenie powinno być w pełni widoczne:

Teraz nie pozostaje nam już nic innego, jak rozpocząć nagrywanie:

Przykład nagrywania rozgrywki z Anomaly Defenders

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.

  1. # chmod +x LiveSuit.run
  2. # 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:

  1. # tail -n +60 LiveSuit.run > LiveSuit.tar.bz2
  2. # tar xjvf LiveSuit.tar.bz2
  3. # cd LiveSuit
  4. # rpm2cpio awdev-0.5-1dkms.noarch.rpm | cpio -idmv
  5. # cd usr/src/awdev-0.4
  6. # make

Otrzymamy w ten sposób plik awusb.ko, który kopiujemy do katalogu modułów jądra i wydajemy polecenie depmod

  1. # sudo cp awusb.ko /lib/modules/*wersja*jadra*/misc/
  2. # sudo depmod
  3. # 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:

  1. # sudo dd if=/dev/nandb of=/dev/sda1 bs=1M
  2. # resize2fs -f /dev/sda1

Na koniec musimy wyedytować plik bootujący na partycji /dev/nanda

  1. # sudo mount /dev/nanda /mnt
  2. # 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 :)

  1. # sudo umount /mnt
  2. # sudo sync
  3. # 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.