Przygoda z NanoPi M1 – Wgrywanie systemuOkoło 8 minut

Tytułem wstępu – NanoPI w liczbach

NanoPi M1 to prosty, odrobinę już w tym momencie przestarzały minikomputer oparty na procesorze Allwinner H3 którego pełna specyfikacja jest dostępna na stronie. NanoPi

Wśród wielu udogodnień tego układu można wyróżnić między innymi:

  • 4 rdzenie ARM Cortex – A7 taktowane zegarem 1,2GHz
  • wsparcie technologii NEON Advanced SIMD odpowiedzialnej za przyspieszenie obliczeń (poprzez zrównoleglenie) wykonywanych na wektorach danych
  • znany z telefonów takich jak Samsung Galaxy J2 zintegrowany układ graficzny Mali400MP2
  • sprzętowy enkoder i dekoder H.264
  • silnik szyfrujący realizujący sprzętowo podstawowe algorytmy kryptograficzne takie jak: AES,DES,RSA,SHA
  • wbudowaną kartę sieciową pozwalającą na transfer z prędkością do 100Mbps

Układ ten wyposażono również w przydatne peryferia znane z mikrokontrolerów takie jak:

  • kontrolery I2C (I2S), UART, SPI, TWI
  • 6-bitowy przetwornik analogowo-cyfrowy
  • konroler CIR – „A flexible receiver fo IR remote” do obsługi pilotów na podczerwień. Jeszcze nie wiem jak to dokładnie na tym układzie działa 😀 i czy możliwe jest sprzętowe dekodowanie standardów komunikacji realizowanej przez wiodących producentów telewizorów ale chyba warto się temu przyjrzeć :/ .

Oprócz wspomnianego wcześniej „serca” płytki NanoPi wśród wlutowanych w nią elementów możemy dostrzec między innymi 1 GB pamięci DDR3, mikrofon wyjścia USB, HDMI, jack, microUSB (OTG).

Warto również zauważyć, że płytka ta będąca de-facto kompletnym minikompurem jest rozmiarem zbliżona do Arduino UNO, którego możliwości obliczeniowe są nieporównywalnie mniejsze. Maksymalny pobór mocy płytki NanoPi M1 wynosi 10W (5V i 2A) co czyni ją energooszczędną alternatywą dla systemów niewymagających dużych mocy obliczeniowych takich jak: radio internetowe, prosty serwer plików/wydruku, multimedialna przystawka do telewizora.

Wybór obrazu systemu

Producent NanoPi (z wykorzystaniem niezbyt profesjonalnego rozwiązania w postaci Google Drive) udostępnia do naszej dyspozycji kilka oficjalnie wspieranych obrazów systemów takich jak:

  • Debian Jessie
  • Friendly Core
  • Android

Friendly Core – jest wyposażonym tylko w interface konsolowy rozszerzeniem systemu UbuntuCore będącego odchudzoną wersją Ubuntu zaprojektowaną specjalnie z myślą o systemach wbudowanych. Obraz tego systemu może być szczególnie przydatny jeżeli chcemy postawić sobie prosty serwer WWW bądź samodzielnie skonfigurować ultra lekkie środowisko graficzne na przykład dla aplikacji dotykowej odsługującej stację pogodową domowej roboty.

Debian Jessie – cóż tu można napisać. Jest to kompletny, pełnoprawny system operacyjny z masą preinstalowanych aplikacji i narzędzi do rozpoczęcia przygody z NanoPi.

Dociekliwi zauważą, że mamy do dyspozycji obrazy zbudowane dla różnych wersji jądra 3.4.39 oraz 4.14.0. Według informacji zawartej na stronie producenta dla tego układu nowszy kernel posiada pewne problemy z akceleracją GPU co na dobrą sprawę może bardzo uprzykrzyć życie jeśli wykorzystujemy NanoPi na przykład do wyświetlania filmów HD. Bolączką starszego jadra są natomiast problemy z zarządzaniem energią i wynikająca z nich wysoka temperatura układu.

Wśród nieoficjalnie wspieranych obrazów możemy znaleźć między innymi obraz Ubuntu Mate, z którego korzystałem w kilku projektach.

Producent udostępnia również kod źródłowy systemu i instrukcję jak go zbudować.

Wartym przetestowania rozwiązaniem jest wykorzystanie dorobku projektu armbian dostarczającego bardziej aktualne dystrybucje.

Karta SD

Pobrany obraz systemu wgrywamy na kartę SD. W przypadku wyboru karty kluczowe znaczenie ma pojemność i szybkość. Jeśli chodzi o ten pierwszy parametr to każda karta o rozmiarze większym bądź równym 8GB powinna pozwolić na wgranie obrazu dowolnego systemu. Należy jednak pamiętać, że musi na niej pozostać miejsce na nasze dane 😮 . Większość obrazów na partycji systemowej zostawia kilkaset MB z myślą o naszych plikach. Jeżeli jednak planujemy stawiać serwer WWW lub przechowywać większe ilości danych może to okazać się za mało. Inną rzeczą o której musimy pamiętać jest to że NanoPi M1 może mieć problemy z obsługą kart o pojemności większej od 32 GB.

Drugi parametr nie jest już taki oczywisty. Ogólnie karty SD dzielą się na klasy szybkości o których więcej można poczytać na stronie SD Assotiation. Według zaleceń do swobodnego korzystania z NanoPi powinna wystarczyć karta klasy 10tej, a zatem o minimalnej prędkości zapisu 10MB/s. Niestety nas bardziej interesuje ten drugi parametr czyli szybkość odczytu, który nie jest jawnie definiowany przez standard. Producenci przeważnie podając dane dotyczące prędkości odczytu kart SD jednak należy przyjąć je z przymrużeniem oka. Dla wymagających aplikacji pozostaje nam cierpliwie przekopywać się przez testy opinie i benchmarki lub przyjąć niepisaną zasadę im droższa tym lepsza 😉 .

Czytając ostatni paragraf mogłeś nabrać wrażenia, że sytuacja jest patowa ale warto przyznać jedną rzecz, na każdej karcie nawet z klasy niższej od 10 system się uruchomi i powinien działać stabilnie. Ze swojej strony mogę jeszcze dodać, że moja karta o deklarowanej prędkości odczytu 95 MB/s pozwala na uzyskanie naprawdę przyzwoitej wydajności uruchamiania jak i działania systemu.

Wgrywanie obrazu

Procedura wgrywania systemu niczym się nie różni od tej obowiązującej dla RaspberryPi. Po podpięciu karty do komputera w pierwszej kolejności wypakowujemy obraz z archiwum. Następnie zależnie od systemu wybieramy urządzenie docelowe (karta) i ładujemy na nią obraz.

Na moim Ubuntu można to zrobić w 2 krokach:

  1. Znalezienie identyfikatora urządzenia (karty). W tym miejscu można posłużyć na przykład poleceniem lsblk zwracającym listę dostępnych urządzeń blokowych:

    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
        sdd      8:48   1  29,8G  0 disk 
        └─sdd1   8:49   1  29,8G  0 part /media/krzysztof/D6AB-34A6
        sdb      8:16   0 931,5G  0 disk 
        ├─sdb2   8:18   0   589G  0 part 
        └─sdb1   8:17   0 342,5G  0 part 
        sr0     11:0    1  1024M  0 rom  
        sdc      8:32   0 223,6G  0 disk 
        ├─sdc2   8:34   0     1K  0 part 
        ├─sdc5   8:37   0 223,1G  0 part /
        └─sdc1   8:33   0 475,9M  0 part 
        sda      8:0    0 223,6G  0 disk 
        ├─sda4   8:4    0   223G  0 part 
        ├─sda2   8:2    0   100M  0 part /boot/efi
        ├─sda3   8:3    0    16M  0 part 
        └─sda1   8:1    0   499M  0 part 
    

    Znając pojemność karty nie trudno się domyślić o które urządzenie może chodzić (sdd). Jeżeli masz jednak wątpliwości możesz porównać wyniki zawracane przez komendę z i bez karty. W przypadku pomyłki narażasz się na utratę danych na innych dyskach!!!

  2. Wgranie obrazu (sdX – identyfikator) – to chwilkę potrwa więc może warto rozprostować kości na przykład idąc po kawę:

        sudo dd bs=4M if=image_name.img of=/dev/sdX conv=fsync status=progress
    

Uruchomienie

Po pomyślnym zakończeniu procedury wsadzamy kartę SD do gniazda w NanoPi, podpinamy pozostałe okablowanie i obserwujemy jak nasz minikomputerek budzi się do życia.

Plany na przyszłość

W następnym poście chciałbym pokazać już bardziej praktyczne zagadnienia takie jak przekierowanie portów aby czas układzik był widoczny w internetach 😀 .