Uaktualnij ARM bezprzewodowo

9

Stworzymy tablicę ARM z wbudowanym modemem GSM.
Chcemy móc aktualizować oprogramowanie ARM bezprzewodowo.

Czy istnieje jakieś dobre, niezawodne rozwiązanie typu open source?
Jeśli nie, czy istnieje płatny system operacyjny z tą funkcją?

hotipsy
źródło
2
ARM jest dość ogólny: istnieje wielu producentów, którzy osadzają architektury ARM, a niektórzy z nich mogą to zapewnić.
clabacchio
1
Bardziej szczegółowe informacje o tym, który układ / rodzina ARM, którego planujesz użyć, byłoby miło. Wiele, jeśli nie wszystkie mikrokontrolery Cortex-M obsługują zapisywanie w pamięci flash z kodu użytkownika. Istnieją przykładowe implementacje typu open source, takie jak bootloader Maple leaflabs.com/docs/bootloader.html , i myślę, że widziałem aktualizację oprogramowania przez łącze radiowe obsługiwane w niektórych quadkopterach.
Thorn
W tej chwili nie wybraliśmy urządzenia ARM;)
hotipsy
7
Duży problem z aktualizacjami oprogramowania układowego polega na tym, jak zmusić układ do przejścia w tryb aktualizacji, gdy coś jest nie tak z oprogramowaniem układowym. Gdy masz dostęp do układu, możesz go zresetować i zmusić do wysokiego poziomu bootloadu, ale jak zamierzasz to zrobić bezprzewodowo? Jedynym niezawodnym rozwiązaniem, jakie mogę sobie wyobrazić, jest posiadanie drugiego mikroukładu (bez możliwości aktualizacji), który obsługuje podstawową komunikację i może aktualizować główny układ. Po rozwiązaniu tego problemu rzeczywiste ładowanie może być tak proste, jak użycie (na przykład) bootloadera wbudowanego w chip (na przykład, wiem, że LPC uC mają szeregowy bootloader).
Wouter van Ooijen,
2
@Hernan To umożliwiłoby subtelne tryby awarii, takie jak jeden układ (w jakiś sposób uruchamiający zły kod) utrzymujący drugi w stanie resetowania. Jedynym naprawdę niezawodnym rozwiązaniem jest utrzymanie funkcji w jednym układzie tak prostym, że nigdy nie będziesz musiał ich aktualizować.
Wouter van Ooijen

Odpowiedzi:

9

Nie znam żadnych gotowych rozwiązań, ale opiszę, jak je obejrzałem w jednym projekcie. Nie jest to całkowicie „niemożliwe do odblokowania”, ale nie jestem świadomy, że nie udaje mu się to przez tysiące aktualizacji. W przypadku tego zastosowania bardzo niski wskaźnik awarii byłby nadal tańszy niż konieczność uzyskania dostępu do urządzeń.

Główna aplikacja ma trzy dodatkowe typy pakietów dodane do swojego normalnego protokołu komunikacyjnego, który obejmuje wykrywanie błędów i ponawianie strategii:

  1. Polecenie rozpoczęcia aktualizacji oprogramowania układowego usuwa zarezerwowany obszar pamięci w zewnętrznej pamięci flash SPI. Zwraca błąd, jeśli urządzenie działa z zapasowej baterii lub jeśli jest zasilane z zewnętrznego źródła, ale stan naładowania baterii jest niższy niż 25%.

  2. Polecenie zapisu bloku akceptuje adres przesunięcia i dane, które są zapisywane w zewnętrznej pamięci Flash w małych porcjach. Protokół wyższego poziomu zajmuje się wykrywaniem błędów i retransmisjami. Po zapisaniu każdego bloku jest on odczytywany i weryfikowany przed potwierdzeniem polecenia.

  3. Polecenie zakończenia aktualizacji oprogramowania układowego obejmuje długość, jaką powinno otrzymać otrzymane oprogramowanie układowe wraz z CRC32 całego obrazu w celu dalszej weryfikacji. Jeśli jest to zgodne z zawartością zewnętrznej pamięci Flash, a warunki zasilania są nadal OK, ta sama długość i CRC32 jest przesyłany do obszaru EEPROM wraz z „magiczną liczbą” wskazującą, że aktualizacja oprogramowania jest w toku.

  4. W głównej aplikacji wykonywana jest twarda pętla w celu wymuszenia ponownego uruchomienia watchdoga.

  5. Program ładujący (który znajduje się w obszarze chronionym przed zapisem Flash ARM) widzi magiczną liczbę w pamięci EEPROM i ponownie weryfikuje CRC32 obrazu. Jeśli wszystko jest w porządku, przenosi obraz z zewnętrznej pamięci Flash do głównego obszaru programu Flash ARM.

  6. Informacje o oczekującym uaktualnieniu są usuwane z pamięci EEPROM, a twarda pętla wymusza ponowne uruchomienie. Tym razem bootloader uruchomi główną aplikację normalnie.

Chociaż nigdy nie widziałem, aby faza aktualizacji nie testowała nowych wersji oprogramowania układowego przed wdrożeniem, jest to kluczowe przy użyciu tej metody. Jeśli nowa wersja nie jest w stanie połączyć się z siecią GSM i zaakceptować przyszłych aktualizacji, będzie wymagać aktualizacji oprogramowania układowego na miejscu.

PeterJ
źródło
1

Używasz Linuksa, RTOSa, czy gorzej? Jeśli używasz Debiana, możesz zrobić migawkę bieżącego systemu plików, wykonaj aktualizację za pomocą „apt-get”, a następnie zachowaj lub przywróć zmiany w zależności od tego, czy zadziałało, czy nie.

Fred Basset
źródło
Mamy Linuksa i goły metal w zależności od aplikacji ;-)
hotips
1
Jeśli masz Linuksa, możesz wykorzystać dużą część tej infrastruktury. Sposób, w jaki obsługuję aktualizacje w moim bieżącym projekcie, to tworzenie plików .deb dla niestandardowych aplikacji, a następnie użycie aktualizacji apt-get w celu aktualizacji systemu. Eksperymentuję również z btrfs. Ten system plików pozwala robić migawki. Więc moim planem jest zrobienie migawki pożądanych katalogów, próba aktualizacji i jeśli to nie zadziała, przywróć migawkę. Jeśli jesteś na gołym metalu, prawdopodobnie będziesz musiał zastosować zwykłą metodę podwójnej pamięci, jeden obraz dla najnowszego działającego kodu, a drugi dla świeżo pobranego kodu.
fred basset