Go Down

Topic: Strano problema con signature scrivendo il bootloader (Read 15712 times) previous topic - next topic

astrobeed


@ Astrobeed: in avrdude.conf non si è fatto altro che copiare la sezione del 328P e rinominarla 328, modificando esclusivamente la signature; questo trucchetto ha fatto sì che nella board virtuale si potesse mettere il 328 come micro e mandare regolarmente il bootloader.


Tra le prime cose dette in questo lungo thread c'è pure questa modifica a boards.txt:

Code: [Select]

e modificando la copia facendola diventare

##############################################################

atmega328pu.name=Atmega328PU su shield
atmega328pu.upload.protocol=stk500
atmega328pu.upload.maximum_size=32256
atmega328pu.upload.speed=115200
atmega328pu.bootloader.low_fuses=0xff
atmega328pu.bootloader.high_fuses=0xde
atmega328pu.bootloader.extended_fuses=0x05
atmega328pu.bootloader.path=optiboot
atmega328pu.bootloader.file=optiboot_atmega328.hex
atmega328pu.bootloader.unlock_bits=0x3F
atmega328pu.bootloader.lock_bits=0x0F
atmega328pu.build.mcu=atmega328pu
atmega328pu.build.f_cpu=16000000L
atmega328pu.build.core=arduino


Dove viene chiaramente inserito come micro il 328pu al posto del 328p, infatti se andate a vedere le varie opzioni di compilazione per gcc scoprirete che gli viene detto di compilare per il 328 e non per il  328p.

astrobeed


ALT !!!
STOP !!!
Questo non è esatto , io ho utilizzato la entry modificata solo per caricare il bootloader, da quel momento in poi utilizzo le stesse impostazioni dell'arduino uno.


Se stai compilando per la UNO non è possibile che riesci a caricare lo sketch perché la signature attesa è diversa da quella del 328, poi se hai fatto pasticci nel file boards.txt e/o avrdude.conf per forzare il caricamento hai commesso un errore procedurale.
Comunque mi sono stufato di ripetere le stesse cose 1000 volte, io vi ho spiegato come stanno le cose e come vanno fatte nel corretto modo, poi se volete farle nel modo sbagliato solo perché vi sembra che così funziona è una vostra scelta, però poi non venite a lamentarvi domani quando Arduino vi si pianterà in modo misterioso.

Se non è ancora chiaro lo dico per l'ultima volta, il core del 328 è diverso dal core del 328p, non è possibile compilare per il 328p e sperare che poi funzioni tutto perfettamente sempre e comunque forzando il caricamento sul 328.

niki77



Tra le prime cose dette in questo lungo thread c'è pure questa modifica a boards.txt:

Code: [Select]

e modificando la copia facendola diventare

##############################################################

etc
etc
etc
atmega328pu.build.mcu=atmega328pu
etc
etc



Dove viene chiaramente inserito come micro il 328pu al posto del 328p....



Che è una entry che io ho aggiunto ad avrdude.conf , perchè di suo non c'era, che contiene lo stesso identico blocco del 328p ad esclusione della signature.
Per tutto il resto, bhe sarà stato culo, se in teoria non è possibile,  bhe pazienza!

Grazie a tutti.

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

astrobeed


Che è una entry che io ho aggiunto ad avrdude.conf , perchè di suo non c'era, che contiene lo stesso identico blocco del 328p ad esclusione della signature.


No, il pezzo che ho riportato, e l'hai scritto tu, è relativo al file boards.txt che, vai a rivedere la prima pagina di questo thread e tra i primissimi post c'è il tuo dal quale ho tratto la  modifica.

niki77

Esattamente, ma se vedi bene  l'unica riga che ho lasciato, tra gli etc, è quella che indica all'ide la entry da far utilizzare ad avrdude.
Se tu crei quella entry su board.txt e non crei poi la entry per il 328pu anche su avrdude.conf , non funziona una beata ......
La entry creata poi in avrdude.conf è IDENTICA a quella del 328p, eccetto per la signature.

Ma comunque, come ho già detto prima, per me la cosa è chiara.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72

Scusa una cosa, fai un po' di casino sui ruoli che hanno quei 2 file.
avrdude.conf NON interviene sulla compilazione dello sketch ma dà solo istruzioni ad avrdude su come "comunicare" con il micro per trasmettere il firmware.

Ciò che viene usato per la compilazione sono proprio le informazioni contenute in boards.txt. Sono questi dati che l'IDE passa a gcc-avr per far compilare lo sketch. Se gli passa "328" invece che "328p" gcc-avr compilerà per 328 non P, con le conseguenze dette da Astro se poi quel firmware lo usi su un 328p o viceversa. Ad avrdude puoi anche dirgli quello che vuoi, se gli dai delle signature false. Ma il problema è a monte di avrdude.

GH_Blackout

quindi fatemi capire, arduino IDE quando fai il burn ricompila il bootloader ogni volta?
:*
~blackout~ @ grayhats.org

astrobeed


Ad avrdude puoi anche dirgli quello che vuoi, se gli dai delle signature false. Ma il problema è a monte di avrdude.


Esatto, il signore vince un pinguino gonfiabile  :smiley-mr-green:

astrobeed


quindi fatemi capire, arduino IDE quando fai il burn ricompila il bootloader ogni volta?


No, compila solo lo sketch utilizzando le informazioni in boards.txt per sapere il clock, il modello di micro etc, poi invoca avrdude dicendogli dove prendere l'hex da caricare, il modello del micro e altri parametri.
Avrdude prima cerca in avrdude.conf i parametri di programmazione del micro, tra cui la signature, dopo di che cerca di entrare in contatto con un programmatore stk500 che è emulato dal bootloader e se questa fase ha successo inizia la vera e propria procedura di programmazione.
Manipolando avrdude.conf, e/o i parametri di risposta della emulazione stk500, possiamo far credere ad avrdude quello che vogliamo, ovvero forzare la programmazione di un programma compilato per il micro pincopallo sul micro pallopinco, però questo non significa necessariamente che poi il micro funzioni in modo corretto.

GH_Blackout

ho capito
quindi avrdude.conf serve solo per compilare l'HEX dello sketch
mentre boards.txt serve x sapere quali signature e configurazioni per il caricamento del bootloader


torniamo al punto cruciale
come si compila il bootloader?
ha una procedura simile a quella delle cpu sigma,enigma e famiglia?
devo prepararmi una toolchain come si fa per l'n800?
dove reperisco le informazioni?
~blackout~ @ grayhats.org

leo72


ho capito
quindi avrdude.conf serve solo per compilare l'HEX dello sketch

No.
Cosa ho scritto?
Quote
avrdude.conf NON interviene sulla compilazione dello sketch ma dà solo istruzioni ad avrdude su come "comunicare" con il micro per trasmettere il firmware.

Per "trasmettere il firmware", non per "compilare il firmware".
Chi compila?
Quote
Ciò che viene usato per la compilazione sono proprio le informazioni contenute in boards.txt. Sono questi dati che l'IDE passa a gcc-avr per far compilare lo sketch.

GH_Blackout

quindi arduino compila di volta in volta il bootloader quando usi l'opzione BURN

we non è che mi dovete fare impazzire :D uno dice si uno dice no ... a chi devo credere?  :smiley-mr-green:
~blackout~ @ grayhats.org

leo72

A tutt'e due, stiamo parlando di cose diverse.
avrdude.conf non interviene nella compilazione, quel file è solo una specie di agenda del telefono dove ci sono i numeri per chiamare i tuoi amici.

Mettiamo che vuoi dire ad Andrea che stasera vuoi uscire per andare a trovare Marco. Pensi un attimo a cosa vuoi dirgli, poi fai il numero e lo chiami.
Ecco, gcc-avr è il tuo cervello che pensa quello che devi dire e crea il concetto da esprimere (il file .hex), avrdude.conf è quello che fornire il numero (signature) per chiamare Marco (il micro di destinazione) e tu sei quello che parla (avrdude).

Se ora cambi il discorso da fare, cose gliene frega ad avrdude.conf? E cose gliene frega ad avrdude? Se magari volevi mandare un bacio alla tua donna e chiami Marco e prima che questo parli gli dici "ti amo"?? gcc-avr e avrdude hanno svolto il loro compito ma tu (avrdude) hai fatto casino prendendo un numero sbagliato e passando un concetto giusto al destinatario sbagliato.

PS:
per la cronaca, agli occhi di Marco passi da "buco", e chi è stato in Toscana sa cosa vuol dire  ;)

GH_Blackout

capito claro

mentre boards.txt interviene nella compilazione del bootloader che viene ricompilato ogni volta viene effettuato un burn


@astro
@leo

grazie per la spiegazione, purtroppo in questo settore sono ignurante
quindi mettendo 328 senza P praticamente ho azzeccato (a culo) il flag che indica a gcc-avr il micro 328 senza P
~blackout~ @ grayhats.org

astrobeed


ho capito
quindi avrdude.conf serve solo per compilare l'HEX dello sketch
mentre boards.txt serve x sapere quali signature e configurazioni per il caricamento del bootloader


Si, hai capito esattamente l'opposto  :D
Boards.txt contiene informazioni che definiscono il modello di Arduino, il micro utilizzato, il clock, i fuse, viene usato esclusivamente dall'IDE, alcune informazioni sono poi trasmesse, dall'IDE, a gcc per la compilazione e avrdude per la programmazione.
Avrdude.conf contiene informazioni solo sul micro ed utili esclusivamente alla sua programmazione, viene usato esclusivamente da avrdude.

Quote

come si compila il bootloader?


Utilizzando la sua make oppure da AVRStudio, quest'ultima richiede padronanza di AVRstudio e le sue toolchain.

Quote

devo prepararmi una toolchain come si fa per l'n800?


La toolchain è inclusa nell'IDE di Arduino, hai a disposizione avrgcc e la libreria avrlibc che sono utilizzati per compilare gli hex per Arduino, in alternativa puoi usare AVRstudio e relativi addon/toolchain.

Go Up