Ми створимо плату ARM з вбудованим GSM-модемом.
Ми хочемо мати можливість модернізувати програмне забезпечення ARM в ефірі.
Чи є якісь хороші, надійні рішення з відкритим кодом для цього?
Якщо ні, чи є платна ОС з цією функцією?
Ми створимо плату ARM з вбудованим GSM-модемом.
Ми хочемо мати можливість модернізувати програмне забезпечення ARM в ефірі.
Чи є якісь хороші, надійні рішення з відкритим кодом для цього?
Якщо ні, чи є платна ОС з цією функцією?
Відповіді:
Я не знаю жодних заздалегідь прийнятих рішень, але опишу, як я обійшов його в одному проекті. Це не зовсім "нерозбірливо", але я не усвідомлюю, що він провалюється за тисячі оновлень. Для цього додатка дуже низький рівень відмов все-таки буде дешевшим, ніж отримати доступ до підрозділів.
Основний додаток містить три додаткові типи пакетів, які додаються до звичайного протоколу зв'язку, який включає в себе виявлення помилок та спробу повторення зверху:
Команда для оновлення вбудованого програмного забезпечення очищає зарезервовану область пам'яті у зовнішньому спалаху SPI. Він повертає помилку, якщо пристрій працює від резервного акумулятора або працює від зовнішнього живлення, але стан заряду акумулятора нижче 25%.
Команда блоку запису приймає адресу зміщення та дані, які записуються у зовнішню пам'ять Flash невеликими шматками. Протокол вищого рівня піклується про виявлення помилок та повторну передачу. Після того, як кожен блок записаний, він зчитується назад і перевіряється до підтвердження команди.
Команда оновлення вбудованого програмного забезпечення включає довжину, яку повинна отримувати вбудована програма разом з CRC32 всього зображення для подальшої перевірки. Якщо це відповідає вмісту зовнішньої флеш-пам’яті, а умови живлення все одно добре, однакова довжина, і CRC32 переноситься в область EEPROM разом з «магічним номером», щоб вказати, що оновлення програмного забезпечення очікує на розгляд.
У головному додатку виконується жорсткий цикл, щоб змусити перезапуск сторожового будинку.
Завантажувач (який знаходиться у захищеній від запису спалах ARM) бачить магічне число у EEPROM та ще раз перевіряє CRC32 зображення. Якщо все гаразд, воно переносить зображення із зовнішнього Flash у основну програму області спалаху ARM.
Інформація, що очікує на оновлення, очищається від EEPROM, а жорсткий цикл змушує інше перезавантажити. Цього разу завантажувач нормально запустить основну програму.
Хоча я ніколи не бачив, щоб на етапі оновлення не відбулося тестування нових версій прошивки перед розгортанням, вкрай важливо використовувати цей метод. Якщо новий випуск не здатний підключитися до мережі GSM та прийняти майбутні команди оновлення, знадобиться оновлення мікропрограмного забезпечення на місці.
Ви працюєте з Linux чи RTOS, чи голим металом? Якщо за допомогою Debian ви можете зробити знімок поточної файлової системи, здійснити оновлення за допомогою "apt-get", а потім зберегти або відкинути зміни залежно від того, працював він чи ні.