Embedded

Estrarre un’immagine multi-file u-boot in Python

Questo semplice pezzo di codice mostra come estrarre/decomprimere un’immagine u-boot multi-file creata con il comando mkimage, utilizzando Python. Il formato dell’immagine del file u-boot è abbastanza semplice:

64 byte per l'image header.
4 byte per la dimensione della prima immagine.
4 byte per la dimensione della seconda immagine.
...
4 byte a zero per la terminazione.
immagine1.
immagine2.
...

Dovete anche ricordarvi che ogni immagine deve essere paddata a 4 byte.

#!/usr/bin/env python

import sys

def toNumber(buf):
        """ Convert string in number """
        size = 0
        for b in buf: size=size*256+ord(b)
        return size

if len(sys.argv)!=2:
        sys.stdout.write('Usage %s uboot_image_file\n' % sys.argv[0])
        sys.exit(1)

f = open(sys.argv[1],'rb')
f.seek(64) # skip image header

parts = []

# get file size of all images
while True:
        buf = f.read(4)
        size = toNumber(buf)
        if size==0: break
        parts.append(size)

i = 0
for size in parts:
        pattern = 'file%d.img' % i
        p = open(pattern, 'wb')
        buf = f.read(size)
        p.write(buf)
        p.close()
        if size%4 != 0:
                # 4 byte padding
                f.read(4-(size%4))
        i+=1

f.close()

Codesourcery G++ per ColdFire su OpenSuse 10.3 e problemi nell’installazione dell’IDE

In questi giorni a lavoro stiamo valutando l’acquisto dell’IDE per il cross-compilatore ColdFire della CodeSourcery G++. L’ambiente di sviluppo è sostanzialmente Eclipse ottimizzato e adattato per il cross-compilatore. Durante l’installazione del pacchetto ho trovato un bel po’ di problemi nell’avviare l’installazione dell’IDE e nella successiva installazione della licenza.

Dal sito ufficiale va scaricato il pacchetto *.bin contenente tutto il necessario, ma una volta avviato si ottiene sempre il seguente errore:

eclipse.bin: xcb_xlib.c:52: xcb_xlib_unlock: Assertion `c->xlib.lock’ failed

Per risolvere questo problema basterà inserire dentro ~/.bashrc questa riga:
export LIBXCB_ALLOW_SLOPPY_LOCK=1

e ricaricare il file:
source ~/.bashrc

Procedete quindi nell’installazione e completatela. Al termine dovrebbe apparire il wizard per inserire la licenza ma a noi non è mai apparso, forse per problemi di MAC address sulla macchina virtuale (lavoriamo dietro vmware). In definitiva abbiamo dovuto predisporre un nuovo pc con Linux nativo staccato dalla rete (probabilmente il file della licenza di valutazione viene automaticamente scaricato da internet), atteso che si presentasse il wizard, scaricata a mano la licenza dal sito di codesourcery e importata.

Solo dopo tutte queste modifiche/tentativi siamo riusciti finalmente a lavorare sul nuovo ambiente di sviluppo. Purtroppo però, abbiamo notato che ogni tanto Eclipse crasha inspiegabilmente e non abbiamo ancora capito il perché.