Sabato, 31 luglio 2010 - 19:54

>> Modificare il firmware

Il firmware è composto da due file, il kernel Linux ed il filesystem.

Indice dei contenuti

Modificare il FS dlinkpedia

Requisiti: Ricompilare il kernel

Applicare ad un kernel vanilla 2.6.X (scaricato da kernel.org) la patch SquashFS+LZMA. Questa patch permette di poter gestire filesystem squashfs che usano la compressione LZMA (Lempel Ziv Markov-chain Algorithm, è un algoritmo di compressione dati basato su 7-zip e StuffiX): si ottengono così filesystem più compressi. Per applicarla leggere la documentazione di SquashFS.

Inoltre, sempre sul sito MCMCC, c'è una versione modificata di mksquashfs2 che permette di creare filesystem con compressione LZMA.

Procedura:

Una volta compilato il kernel, è possibile montare le immagini SquashFS:

# mount -t squashfs -o loop mia.immagine /mnt/somewhere

e copiare il contenuto in una cartella per modificarlo:

# cp -Rp /mnt/somewhere/ /home/fra/dlink

NOTA: -R copia le sottocartelle, mentre -p preserva i permessi originali dei file.

A questo punto è possibile modificare i file.

Creare filesystem compatibili con il kernel dlinkpedia

Per creare una nuova immagine (supponendo che in ~/dlink ci siano le cartelle var etc usr ecc.) è sufficiente digitare:

# mksquashfs /home/fra/dlink/ /home/fra/nuova.immagine -noappend


mksquashfs --help chiarià ogni dubbio.

(attenzione: sembra che -check_data renda il filesystem inutilizzabile)

Modificare filesystem dlink (v 2.0 quello con supporto adsl2+ ufficiale)

Si deve applicare la patch prima di tutto la patch "ufficiale" di squashfs al kernel 2.6.12.2 vanilla disponibile qui, poi applicare questa squashfs2.2_lzma.patch.

Ora si procede come sopra con un mount:

mount -t squashfs mia.immagine /mnt/squashfs -o loop,offset=0x81000

L' offset, in questo caso, serve perchè dalla versione 2.0 la dlink ha realizzato un unico file immagine che comprende kernel e filesystem, questa cifra esadecimale è stata trovata con un editor esadecimale, cercando la striga "hsqs".

Creare filesystem compatibili con il kernel originale dlink (v2.0)

Scaricare:

Supponendo che i file siano tutti all'interno della home (/home/utente) si procede con questi comandi:

mkdir lzma427
cd lzma427
tar -xjf ../lzma427.tar.bz2
patch -p1 < ../lzma427_zlib.patch 
cd SRC/7zip/Compress/LZMA_Lib
make 
cd
tar -xzf squashfs1.3r3.tar.gz
cd squashfs1.3r3
patch -p1 < ../squashfs1.3r3_lzma.patch
cd squashfs-tools
make

Creazione del filesystem:

./mksquashfs /home/utente/firmware fs-squashfs.img

se lo voglio firmare per rendere possibile l'aggiornamento via web, devo usare TIchksum

./tichksum ../squashrw.fs

Modificare filesystem dlink (v 1.0)

Scaricare SquashFS 1.3r3 di http://squashfs.sourceforge.net/ all'interno troverete le patch per le versioni supportate del kernel linux, da applicare come sempre ad un kernel vanilla. Poi si procede normalmente montandola e facendo una copia del contenuto del punto di mount.

Creare filesystem compatibili con il kernel originale del 302T (v 1.0)

Per creare filesystem compatibili con il kernel originale del 302T (tipo quello di Zwanky) bisogna usare la versione 1.3r3 di mksquashfs scaricabile qui.
Questo perchè il kernel originale del 302T supporta solo filesystem di tipo squashfs1.x

OpenWRT

http://wiki.openwrt.org/AR7Port

Link utili

http://www.beyondlogic.org/nb5/squashfs_lzma.htm


Contenuto disponibile sotto GNU Free Documentation License (www.gnu.org/copyleft/fdl.html).