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ą?
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ą?
Odpowiedzi:
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:
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%.
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.
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.
W głównej aplikacji wykonywana jest twarda pętla w celu wymuszenia ponownego uruchomienia watchdoga.
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.
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.
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.