nella mia esperienza si riduce a quello che è il tuo punto di costo, se puoi permetterti di avere il doppio del codice/spazio dati sul dispositivo di cui hai bisogno e può riavviare, è semplice, memorizzare la nuova versione in tutti i tuoi extra spazio, eseguo correttamente il checksum sulla nuova immagine e suggerisco anche un controllo più approfondito nella nuova immagine del firmware in quanto potrebbe essere falsificato se non lo fai, ad esempio una sorta di chiave crittografata che garantisce l'origine della nuova immagine. Puoi farlo anche con memorie esterne, per esempio in un progetto usando un PIC ho avuto una EEPROM esterna per la nuova immagine del firmware e un flag che, se impostato all'avvio, caricava una nuova immagine dalla EEPROM.
se non sei così fortunato, non ti puoi permettere quello spazio, quindi la vita diventa più interessante e probabilmente non esiste un modo garantito per evitare completamente la possibilità di errori durante un aggiornamento. In tutti i casi il bootloader dovrebbe essere in un pezzo di memoria protetto da scrittura e se puoi permetterti lo spazio, dovrebbe avere qualche forma base di connettività esterna, ho fatto sistemi con driver USB molto semplici nel bootloader e sistemi con UDP REALMENTE semplice solo stack di rete. O ti consentirà di ottenere almeno una nuova immagine sul dispositivo se si verifica un errore durante un aggiornamento. In questi casi, consiglio vivamente di mettere il bootloader in un'area di memoria di sola lettura, perdi la possibilità di aggiornarlo, ma un aggiornamento in tilt non ti lascerà nemmeno con un dispositivo completamente in muratura. In tal caso, il bootloader è abbastanza piccolo da essere abbastanza sicuro della sua correttezza.
l'ultima possibilità è un sistema che ha bisogno di aggiornare una parte del suo codice durante l'esecuzione ... questo è davvero difficile e di solito richiede il controllo complesso sulla posizione delle funzioni nella memoria e maggiore pianificazione per il futuro nel layout di memoria per raggiungere . Non è divertente ma è fattibile.
fonte
2009-05-20 20:08:51
solo curioso - cosa succede se è necessario aggiornare il boot loader? – sybreon
@sybreon: i ruoli reverse dell'applicazione e del bootloader, utilizzando una strategia simile. In altre parole, il codice dell'applicazione potrebbe contenere la possibilità di scaricare un nuovo bootloader, con spazio riservato a due bootloader riservati. Una volta scaricato e verificato un nuovo bootloader, viene eseguita una scrittura finale (più probabile per il vettore di ripristino o un codice di avvio immutabile), per garantire che il nuovo bootloader venga richiamato all'avvio. –
In generale, il boologger è così semplice e fa cose di base che non è necessario aggiornarlo. – mouviciel