Chúng tôi sẽ tạo một bảng ARM với modem GSM trên bo mạch.
Chúng tôi muốn có thể nâng cấp firmware ARM qua mạng.
Có bất kỳ giải pháp nguồn mở tốt, đáng tin cậy cho điều đó không?
Nếu không, có một hệ điều hành trả phí với tính năng này?
Chúng tôi sẽ tạo một bảng ARM với modem GSM trên bo mạch.
Chúng tôi muốn có thể nâng cấp firmware ARM qua mạng.
Có bất kỳ giải pháp nguồn mở tốt, đáng tin cậy cho điều đó không?
Nếu không, có một hệ điều hành trả phí với tính năng này?
Câu trả lời:
Tôi không biết về bất kỳ giải pháp được tạo sẵn nào nhưng tôi sẽ mô tả cách tôi đi xung quanh nó trong một dự án. Nó không hoàn toàn 'không thể chấp nhận được' nhưng tôi không biết rằng nó đã thất bại trong hàng ngàn lần nâng cấp. Đối với ứng dụng này, tỷ lệ thất bại rất thấp vẫn sẽ rẻ hơn so với việc phải truy cập vào các đơn vị.
Ứng dụng chính có ba loại gói bổ sung được thêm vào giao thức giao tiếp thông thường bao gồm phát hiện lỗi và phân loại thử lại trên đầu trang:
Lệnh cập nhật firmware bắt đầu xóa vùng nhớ dành riêng trong SPI Flash bên ngoài. Nó trả về lỗi nếu thiết bị đang chạy từ pin dự phòng hoặc nếu thiết bị chạy từ nguồn ngoài nhưng trạng thái sạc pin dưới 25%.
Lệnh khối ghi chấp nhận một địa chỉ và dữ liệu bù được ghi vào bộ nhớ Flash ngoài trong các khối nhỏ. Giao thức cấp cao hơn đảm nhiệm việc phát hiện lỗi và truyền lại. Sau khi mỗi khối được viết, nó được đọc lại và xác minh trước khi lệnh được xác nhận.
Lệnh cập nhật phần sụn kết thúc bao gồm độ dài mà phần sụn nhận được phải cùng với CRC32 của toàn bộ hình ảnh để xác minh thêm. Nếu phù hợp với nội dung của bộ nhớ Flash bên ngoài và các điều kiện nguồn vẫn ổn với cùng độ dài và CRC32 được chuyển đến khu vực EEPROM cùng với 'số ma thuật' để chỉ ra rằng bản cập nhật firmware đang chờ xử lý.
Một vòng lặp cứng được thực thi trong ứng dụng chính để buộc khởi động lại watchdog.
Bộ tải khởi động (nằm trong khu vực được bảo vệ ghi của Flash của ARM) nhìn thấy số ma thuật trong EEPROM và một lần nữa xác minh CRC32 của hình ảnh. Nếu tất cả đều ổn, nó sẽ chuyển hình ảnh từ Flash bên ngoài vào khu vực chương trình chính của Flash của ARM.
Thông tin nâng cấp đang chờ xử lý sẽ bị xóa khỏi EEPROM và một vòng lặp cứng buộc phải khởi động lại. Lúc này bộ nạp khởi động sẽ khởi động ứng dụng chính bình thường.
Mặc dù tôi chưa bao giờ thấy giai đoạn cập nhật không thử nghiệm các bản phát hành phần sụn mới trước khi triển khai là rất quan trọng khi sử dụng phương pháp này. Nếu một bản phát hành mới không có khả năng kết nối với mạng GSM và chấp nhận các bản cập nhật trong tương lai, nó sẽ yêu cầu cập nhật firmware tại chỗ.
Bạn đang chạy Linux hoặc RTOS, hay kim loại trần? Nếu sử dụng Debian, bạn có thể chụp nhanh hệ thống tập tin hiện tại, thực hiện nâng cấp thông qua "apt-get" sau đó giữ hoặc khôi phục các thay đổi tùy thuộc vào việc nó có hoạt động hay không.