Modification d'un firmware pour le DG834G --Troisieme partie--
Par malphx le dimanche, novembre 11 2007, 23:17 - Netgear DG834G - Lien permanent
On arrive à la troisième partie, qui sera aussi la dernière de ce mini-tuto sur la création d'un firmware custom pour le DG834G.
Cette partie va traiter de la recompilation du noyau, puis de son intégration dans l'image du firmware.
ATTENTION
Cette manipulation est de loin la plus dangereuse pour votre routeur.
Si vous n'avez jamais customisé/recompilé de noyau linux,
alors je vous déconseille fortement de vous lancer directement sur la recompilation du kernel pour le DG834G.
Pour les autres, dans la plupart des cas, la modification du kernel n'est pas nécessaire.
Elle n'est nécessaire que pour l'ajout d'une fonctionnalité nécessitant un support au niveau du noyau.
Préparation des sources
- Renommage du repertoire source
Lors de la compilation du noyau le nom d'origine (DG834(G).V2.10.17_src) pose problème à cause des parenthèses.
On peut le renommer par exemple en V2.10.17_src, ou tout autre nom ne comportant pas de caractères spéciaux.
mv DG834(G).V2.10.17_src V2.10.17_src - Application du patch patch-knl
Depuis le repertoire source du firmware (maintenant V2.10.17) , les sources du noyau se trouvant dans le repertoire linux-2.4.17_mvl21
[root@evectra V2.10.17_src]# ls
apps
DG834B_V2.10.17.img
linux-2.4.17_mvl21
patch-apps
README
target.tar.bz2
uClibc-0.9.19
build.sh
fs.bin
MonFirmwareCustom.img
patch-knl
target
tools
[root@evectra V2.10.17_src]# patch -p0 < patch-knl
sortie tronquée******************
patching file linux-2.4.17_mvl21/net/Makefile.ipsecmd5
patching file linux-2.4.17_mvl21/net/Makefile.preipsec
patching file linux-2.4.17_mvl21/net/Makefile.wipsec
patching file linux-2.4.17_mvl21/net/atm/Makefile
patching file linux-2.4.17_mvl21/net/atm/br2684.c
patching file linux-2.4.17_mvl21/net/atm/common.c
patching file linux-2.4.17_mvl21/net/atm/pppoatm.c
patching file linux-2.4.17_mvl21/net/atm/pppoatm.c.3.5
patching file linux-2.4.17_mvl21/net/atm/pvc.c
patching file linux-2.4.17_mvl21/net/ax25/ax25_ds_in.c
patching file linux-2.4.17_mvl21/net/ax25/ax25_ds_subr.c
patching file linux-2.4.17_mvl21/net/bluetooth/af_bluetooth.c
patching file linux-2.4.17_mvl21/net/bluetooth/hci_core.c
***********Le patch modifie les sources du noyau original de montavista, il ajoute le support des éléments spécifiques à la plateforme du routeur.
Point important, le patch créé aussi le fichier .config qui contient toute la configuration pour la compilation par défaut.
En clair, on peut dire qu'après l'application du patch, le noyau serait prêt à être compilé.
Modification/personalisation
Que vous dire ici, sinon que cela se passe exactement comme pour un noyau linux :D.
Mais à moins de savoir exactement ce que vous faites, je vous déconseille de modifier le paramètrage d'origine... (retrait d'option / modification de valeur pour la flash...)
Que faire alors ?A vous de voir pourquoi vous voulez recompiler ce noyau
Quelques idées:Ajout de fonction au niveau ipsec, ajout de modules iptables pour profiter de toute la puissance de ce parefeu, etc...
Compilation
Vos modifications sont faites ?
il ne reste plus qu'à compiler et générer une image intégrable dans le firmware.
Pour cette partie, vous aurez besoin de l'utilitaire dgfirmware qui va permettre de fusionner le noyau avec l'image du firmware.
De plus, j'ai utilisé une toolchain différente: mips-fp-le, issue du previewkit de montavista.
Malheureusement, je n'ai plus le lien :(, mais comptez sur moi pour le mettre en ligne dès que possible.
Les étapes de la compilation:
- make dep
- make ram_zimage_pad
- make modules
Voila, on peut trouver maintenant dans le repertoire des sources du noyau un fichier nommé ram_zimage_pad.bin.
C'est ce fichier que nous allons fusionner dans l'image du firmware, et ce, à l'aide de dgfirmware
Voici la syntaxe de cet utilitaire:
[root@evectra DG834G.V2.10.09_src]# ./dgfirmware -husage: dgfirmware [|opts|] |img| |img| firmware image filename |opts| -h print this message -f fix the checksum -x |file| extract the rootfs file to |file| -xk |file| extract the kernel to |file| -m |file| merge in rootfs filrom |file| -k |file| merge in kernel from |file| -w |file| write back the modified firmware
La commande sera donc de la forme: ./dgfirmware -f -k ram_zimage_pad.bin -w MonfirmwareCustom.img DG834G_V2.10.17.img
Ou:
-f => fixe le checksum de la nouvelle image (calcul du CRC)
-k ram_zimage_pad.bin => image du noyau à fusionner
-w MonfirmwareCustom.img => Nom de la nouvelle image intégrant notre kernel
DG834G_V2.10.17.img => Image du firmware original.
[root@evectra DG834G.V2.10.09_src]# ./dgfirmware -f -k ram_zimage_pad.bin -w MonfirmwareCustom.img DG834G_V2.10.17.img
Read firmware file
Firmware product: DG834
Firmware version: 1.42.09
Read kernel file
image checksum = 1f86
real checksum = ab3c
Bad Checksum, fix it
Write image file
Bien que la sortie indique un Bad Checksum, dgfirmware a bien corrigé le checksum.Pour en être sur:
[root@evectra DG834G.V2.10.09_src]# ./dgfirmware -f MonfirmwareCustom.img
Read firmware file
Firmware product: DG834
Firmware version: 1.42.09
image checksum = ab3c
real checksum = ab3c
Checksum is correct, good
Ben on dirait que ça y est :D
Il ne reste plus qu'à tester en flashant le routeur.
Mais n'oublie pas que l'utilitaire de recovery est ton ami
Commentaires