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:

  1. En construire une
  2. 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
A la fin de cette dernière étape, la toolchain est prête à l''emploi .

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 importante
A 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.bz2
tar 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. ;)
@+