< BLOG >

Zdalne aktualizacje urządzeń embedded

05.12.2024Tomasz Szewczyk
...

Aktualizacje oprogramowania

Współczesne rozwiązania embedded, od trackerów IoT po zaawansowane przemysłowe systemy wbudowane, w coraz większym stopniu polegają na oprogramowaniu. Wprowadzenie funkcji umożliwiających aktualizację oprogramowania przez użytkownika po wyprodukowaniu urządzenia stało się standardem, który przynosi ogromne korzyści biznesowe i technologiczne. Dla producentów nowych urządzeń embedded wdrożenie odpowiednich mechanizmów aktualizacji może być decydującym czynnikiem przewagi konkurencyjnej.

Naprawa błędów bez wizyty w serwisie

Możliwość zdalnej naprawy oprogramowania znacząco zmniejsza ryzyko związane z dostarczeniem klientowi urządzenia z błędem w oprogramowaniu. Eliminuje to konieczność przeprowadzania akcji serwisowej lub wysyłania serwisanta do klienta. To znacząco redukuje koszty wsparcia technicznego i zwiększa satysfakcję użytkowników.

Na przykład wiele nowoczesnych urządzeń jest dostarczanych z aplikacją mobilną, która przeprowadza aktualizację oprogramowania podczas pierwszego uruchomienia urządzenia po wyjęciu z pudełka, tak zwanego provisioningu. Dzięki temu użytkownik od razu otrzymuje pełnowartościowy sprzęt z usuniętymi wszystkimi dotychczas znanymi błędami, pomimo że urządzenie mogło być wyprodukowane wiele miesięcy przed pierwszym użyciem.

Dodawanie nowych funkcjonalności oraz szybka adopcja nowych wersji

Zdalne aktualizacje umożliwiają wprowadzanie nowych funkcjonalności do już wyprodukowanych i sprzedanych urządzeń, co może przyciągnąć nowych klientów lub zwiększyć zadowolenie obecnych użytkowników. To również doskonała okazja do sprzedaży płatnych aktualizacji i uzyskania dodatkowego źródła przychodów.

Dodatkowo, łatwa, szybka i wygodna ścieżka aktualizacji oprogramowania zachęca użytkowników do korzystania z najnowszej wersji. Nowe funkcjonalności oraz poprawa jakości istniejących funkcji również przekonują użytkowników do samodzielnego aktualizowania urządzeń. Dzięki temu większa część sprzętu działa na najnowszej, najbardziej dopracowanej wersji, co obniża koszty wsparcia i utrzymania starszych wersji.

Rozpoczęcie produkcji przed zakończeniem developmentu

Dzięki możliwości automatycznej aktualizacji zdalnej lub wykonywanej przez użytkownika możliwe jest zlecenie produkcji urządzeń bez konieczności ukończenia finalnej wersji oprogramowania. Wystarczy, że oprogramowanie będzie wystarczająco rozwinięte, aby umożliwić aktualizację do pożądanej wersji przed pierwszym użyciem przez użytkownika.

Proces produkcji i dystrybucji urządzeń zwykle trwa nawet kilka miesięcy, a w tradycyjnym podejściu te dwa kroki muszą odbywać się w odpowiedniej kolejności. Wykorzystanie możliwości przeprowadzenia aktualizacji po wyprodukowaniu urządzenia pozwala zrównoleglić cały proces. Zyskany czas można przeznaczyć na skrócenie czasu wprowadzenia produktu na rynek (time to market) lub na rozwój dodatkowych funkcjonalności.

Aktualizacja w świecie embedded

Klasyczne podejście do wgrywania oprogramowania do pamięci mikrokontrolera polega na programowaniu z użyciem dedykowanego programatora. Takie rozwiązanie znajduje zastosowanie głównie na etapie produkcji oraz podczas developmentu. Zaletą tego podejścia jest również możliwość naprawienia urządzenia z uszkodzoną pamięcią, czyli tak zwanego "zbrickowanego".

Niestety, ze względu na konieczność użycia specjalistycznego sprzętu, metoda ta nie jest praktyczna, gdy operatorem ma być sam użytkownik. Dlatego w praktyce stosuje się inne, bardziej dostępne rozwiązania.

Aktualizacja przewodowa

Jednym z najprostszych rozwiązań jest aktualizacja przewodowa, która zazwyczaj umożliwia przeprowadzenie procesu przez port szeregowy lub port USB. Dzięki temu użytkownik może wykonać operację z użyciem swojego własnego sprzętu. Czasami spotyka się również rozwiązanie wykorzystujące pamięci USB, takie jak pendrive.

Zaletą tego rodzaju rozwiązań jest niski dodatkowy koszt implementacji, szczególnie w sytuacjach, gdy urządzenie nie ma innego interfejsu komunikacyjnego, który mógłby zostać wykorzystany do aktualizacji. Jedynym narzędziem, jakiego potrzebuje użytkownik do przeprowadzenia aktualizacji, jest komputer z gniazdem USB.

Aktualizacja bezprzewodowa

Jeżeli urządzenie dysponuje łącznością bezprzewodową, można wykorzystać ten kanał komunikacji do przeprowadzenia aktualizacji oprogramowania. Zwykle jest to sposób najwygodniejszy dla użytkownika.

Dla urządzeń wyposażonych w Bluetooth dobrym rozwiązaniem jest dodanie funkcjonalności aktualizacji oprogramowania do towarzyszącej aplikacji mobilnej. Takie podejście daje duże możliwości poprawy doświadczenia użytkownika (UX). Aplikacja, nad którą kontrolę ma producent urządzenia, pozwala zautomatyzować proces pobierania najnowszej wersji oprogramowania z serwerów oraz umożliwia wygodne powiadamianie użytkownika o dostępności nowej aktualizacji. Pasek postępu, szacunkowy czas do zakończenia oraz zawartość marketingowa to dodatkowe elementy, które mogą wzbogacić aplikację mobilną.

Urządzenia bezpośrednio łączące się z internetem, np. poprzez WiFi, LTE, LoRa i inne, umożliwiają przeprowadzenie aktualizacji zupełnie automatycznie, bez udziału użytkownika. Jest to bardzo dobre rozwiązanie dla aplikacji działających w trudno dostępnych lub odległych miejscach, takich jak farmy wiatrowe czy stacje pogodowe.

Zaawansowane scenariusze

Niektóre zaawansowane protokoły komunikacji bezprzewodowej umożliwiają przeprowadzenie bardzo ciekawych procedur aktualizacji urządzeń, które są do nich podłączone. Jednym z takich rozwiązań jest Bluetooth Mesh, w którym urządzenia przekazują nową wersję oprogramowania między sobą, bez konieczności łączenia się z centralnym urządzeniem. Dzięki temu nowe oprogramowanie może dotrzeć do każdego węzła w sieci, nawet tych znajdujących się poza bezpośrednim zasięgiem.

Proces zaczyna się od przesłania informacji o dostępnej aktualizacji, którą urządzenia sprawdzają pod kątem zgodności i potrzeby instalacji. Firmware jest następnie rozsyłany w małych fragmentach, które przemieszczają się przez całą sieć dzięki pośrednictwu innych urządzeń. Gdy wszystkie fragmenty dotrą do odbiorcy, oprogramowanie jest składane w całość, sprawdzane pod kątem poprawności i instalowane. Największym atutem takiego rozwiązania jest jego skalowalność. Dzięki propagacji przez całą sieć możliwe jest zaktualizowanie tysięcy urządzeń jednocześnie, bez obciążania jednego punktu.

Przydatne definicje

DFU (Device Firmware Update) - Proces aktualizacji firmware'u urządzenia, który zazwyczaj odbywa się z pomocą bootloadera i umożliwia instalację nowego oprogramowania bez konieczności programowania urządzenia od podstaw.

OTA (Over-the-Air) - Aktualizacja oprogramowania urządzenia przez sieć bezprzewodową, bez konieczności fizycznego podłączenia, np. przez Wi-Fi, Bluetooth lub sieci komórkowe.

OTAU (Over-the-Air Update) - Rozszerzenie pojęcia OTA, podkreślające, że chodzi o pełny proces aktualizacji oprogramowania, od przesłania nowej wersji do instalacji na urządzeniu.

FOTA (Firmware Over-the-Air) - Specyficzny rodzaj OTA, dotyczący wyłącznie firmware'u - podstawowego oprogramowania kontrolującego działanie sprzętu.

DFU w urządzeniach low-power IoT

Zasada działania aktualizacji oprogramowania jest podobna dla wszystkich mikrokontrolerów, które umożliwiają uruchamianie jedynie aplikacji bare-metal lub systemu RTOS. Przykładowymi rodzinami takich urządzeń są: Nordic nRF, STM32, ESP32 i inne. Ze względu na brak systemu operacyjnego, odpowiedzialność za przeprowadzenie procesu bezpośrednio w pamięci urządzenia spoczywa na programiście.

Bootloader

Do przeprowadzenia aktualizacji firmware'u niezbędny jest bootloader. Jest to specjalny program, który uruchamia się podczas startu urządzenia, a następnie inicjuje właściwą aplikację. Bootloader jest osobną aplikacją przechowywaną w pamięci urządzenia.

Zazwyczaj bootloader nie może zostać zaktualizowany, ponieważ po zapisaniu na urządzeniu przez producenta staje się niezmienialny. Dzięki tej właściwości można w nim bezpiecznie przechowywać klucze kryptograficzne. Bootloader może być wykorzystywany do weryfikacji podpisu cyfrowego aplikacji za pomocą kryptografii klucza publicznego.

Podpis cyfrowy służy do weryfikacji pochodzenia aplikacji na urządzeniu. Aby umożliwić aktualizację z podpisem cyfrowym, producent generuje klucz prywatny, z którego powstaje powiązany klucz publiczny. Podczas produkcji klucz publiczny jest wgrywany do bootloadera, natomiast aktualizacje są podpisywane kluczem prywatnym. Gdy urządzenie otrzyma aktualizację, bootloader może zweryfikować jej autentyczność, sprawdzając zgodność podpisu z kluczem publicznym zapisanym w urządzeniu. Takie zabezpieczenie jest kluczowe ze względu na ryzyko podmiany aplikacji podczas procesu aktualizacji.

Dodatkowe zabezpieczenia

Bootloader może oferować również inne zabezpieczenia, np. uniemożliwiać uruchomienie starszej wersji oprogramowania niż obecnie zainstalowana na urządzeniu.

Niezawodność

W przypadku nieplanowanego przerwania aktualizacji podczas jej trwania lub omyłkowego wgrania nieprawidłowego obrazu aplikacji, może dojść do zablokowania urządzenia, uniemożliwiając odbiór kolejnego obrazu. Aby zapewnić niezawodność procesu oraz umożliwić pobieranie aktualizacji firmware'u podczas działania aplikacji, pamięć urządzenia jest dzielona na sloty, w których przechowywane są aktualny i nowy obraz aplikacji. Jeżeli po pobraniu aplikacji okaże się, że podpis jest nieprawidłowy, obraz jest uszkodzony lub aplikacja nie uruchamia się, wciąż możliwy jest powrót do poprzedniego obrazu.

Zastosowanie mechanizmu z dwoma slotami powoduje, że ilość pamięci dostępnej na aplikację w urządzeniu spada o połowę. Jeśli okaże się, że ilość dostępnej pamięci jest zbyt mała, możliwe jest zastosowanie kompresji jednego z obrazów lub dynamicznego partycjonowania pamięci urządzenia. W przypadku, gdy cała pamięć mikrokontrolera musi zostać wykorzystana na aplikację, możliwe jest również przechowywanie nowego obrazu w zewnętrznej pamięci FLASH.

Elastyczność

Różne konfiguracje procesu umożliwiają przeprowadzenie aktualizacji w skomplikowanych przypadkach. Możliwe jest odebranie aktualizacji dla innych mikrokontrolerów poprzez wybrany kanał za pośrednictwem głównego mikrokontrolera. Obrazy mogą być również wykorzystywane do aktualizacji modemu lub kodeka audio, a także mogą zawierać inne dane, np. informacje dotyczące tłumaczenia aplikacji.

Aplikacja mobilna

Jeżeli urządzenie nie ma możliwości pobrania aktualizacji bezpośrednio z internetu, ale jest wyposażone w Bluetooth, możliwe jest przeprowadzenie bezprzewodowej aktualizacji firmware'u za pomocą aplikacji mobilnej producenta urządzenia. W aplikacji mogą zostać zaimplementowane różne dodatkowe funkcjonalności wspomagające użytkownika, takie jak automatyczne pobieranie aktualizacji i powiadomienia. Możliwe jest również uzależnienie możliwości aktualizacji od rozliczenia z użytkownikiem.

Aktualizacja jest możliwa zarówno z urządzeń z Androidem, jak i ze sprzętu Apple. Pomimo że obie platformy wymagają osobnej implementacji, zazwyczaj nie jest konieczne tworzenie osobnych aplikacji na iOS i Androida. Możliwe jest stworzenie aplikacji hybrydowej, w której większość kodu będzie współdzielona między platformami. Przykładami technologii aplikacji hybrydowych są Flutter i React Native.

Backend

Część aplikacji, która działa na serwerze producenta urządzenia to backend. Kolejne wersje oprogramowania muszą być udostępniane online. Możliwe jest również zbieranie statystyk dotyczących procesu aktualizacji wszystkich wyprodukowanych urządzeń. Jeżeli do przeprowadzenia aktualizacji niezbędna jest autoryzacja użytkownika, backend odpowiada również za przechowywanie danych kont użytkowników oraz rozliczenia.

Infrastruktura, na której działa aplikacja serwerowa, może być utrzymywana jako fizyczny serwer w siedzibie producenta lub na wirtualnym serwerze u dowolnego dostawcy usług chmurowych. Oznacza to, że w zależności od potrzeb możliwe jest tanie utrzymywanie niewielkiego serwera lub szybkie skalowanie rozwiązania do całego klastra w przypadku konieczności obsługi bardzo dużego ruchu.

CICD

Wykonywanie zdalnych aktualizacji oprogramowania wymaga szczególnej uwagi od zespołu developerskiego. Podjęcie decyzji o wysłaniu aktualizacji do użytkownika wiąże się z koniecznością przetestowania, czy aktualizacja nie pogorszy działania docelowego urządzenia. Niezbędne jest również przeprowadzenie wielu innych powtarzalnych czynności, takich jak udostępnienie nowego obrazu aplikacji.

Aby zapobiec błędom i obniżyć koszty przeprowadzania aktualizacji, konfigurujemy system Continuous Integration i Continuous Delivery (CI/CD). Zbiór skryptów automatyzujących różne zadania, testy automatyczne oraz odpowiednia organizacja pracy zapewniają, że aplikacja działa poprawnie po każdej aktualizacji i umożliwiają częste wydawanie kolejnych wersji oprogramowania.

Jak to wygląda w bluesBrackets?

Specjalizujemy się w budowaniu rozwiązań mobilnych i embedded, które pokrywają cały zakres zaawanasowanych projektów. Dzięki kompleksowemu podejściu i opracowaniu całego stosu technologicznego do standardowego podejścia "fullstack" udało nam się dopisać rozwiązania embedded. Nie tracimy czasu na komunikację pomiędzy zespołami, a każdy element systemu powstaje z uzględnieniem wszystkich innych.

Z nami skonsultujesz cały projekt od wyboru mikrokontrolera do wdrożenia backendu u dostawcy rozwiązań chmurowych typu AWS, a implementacją będzie zajmował się zgrany zespół specjalistów nastawiony na optymalizację procesu.

Porozmawiajmy

Szukasz zespołu, który nie tylko zaimplementuje proces aktualizacji firmware'u w Twoim urządzeniu, ale również zadba o świetny wygląd aplikacji mobilnej oraz Twoją infrastrukturę? A może dopiero zastanawiasz się nad rozpoczęciem projektu? Skontaktuj się z nami – zrobimy wszystko, co w naszej mocy, aby Ci pomóc!

W Blues Brackets zajmujemy się rozwiązywaniem prawdziwych problemów za pomocą najnowszych technologii.

Porozmawiajmy

<mail>hello@bluesbrackets.com
<phone>+48 535 462 678

Spotkajmy się

Kraków, PolandWrocław, PolandWarszawa, Poland

Kontakt

Blues Brackets sp. z o. o.NIP 8842824071REGON 527681035