Aktualizacja Arduino YUN

Arduino YUN jest ciekawy połączeniem Arduino z komputerem działającym pod kontrolą Linuxa. Jako taki korzysta z zalet systemu operacyjnego, ale oznacza to np też konieczność aktualizacji.

Co to jest Arduino YUN?

Arduino YUN jest ciekawym połączeniem Arduino Leonardo z minikomputerem działającym pod kontrolą OpenWRT (odmiana Linuxa). Jako taki korzysta z zalet systemu operacyjnego, ale jednocześnie staje się podatny na problemy dotąd nieznane wśród użytkowników Arduino.

Arduino YUN

Jakiś czas temu dosyć głośno było o błędzie w popularnej bibliotece OpenSSL. Błąd ten był na tyle poważny, że otrzymał własną nazwę - Heartbleed. Co ważne, w Arduino YUN również wykorzystywana jest biblioteka OpenSSL. Na szczęście od niedawna dostępny jest nowy obraz systemu dla Arduino Yun w którym załatano m.in OpenSSL oraz poprawiono więcej rzeczy.

Ten dokument jest przewodnikiem po tym jak przeprowadzić aktualizację oraz przedstawia kilka wartościowych wskazówek ogólnie dotyczących Arduino YUN.

Co nowego?

Aktualizacja nie tylko poprawiła błąd Heartbleed, z istotniejszych zmian dla użytkownika możemy wymienić:

  1. wget od teraz wspiera SSL - można ściągać dane z zabezpieczonych stron,
  2. Poprawione fusebity w run-avrdude - nie powinny się zdarzać przypadki zablokowania Atmega32u4 przy wgrywaniu kodu przez WiFi
  3. Nowy edytor tekstowy dostepny w podstawowej konfiguracji - nano. Vi jest potężnym edytorem, ale każdy kto próbował wytłumaczyć komuś nie mającemu z nim wcześniej doświadczenia jak przeprowadzić prostą edycję pliku konfiguracyjnego, wie jaka to zaleta mieć nano pod ręką
  4. ruby w wersji 1.9.3-p429
  5. Poprawiono stabilność portu USB
  6. Poprawiony skrypt od DHCP, w celu naprawienia routingu ethernetu
  7. Dodano obsługę wielu modułów kamer internetowych
  8. Oczywiście - naprawiono bug Heartbleed (http://pl.wikipedia.org/wiki/Heartbleed)
  9. Nowa funkcjonalność: po załadowaniu Linuxa świeci się dioda USB. Ładownie się części linuksowej trochę trwa i zawsze trzeba było zgadywać czy to już? Od tej wersji gdy system linux jest gotowy do pracy, dioda USB świeci na biało.
  10. Dodano skrypt upgrade-all w celu łatwiejszego aktualizowania zainstalowanych na YUN pakietów (tylko jeżeli system plików YUN jest rozszerzony o kartę microSD: http://arduino.cc/en/Tutorial/ExpandingYunDiskSpace )
  11. Node.js od teraz dostępny jako gotowy pakiet do instalacji - ułatwia to pisanie aplikacji korzystających z tego frameworka

Czy trzeba przeprowadzić aktualizację, czyli jak sprawdzić wersję Arduino YUN

Najpierw sprawdźmy jaką wersję systemu na Arduino YUN posiadamy. Zakładamy, że podstawowa konfiguracja Arduino YUN jest już za nami.

Logujemy się do Arduino po SSH (w Windowsie będziemy potrzebować np. PuTTY)

    root@Arduino:~# uname -a
    Linux Arduino 3.8.3 #8 Mon Aug 19 16:22:39 CEST 2013 mips GNU/Linux

    root@Arduino:~# cat /etc/openwrt_release
    DISTRIB_ID="Linino"
    DISTRIB_RELEASE="devel"
    DISTRIB_REVISION="unknown"
    DISTRIB_CODENAME="barrier_breaker"
    DISTRIB_TARGET="ar71xx/generic"
    DISTRIB_DESCRIPTION="Linino Barrier Breaker devel"

    root@Arduino:~# cat /etc/openwrt_version
    devel

Jeżeli wynik polecenia uname -a będzie zawierał rok 2013, to wiemy, że mamy starą wersję.

Aktualizacja

Będziemy potrzebowali karty microSD na którą wrzucimy firmware. Strona na której będą publikowane przyszłe uaktualnienia znajduje się na stronie projektu Arduino: arduino.cc
Wersja firmware, o którym obecnie mowa jest tam wymieniona i do pobrania stąd: downloads.arduino.cc

Karta powinna być sformatowana w systemie FAT32. Po pobraniu firmware rozpakowujemy archiwum i wgrywamy otrzymany plik na kartę. Kartę wsadzamy do Arduino, podłączamy zasilanie i łączymy się po WiFi (zakładamy, że YUN jest skonfigurowany domyślnie, jeżeli Twój egzemplarz jest skonfigurowany inaczej, podłącz się odpowiednio do tego jak go skonfigurowałeś).

UWAGA !

Aktualizacja firmware powoduje reset do ustawień fabrycznych, także jeżeli masz działające aplikacje na YUN lub własną konfigurację - zrób kopię wszystkich ustawień i danych!

Po połączeniu się z siecią wpisujemy w pasku przeglądarki: arduino.local lub 192.168.240.1 (jeżeli YUN było skonfigurowane to albo będzie potrzeba zresetować je do ustawień fabrycznych lub podłączyć się w sposób odpowiedni do istniejącej konfiguracji). Wpisujemy hasło i jeżeli wszystko zrobiliśmy dobrze, to naszym oczom powinien ukazać się panel sterowania.

Panel sterowania

Klikamy przycisk RESET, dioda WLAN powinna zacząć mrugać z dużą częstotliwością, w tym czasie powinniśmy widzieć taką mniej więcej stronę:

Upgrade trwa

Odczekujemy ok. 3 minuty (czekamy aż dioda WLAN przestanie mrugać) i możemy cieszyć się nową wersją systemu. Aby upewnić się, logujemy się przez SSH i sprawdzamy:

    root@Arduino:~# uname -a
    Linux Arduino 3.3.8 #1 Sat May 17 17:36:39 CEST 2014 mips GNU/Linux
    root@Arduino:~# cat /etc/openwrt_release
    DISTRIB_ID="OpenWRTYun"
    DISTRIB_RELEASE="1"
    DISTRIB_REVISION="r40431"
    DISTRIB_CODENAME="attitude_adjustment"
    DISTRIB_TARGET="ar71xx/generic"
    DISTRIB_DESCRIPTION="OpenWRTYun Attitude Adjustment 1"
    root@Arduino:~# cat /etc/openwrt_version
    1

Tips & Tricks

Szeregowa konsola OpenWrt na YUN

Czasami chcielibyśmy mieć podgląd tego, co dzieje się w trakcie uruchamiania Arduino. Jako że w Arduino Yun siedzi Linux (trochę okrojony, ale jednak) to mamy możliwość podglądu procesu bootowania przez konsolę szeregową. Wystarczy wrzucić na Arduino przykładowy szkic, dostarczany z biblioteką Bridge: YunSerialTerminal (powinien znajdować w menu File/Examples/Bridge/YunSerialTerminal w IDE 1.5)

Po załadowaniu szkicu na Arduino wciskamy przycisk YUN RST (obok LEDów) i odpalamy serial monitor. Fajną sprawą jest to, że możemy normalnie używać systemu, np. skonfigurować system, gdyż monitor z Arduino IDE zostanie podłączony do konsoli szeregowej linuxa, ATmega32u4 będzie służyła jako pośrednik). Żeby móc wpisywać komendy musimy zmienić sposób w jaki terminal pracuje z “No line ending” na “Newline” w monitorze portu szeregowego.

Twardy reset do ustawień fabrycznych

Na koniec ciekawostka: czasem może się zdarzy że nie jesteśmy w stanie zresetować Arduino przyciskiem WLAN RST (normalnie stanie się tak po przytrzymaniu go przez 30 sekund). Dlaczego? Jeżeli system plików (dysk flash) na YUN jest pełny, ta operacja się nie powiedzie. Może się nam to przydarzyć jeżeli np zainstalujemy za dużo pakietów na naszym Arduino YUN

Co powinniśmy zrobić? Można spróbować odinstalować pakiety jeżeli jeszcze mamy dostęp do urządzenia przez SSH. A co jeżeli już nie? Należy użyć powyższego sposobu na połączenie się z Arduino po konsoli szeregowej. Gdy system się załadował naciskamy enter (pamiętając o konieczności zmiany zachowania monitora portu szeregowego na naciśnięty enter), przewinie się banner OpenWrt i powinien pojawić się znak # Wtedy wpisujemy:

cd /usr/bin
./reset-to-factory-anyway

Po wykonaniu powyższych kroków mamy Arduino przywrócone do ustawień fabrycznych.

Rozszerzenie systemu plików na kartę microSD

Wcześniej już wspominaliśmy o opcji rozszerzenia systemu plików na kartę microSD arduino.cc/en/Tutorial/ choć właściwsze byłoby chyba nazwanie tego wymianą systemu plików na system na karcie microSD.

YUN ma wbudowaną pamięć flash, gdzie znajduje się system OpenWRT. Jednak ta pamięć jest ograniczona. Nie tylko pojemność, ale również jego trwałość. Pamięć flash ma ograniczoną liczbę zapisów i jeżeli będzie ona intensywnie wykorzystywana przez OpenWRT może się to skończyć jej uszkodzeniem. Przeniesienie całego systemu OpenWRT na kartę microSD pozwala zarówno zwiększyć ilość miejsca dla aplikacji na OpenWRT działającym na YUN jak zabezpieczyć się przed skutkami uszkodzenia pamięci - kartę microSD można wymienić w razie problemów, z wbudowaną pamięcią nie ma takiej możliwości.