Ciao a tutti.
Prima di spiegare cosa devo fare voglio chiarire bene tutto per evitare i "casini" che ho letto in altre discussioni su questo argomento.
Ho creato un progetto con arduino con codice arduino.
Ora ho delle schede fatte solo con atmel, non utilizzo più nessuna scheda ne shield di arduino e ho cambiato anche codice e librerie quindi sono completamente separato da arduino.
Mi potreste chiedere perché scrivo il thread qui se ormai non c'entra più arduino e la risposta è: non so dove andare a cercare e nemmeno a chiedere.
Avendo sia hardware che software proprietario vorrei chiudere la possibilità di modificare il firmware.
L'usb si interfaccia con una interfaccia grafica che salva valori su una sd e serve anche per aggiornare il firmware.
Quindi vorrei continuare ad utilizzare l'usb per queste 2 funzioni impedendo di modificare il codice interno.
Non devo vendere niente a nessuno voglio solo imparare a creare "sistemi" proprietari in autonomia e forse perdo la tentazione di modificare il codice originale senza farne una copia e perdere sempre tutto.
Grazie mille
P.S. so gia che ci sono altri thread in cui ci si arrabbia perché arduino è open, appunto per questo ho specificato, se non potete rispondermi qui vorrei dei cosigli su dove poter informarsi o a chi chiedere.
P.P.S ho visto che ci sono link a dei topic in cui si diceva di leggere dalla pagina 30 ma il link non funziona
NON è l'hardware che usi che conta, ma il software ...
... se usi il "core" Arduino, le librerie, magari anche l'IDE ... che poi sia una tua board o meno, sei sempre soggetto a QUESTO che si riassume in ...
The Arduino API and most libraries are covered by the LGPL license, which do not require you to release your source code. The license does, however, require you to make available object files that allow for the relinking of the firmware against updated versions of the LGPL components. We also offer dual licensing options for companies who want to include Arduino-based software in their products.
Devi inoltre guardare con che licenza è rilasciato ogni singolo modulo (librerie) NON Arduino che utilizzi e che possono avere altro tipo di licenza (... anche più restrittiva).
Ciao!
Per quanto riguarda le librerie non ho problemi. Non uso IDE di arduino ma il software avr. Non ho programmato un bootloader perché suppongo che per fare quello che voglio devo riprogrammarlo. Io ho i chip vergini senza niente. Devo fare tutto il software.
Ok, allora devi prendere il datasheet della MCU che usi (immagino ATmega328P) e guardare i "Lock Bits" ... ce ne sono diversi con viverse funzionalità, a seconda di cosa vuoi proteggere.
Capitolo "27. Memory Programming", paragrafo "27.1 Program And Data Memory Lock Bits".
Attenzione, se proteggi con i "Lock Bits" poi, per sproteggere e poter riprogrammare il chip, devi fare un ERASE totale..
Ok, sono andato a vedere. Ma facendo questo posso aggiornare il software lo stesso?
Voglio dire il fatto che chiudo la seriale non implica che non si possa usare l'USB, giusto?
Da quello che ho capito, per fare un sistema con le varie sicurezze, tengo salvato il software originale e aggiungo quello nuovo senza eseguirlo; riavviando il tutto il bootloader esegue il nuovo software e se non funziona va a eseguire quello vecchio che è ancora salvato nel chip (ovviamente tenendo in considerazione la disponibilità di memoria).
Quindi io tramite usb posso caricare il file hex anche se la seriale è bloccata?
Dopo una giornata intera a leggere ho capito che non saprei come aggiungere dati dall'esterno...
Se viene disabilitata la seriale non posso inserire nulla nella memoria. Quindi non risolvo nulla.
Quindi di tutti i dispositivi che si interfecciano con USB è possibile vedere il software? O esistono MCU che permettono di farlo?
EDIT: Utilizzo un ATmega 2560. Mi sembra strano però... Più che altro, non far copiare il codice mi pare sia impossibile perché togliendo fisicamente la EEPROM si potrebbe fare; ma se una persona comune collega qualcosa al computer devo impedirgli di poter vedere il codice altrimenti potrebbe fare qualsiasi cosa e rompere tutto. Io ho bisogno che collegando l'USB al pc possano essere salvate le modifiche che l'utente svolge da apposito software su pc
Scusa, ma l'utente mica esegue modifiche sul CODICE (... che fa, si mette a scrivere codice C/C++?) ... immagino l'utente configuri dei PARAMETRI che hanno determinate funzioni e che tali parametri tu li salvi in EEPROM e poi, in funzione di essi, il tuo codice esege determinate cose piuttosto che altre ... e tutto questo è fattibile anche con i LOCK BITS attivi (NON è la USB ad essere disattivata, è la lettura/scrittura della Flash).
Ok, quindi attivando i lock bits l'unica cosa che non mi sarebbe permessa è fare l'aggiornamento del software ma potrei comunque fare il resto. Ci proverò.
Per aggiornare il software dovrai fare, con il tuo programmatore, un ERASE della MCU ... verrà completamete cancellata la memoria ed i LOCK BIT verranno rimessi come in origine (disattivati), dopo di che ... la potrai riprogrammare e bloccare di nuovo.
Ma io con i lock bit posso bloccare l'accesso dall'esterno alla flash ma allo stesso tempo il bootloader può scrivere la flash. Se posso comunque usare l'USB non posso caricare il software in un'altra memoria e poi farla prendere al bootloader?
Ma perché ti vuoi complicare la vita in tutti i modi ... mah ...
... comunque, per fare quello che chiedi, ti devi studiare quanto ti ho allegato al post #7
Si lo so mi devo sempre complicare la vita. Tralasciando questa parte, esistono topic sullo sviluppo di bootloader proprietari? Cercando sul forum mi sono usciti solo i bootloader di arduino.
Grazie
La protezione del firmware che però permetta la distribuzione degli aggiornamenti si basa di solito su un bootloader che accetta un file codificato tramite una encryption Key il file può provenire dalla RS 232 oppure da un SD card oppure da un USB, la encryption Key va scelta in base al cliente che ti ha commissionato la scheda.
Il funzionamento in sintesi è questo: il file criptato è inviato al bootloader che lo decodifica in base alla encryption Key inserita dentro al bootloader quindi il bootloader cambierà ogni byte col nuovo byte e lo programmerà nella flash, i fuses sono programmati in modo che non permetta la lettura di nessun byte della flash, che permetta la scrittura nell'area programma ma non la scrittura nell'area bootloader, facendo così si evita che il bootloader possa sovrascrivere se stesso.
Quando verrà compilato l'aggiornamento il file hex generato viene mandato in pasto ha un programma che effettuerà la criptatura, il file così generato potrà essere spedito ovunque nel mondo e anche lasciato sul sito per poter essere scaricato ma è perfettamente inutile per un microcontroller vergine con bootloader generico, funzionerà solo su un microcontroller con il bootloader conn la giusta Key
Io uso questi sistemi da una quindicina di anni su microcontrollori atmel, Arduino non usa solo microcontrollori atmel ma di varie marche inoltre è open-source per cui non mi sembra il posto giusto per poter andare nei particolari su queste cose, è come chiedere a un forum Linux di parlare di come correggere alcuni problemi Microsoft, puoi andare su altri forum come AVR freaks etc dove da 20 anni si parla dei microcontrollori AVR di atmel
Come ultima cosa i file usati sono i comuni .hex e sono trasferiti al microcontroller così come sono oppure trasferiti tramite protocollo xmodem.
Infatti ... ormai Arduno qui non c'entra più nulla, le informazioni di cui "davidedev" aveva bisogno sono state tutte fornite, per cui ... penso si può chiudere