Come funziona il Firmware

= Introduzione = Al giorno d'oggi la maggior parte dei dispositivi elettronici sono basati su chip digitali chiamati microcontrollori, i quali funzionano per mezzo di un programma chiamato firmware. Questo firmware è responsabile di tutte le operazioni, dall'inizializzazione del dispositivo, controllando che tutte le periferiche e gli altri componenti siano ok e pronti all'uso, al controllo dell'interfaccia del menù secondo i comandi ricevuti con la pressione dei pulsanti, all'esecuzione delle operazioni per le quali il dispositivo è stato progettato.

Le DSLR Nikon appartengono a questa categoria di dispositivi e contengono parecchi chip, tra cui parecchi microcontrollori. Due di questi (chiamati A e B per comodità) gestiscono la maggior parte della logica ad alto livello. Come la maggior parte dei produttori di dispositivi avanzati, Nikon ha previsto per le sue macchine fotografiche la possibilità di beneficiare di miglioramenti e correzioni dei bug, perciò i firmware per questi due microcontrollori sono memorizzati in memorie semi permanenti (flash), le quali possono essere riscritte mediante una procedura specifica per "aggiornare il firmware" (ovvero sostituirlo con un'altra versione che include le modifiche desiderate). Quando questa operazione viene eseguita, si dice in gergo che si sta "flashando" il firmware nella macchina fotografica.

Per tutte le reflex che hanno ricevuto miglioramenti, Nikon mette a disposizione per il download sul proprio sito i firmware aggiornati. I firmware A e B più recenti sono combinati in un singolo file, il quale viene prima crittografato e poi compresso in un file eseguibile e auto estraente. Per poter avere il file binario crittografato, quello contenente i firmware A e B, basta eseguire il file scaricato. Il file così ottenuto deve poi essere copiato su una scheda di memoria per aggiornare la macchina.

Se si vuole lavorare sul firmware, anziché flasharlo sulla macchina, è necessario innanzitutto decriptare il file. L'algoritmo di crittografia usato è stato scoperto alla fine del 2011 da Simeon Pilgrim ed è possibile trovare maggiori dettagli a riguardo partendo da questo post sul suo blog. Parecchi strumenti sono ora disponibili per decriptare il firmware, uno di essi è in fase di sviluppo nell'Emulatore Nikon.

= Il microcontrollore "B" =

Informazioni generali
Il microcontrollore "B" è quello su cui ci siamo concentrati principalmente perché controlla lo schermo e gestisce l'interazione con l'utente, come ad esempio la navigazione del menù. Si tratta di un processore Nikon Expeed ed è basato su un microcontrollore Fujitsu FR (o FR-V) a 32-bit, molto probabilmente appartenente o vicino alla famiglia degli FR80, come i chip che riportano le sigle 916xx o 916F6xx e che potete trovare qui.

Il firmware che controlla il menu e la logica di base della fotocamera consiste perciò in un codice macchina binario utilizzato da questa specifica famiglia di microcontrollori. Questo codice binario può essere riconvertito in un codice a basso livello, ovvero di non facile comprensione (linguaggio assembly). (N.B. La maggior parte del firmware non è stata scritta da Nikon in linguaggio assembly, ma in un linguaggio ad alto livello come il C. Purtroppo, non avendo accesso a questi "sorgenti", tutto ciò che possiamo fare è partire da ciò che abbiamo, ovvero i file in linguaggio macchina compilati e tradurli in linguaggio assembly).