sabato 12 marzo 2016

RDI/Tadpole SPARCLE 500 : "The IDPROM contents are invalid"

Tra l'hardware più o meno funzionante ho anche questo particolarissimo portatile con cpu UltraSPARC IIe a 500Mhz sul quale è installato OpenBSD 5.6 che un bel giorno ha pensato bene di trasformarsi in un ingombrante fermacarte.

Partiamo dall'inizio e cioè quando accendendolo mi accorgo che il display non visualizza nulla, ma non solo, sembra che anche il disco non lavori molto dopo che il relativo led ha lampeggiato per poco, troppo poco perchè il sistema abbia fatto il boot.
Visto che vi è installato OpenBSD, con IP statico e server ssh attivo provo a collegarmi da un altro PC ma nulla da fare, anche il ping non da segni di vita, quindi sembra che non si sia avviato il sistema operativo.
Quindi forse non è solo un problema di display ma c'è qualcosa di più serio, per prova aggancio un monitor LCD alla presa VGA del portatile e lo riaccendo e con il monitor esterno almeno vedo cosa succede e il computer si blocca fermandosi al prompt OK di OBP dopo aver visualizzato il seguente messaggio :
The IDPROM contents are invalid
digitando il comando :
boot disk
si avvia OpenBSD ma vedo subito che la data di sistema è andata in cavalleria, ma poi si sistema attraverso il servizio ntp e il sistema sembra funzionare.
Una veloce ricerca in rete e scopro, che come per i normali PC, vi è una batteria che mantiene la memoria nvram e quando questa è in esaurimento si incasina il contenuto della IDPROM ed esce questo errore.
Quindi un problema è il display e l'altro la batteria, per il primo non credo di poterci fare nulla al momento ma per il secondo il discorso è diverso. 
Fortunatamente questo portatile è molto semplice da smontare, una volta capovolto basta rimuovere batteria, lettore DVD, sportellini della memoria e del disco e con esso si rimuove anche il disco e poi via a rimuovere tutte le viti, alla fine si solleva la base inferiore e ... tadà salta subito all'occhio questa piccola batteria gialla :
rimuoverla è molto semplice, acquistarne un'altra un pò meno perchè non si trovano così facilmente, ma per fortuna esiste ebay, e tempo una decina di giorni mi è arrivata la batteria nuova da un rivenditore inglese.
Dopo aver montato la batteria, riassemblato tutto e riacceso il portatile il problema ovviamente si ripresenta uguale con la differenza che nel banner che viene visualizzato in fase di boot l'indirizzo MAC della scheda di rete è ora tutto a 0 così come l'host ID.
Ma come si imposta l'IDPROM in modo che risulti valido ? beh qui è stata dura perchè anche se in rete si trova qualcosa ci sono purtroppo alcune differenze rispetto a quanto fattibile su questo portatile, differenza nell'implementazione della OBP a quanto pare.
Per iniziare vediamo qualcosa di più sulla IDPROM, che è una sequenza di 16 caratteri, di cui l'ultimo è di controllo, uno XOR sui primi 15 bytes.
Il formato è questo :
1 byte : indica il tipo di macchina SUN
2 byte : è il 1^ byte dell'host ID
3-8 bytes : è l'indirizzo MAC della scheda
9-12 bytes : è una data ma può anche essere una sequenza di 0
13-15 bytes : sono il 2^, 3^ e 4^ byte dell'host ID
16 byte : checksum
adesso che sappiamo da cosa è composto l'IDPROM bisogna trovare un modo per impostare questi valori.
Qui di seguito riporto la procedura che ho seguito io, e che mi ha portato ad avere una IDPROM valida, tenete presente che come indirizzo MAC e host ID potete metterci quello che vi pare, meglio sarebbe indicare i dati corretti se ve li siete segnati da qualche parte o li potete recuperare in qualche modo, almeno l'indirizzo MAC, io purtroppo non ho trovatto uno straccio di adesivo/scritta che riportasse questo valore.
Procediamo, al prompt di OBP digitiamo :
show-devs
e verrà visualizzato un elenco dei componenti del sistema, cercate quello che indica la eeprom, e poi spostatevici come se fosse una directory con :
cd /pci@1f,0/ebus@c/eeprom@1,0
a questo punto digitate il comando :
.properties
e verrà visualizzata una serie di informazioni, tra cui il tipo di NVRAM, che dovrebbe essere mk48t59 e l'indirizzo di memoria al quale si trova.
Nel mio caso l'indirizzo è FFFCE000, l'offset dove è memorizzata la IDPROM è 1FD8, quindi l'indirizzo della IDPROM è FFFCFFD8.
Per visualizzare il contenuto della memoria si usa questo comando :
FFFCFFD8 10 dump
che in pratica visualizza 16 bytes dall'indirizzo indicato, come avrete notato si usa l'esadecimale quindi quel 10 è in esadecimale e indica 16 bytes.
Una precisazione, l'offset lo ho trovato eseguendo il dump della memoria dall'indirizzo base FFFCE000 fino a che ho trovato i byte della IDPROM, questo prima di togliere la batteria perchè in seguito sono diventati tutti zeri.
Ciò significa, visto che la IDPROM era già invalida, che l'indirizzo MAC e l'host ID, quasi certamente, non fossero valori corretti.
Ora per inserire i valori nella IDPROM bisogna scrivere nelle relative posizioni di memoria, la procedura è la seguente :
01 FFFCFFD8 c!
A0 FFFCFFD9 c!
90 FFFCFFDA c!
08 FFFCFFDB c!
30 FFFCFFDC c!
03 FFFCFFDD c!
45 FFFCFFDE c!
00 FFFCFFDF c!
54 FFFCFFE0 c!
94 FFFCFFE1 c!
64 FFFCFFE2 c!
10 FFFCFFE3 c!
00 FFFCFFE4 c!
9A FFFCFFE5 c!
60 FFFCFFE6 c!
18 FFFCFFE7 c!
la sequenza è per primo il byte da scrivere, seguito dall'indirizzo e poi il comando per scrivere un byte ( c! ).
In base a quanto detto relativamente al contenuto della IDPROM abbiamo messo 01 come identificativo dell'hardware, anche se non è corretto.
Per l'indirizzo MAC abbiamo usato 90:08:30:03:45:00, che non esiste, per l'host ID A0009A60, per la data 54946410 che indica il 28 settembre 1971.
Il checksum calcolato è 18, una volta resettato il sistema con il comando :
reset-all
la IDPROM è risultata valida, anche se i dati inseriti non lo sono formalmente, e il sistema si è avviato in maniera corretta.  

In realtà, almeno con l'OBP presente su questo portatile, è possibile usare il comando set-host-id, che imposta appunto l'host ID e calcola il checksum e quindi genera una IDPROM valida senza dover andare a scrivere byte nella memoria, operazione piuttosto delicata.
Onestamente non mi è molto chiaro come vada usato, quello che ho dedotto è che al prompt bisogna indicare una sequenza di caratteri esadecimali, che dovrebbero essere almeno 6 e dovrebbero essere l'ultima parte dell'indirizzo MAC della scheda di rete, infatti una volta messo sullo stack questo valore si può digitare il comando set-host-id seguito da reset-all e al riavvio vedrete che l'indirizzo MAC della scheda è stato modificato con i caratteri indicati, che corrispondo anche agli ultimi 3 bytes dell'host ID.

In ogni caso la parte fondamentale è il valore di checksum, è solo quello che se sballato fa bloccare il boot e riporta il messaggio di errore, certo sarebbe cosa buona e giusta aver potuto recuperare i valori originali o almeno quello della scheda di rete .... ma così è andata, e alla fine è andata ancora bene.

Nessun commento:

Posta un commento