Modification d''un firmware pour le DG834G --Premiere partie--
Par malphx le dimanche, novembre 11 2007, 22:52 - Netgear DG834G - Lien permanent
Voila, je me suis dis qu''il était temps de faire un petit article traitant ce sujet.
Vous
trouverez dans cette série d'articles, (tout) ce qu''il faut savoir
pour démarrer la création d''un firmware custom pour le DG834(G) V1 ou V2.
Bonne lecture :D
Cette première partie traitera de la préparation des différents élements permettant de travailler sur le firmware du DG834(G).
Mais avant de commencer, je tiens tout de même à préciser qu''il est conseillé d'avoir une bonne connaissance du système Linux,ainsi que quelques bases concernant la compilation de sources sous linux.
Matériel requis
- Une machine Linux
Software requis
- Une toolchain Linux MIPS
Pour ma part, j''utilise la toolchain fournie par Linksys pour son routeur WRT54g,que vous pourrez trouver sur le site de Linksys, partie GPL code.
- Les sources GPL du firmwar
disponible ici
- L''utilitaire dgfirmware (créé par les membres du projet OpenDG834)
Disponible ici en version source.
Installation de la toolchain
Pourquoi une toolchain MIPS ?
C''est très simple, le DG834G est architecturé autour d''un System On Chip (SoC) de la famille AR7 de Texas Instrument.
Le processeur de ce SoC est un MIPS 4KEc cadencé à 150Mhz.Il nous faut donc une toolchain permettant de générer des binaires dans un format reconnu par ce processeur.
Nous allons grâce à cette toolchain, cross-compiler pour le DG834G. C'est à dire compiler des sources sur un type d'architecture machine (Intel x86 pour la plupart je pense), mais générer en sortie des executables pour architecture différente, en l'occurence Mips LE. (LE pour Little Endian).
Pour la toolchain, deux possibilités:
- En construire une
- utiliser une toolchain déjà construite :D
Vous trouverez plus bas une description de l''installation d''une toolchain "prête à l'emploi", puisque c''est le choix que j'ai fais.
IMPORTANT: Cet article ne décrit pas la construction d'une toolchain MIPS.
Si vous cherchez des informations sur la construction => Google est votre ami !
Note: la description qui suit est faite à partir de l''archive wrt54g.2.02.7.tgz provenant du site Linksys (lien plus haut) .
En avant pour l''install !Une fois le tarball téléchargé:
- Decompression
On obtient le repertoire WRT54G
- Copie de la toolchain sous /opt
Elle se trouve dans le repertoire WRT54G/tools/brcmil faut copier brcm vers /opt
- Modification de la variable $PATH
Il faut ajouter les chemins: /opt/brcm/hndtools-mipsel-linux/bin et /opt/brcm/hndtools-mipsel-uclibc/bin à la variable PATH.
- Création de liens symboliques
On va créer des liens symboliques pour que les fichiers contenus sous /opt/brcm/hndtools-mipsel-uclibc/bin soit de la forme : mipsel-uclinux-*
Pour cela, il faut depuis le repertoire /opt/brcm/hndtools-mipsel-uclibc/bin, lancer cette commande:for i in ''ls''; do ln -s $i ${i/uclibc/uclinux}; done
Le résultat final pour ce repertoire:[root@evectra bin]# lsmipsel-uclibc-addr2line mipsel-uclibc-g++ mipsel-uclibc-objcopy mipsel-uclinux-addr2line mipsel-uclinux-g++ mipsel-uclinux-objcopymipsel-uclibc-ar mipsel-uclibc-gasp mipsel-uclibc-objdump mipsel-uclinux-ar mipsel-uclinux-gasp mipsel-uclinux-objdumpmipsel-uclibc-as mipsel-uclibc-gcc mipsel-uclibc-ranlib mipsel-uclinux-as mipsel-uclinux-gcc mipsel-uclinux-ranlibmipsel-uclibc-c++ mipsel-uclibc-ld mipsel-uclibc-size mipsel-uclinux-c++ mipsel-uclinux-ld mipsel-uclinux-sizemipsel-uclibc-cc mipsel-uclibc-ldd mipsel-uclibc-strings mipsel-uclinux-cc mipsel-uclinux-ldd mipsel-uclinux-stringsmipsel-uclibc-cpp mipsel-uclibc-nm mipsel-uclibc-strip mipsel-uclinux-cpp mipsel-uclinux-nm mipsel-uclinux-strip
Les sources du firmware
Une fois téléchargée et décompressée, l''archive nous livre ses secrets:[root@evectra V2.10.17_src]# lsapps build.sh DG834B_V2.10.17.img linux-2.4.17_mvl21 patch-apps patch-knl README target.tar.bz2 tools uClibc-0.9.19
Petite description de l''ensemble:
apps: repertoire contenant les diverses applications opensource utilisée dans le firmware du DG.
build.sh: script permettant la reconstruction du firmware.
DG834B_V2.10.17.img: Image binaire du firmware (identique à celle que vous telecharger sur le routeur pour faire une mise à jour).
linux-2.4.17_mvl21: repertoire contenant les sources du noyau Linux.
patch-apps et patch-knl: respectivement, un patch à appliquer sur les sources des applications et un patch à appliquer sur les sources du noyau.
target.tar.bz2: Dans cette archive se trouve le root fs, une fois decompressé un repertoire target.
tools: repertoire contenant les outils permettant la création de l'image binaire:
- 7zip: Utilitaire de compression, utilisé au moment de la compilation du kernel (compression lzma)
- lzma: Utilitaire de compression, utilisé lors de la compression du filesystem SquashFS.
- makeImage: Utilitaire permettant la création de l''image binaire, remplace dans l''image du firmware la partie "rootfs" et y ajoutant l''image du filesystem "target" transformé en SquashFS compressé.
- mksquashfs: Utilitaire permettant la transformation du filesystem "target" en SquashFS 2.
uClibc-0.9.19: repertoire contenant la librairie C (version source).
Note importanteA ma connaissance, seule les sources du firmware 2.10.17 fournissent tous les utilitaires permettant de modifier n''importe quelle partie du firmware (Kernel et rootfs).
Dans les versions précédentes, l''utilitaire 7zip permettant la compression du kernel n''était pas fournit, et il semble que ce soit une version "exotique" de ce dernier.
En effet, le 7zip officiel ne permet pas d''obtenir un kernel valide.
Pour en terminer avec la préparation de l''environnement de travail, il ne reste plus qu'à decompresser l''archive target.tar.bz2tar jxvf target.tar.bz2
On obtient ainsi le repertoire target, qui va nous permettre d'ajouter/retirer ce que nous voulons au rootfs.
Voila, c''est la fin de ce premier article.
Notre machine est prête pour commencer le travail.
Dans la seconde partie, je traiterai un exemple de modification puis de reconstruction de l'image du firmware en vue de son téléchargement sur ce bon vieux routeur.
@+
Commentaires