Print This Page

Compilation du firmware


Attention! prenez en compte la mise en garde de netgear:

Opening the router housing or putting in any customer software on the router will void the warranty on your router

Ouvrir le boitier du routeur ou y charger un logiciel personnel annulera la garantie de votre routeur.
Les opérations proposées ici sont à réaliser en connaissance de cause et à vos propres risques et périls!

Première étape : choisir la bonne version. Il y a plusieurs versions du firmware sur le site de netgear, choisissez la suivante : WW Firmware Version 1.0.1_10.17 si vous ne voulez pas comme moi compiler une version en coréen...
Choisissez un répertoire de travail et détarrez le fichier dans ce répertoire. Vous récupérez un fichier toolchain_mips_20050831.tar.bz2 et un répertoire KWGR614_V1.0.1_10.17WW.
Construire le firmware sur votre pc linux implique d'effectuer une 'cross-compilation', c'est à dire utiliser une architecture pour construire un programme à destination d'une autre architecture. Pour cela il vous faut installer un 'toolchain kit'.
Les sources de netgear supposent que ce toolchain est installé sur la racine de votre arborescence. Comme indiqué dans le guide il vous faut donc passer root et effectuer les commandes suivantes:
cd/
mkdir uclibc
cd uclibc
tar jxvf toolchain_mips_20050831.tar.bz2
mv toolchain_mips.pv.0831 toolchain_mips

 Plaçons nous maintenenant dans le répertoire KWGR614_V1.0.1_10.17WW. La compilation du firmware comprend celle d'un noyau unix et d'utilitaires. Pour lancer la compilation il faut générer des fichiers de configuration. La commande 'make menuconfig' permet de générer ces fichiers. Il est possible que vous ayez besoin d'installer un paquetage du type ncurses-devel, ou l'équivalent sur votre système linux.


capture ecran menuconfig

Entrez dans le menu de selection de plateforme et sélectionnez 'customize Kernel Settings', ce qui vous permettra de forcer la création d'un fichier de configuration pour le noyau, même si vous ne modifiez pas les valeurs pré-sélectionnées. La compilation se déroule pendant un instant, puis le "menuconfig" du noyau s'affiche:

menu de selection 2

Sortez ensuite, en validant la sauvegarde de la nouvelle configuration


menu 3

La construction s'enchaîne ensuite avec les choix d'options pour le noyau. Ne modifiez rien et sortez directement en validant la création du fichier de configuration.

Avant de passer à la compilation effective du logiciel, il faut corriger un bug dans un des makefiles de la distribution. Cela peut se faire en éditant le fichier "vendors/Realtek/RTL865XB/Makefile". Il faut y modifier toutes les instructions "done\" ou "then\" en inserant une espace entre l'instruction et le caractère \. Avec vi il suffit de lancer les deux commandes suivantes:

:1,$s/done\\/done \\/
:1,$s/then\\/then \\/

Une autre méthode consiste à utiliser un fichier de patch. Vérifiez que vous êtes bien dans le répertoire KWGR614_V1.0.1_10.17WW. Téléchargez le fichier suivant   patch_KWGR614_V1.0.1_10.17WW_RTL865XB_Makefile_hvdp_20070830 dans le répertoire père, puis appliquez le patch

cat ../patch_KWGR614_V1.0.1_10.17WW_RTL865XB_Makefile_hvdp_20070830|patch -p1 -b

La commande devrait retourner le diagnostic suivant: "patching file vendors/Realtek/RTL865XB/Makefile".

Pour marquer votre passage, vous pouvez modifier l'identifiant du firmware en éditant le fichier user/dniutil/nvram_realtek.c (et pas user/dni/nvram_realtek.c comme indiqué dans la doc), et en remplaçant la ligne
#define OS_VERSION      "V1.0.1_10.17"

par ce qui vous convient, par exemple

#define OS_VERSION      "V1.0.1_10.17_Custom_hvdp_20070830"

Enfin dernière précaution avant de lancer la compilation, sachez que la génération du firmware implique la création d'un système de fichier cramfs représentant l'image du système de fichier de votre routeur. Il s'agit d'un système de fichier linux en lecture seule, qui comporte notamment des fichiers spéciaux et des liens qui ne peuvent être créés que par un utilisateur privilégié. Il faut donc que vous ajoutiez le user qui vous sert à compiler dans la liste des sudoers (/etc/sudoers) en insérant une ligne du genre:

monuser    ALL=(ALL)       ALL

Attention! ce faisant vous attribuez de façon permanente des privilèges root à l'utilisateur en question.

La compilation s'effectue ensuite en lançant les commandes

make dep
make

 Après un bon moment, le système vous demandera le mot de passe de votre user pour valider les commandes en sudo. Il génèrera ensuite un fichier "images/run.bix " qui est votre nouveau firmware! Il ne reste plus qu'à le tester en upgradant de la façon habituelle votre routeur.