Accueil
ADSL AH4021 AH4222 bcm963xx broadcom Classe CodeGear Cpp CppBuilder Delphi driver DSL embarcadero Embedded free Freeware Gratuit linux Modem neufbox OpenSource OpenWRT svn TECOM TVariable

+ Tous les mots clés

Plan d'une nouvelle tentative de fonctionnement d'un driver ADSL sur BCM963xx PDF Imprimer Envoyer
Note des utilisateurs: / 0
MauvaisTrès bien 
Vendredi, 19 Juin 2009 23:21

Plan d'une nouvelle tentative de fonctionnement d'un driver ADSL sur BCM963xx

Avant de continuer à lire la suite de cet article, je vous conseil de lire les deux articles précédents pour comprendre la mise en situation :

Cet article sera mis à jour au fil du temps. Je crois que le flux RSS n'informe pas des mises à jour des articles.

Comme nous l'avons déjà vu, quelques tentatives ont eu lieu pour faire fonctionner le driver actuel sur OpenWRT. Pour l'instant, je ne compte pas trop sur l'aide d'un constructeur pour ce driver. La documentation technique n'est toujours pas disponible, il va donc falloir à nouveau contourner le problème.

J'entrevois trois solutions a ce problème, un wrapper et l'écriture d'un nouveau driver basé sur une partie du code source d'une puce plus ancienne et l'écriture d'un nouveau driver basé sur du reverse engineering.

Il y a de fortes chances que je n'arrive pas aux résultats escomptés.

Concernant le wrapper : En premier, il va falloir modifier les binaires des drivers pour pouvoir intercaler le wrapper entre ces fichiers et le kernel. Une fois que nous auront la liste des fonctions non compatible avec OpenWRT, il faudra écrire le code qui permettra la compatibilité.

A ce niveau, la difficulté se situe au niveau des fichiers dev.c et skbuff.c.

Je devrais avoir fini cette partie en septembre et j'intégrerai le résultat dans cet article.

Quant à la deuxième solution, je vais partir sur la base des fichiers que j'ai trouvés pour une autre puce. Comme je n'ai pas regardé le contenu de ces fichiers, je ne peux pas planifier quoi que ce soit à ce niveau pour cette solution. Et il faudra surement utiliser partiellement la 3ème solution pour faire fonctionner celle-ci.

La 3ème solution est la plus longue, la plus difficile et la plus incertaine. Je serai surement découragé avant d'y arrivé. Je pense passer par un décompilateur - désassembleur pour obtenir soit de l'assembleur (j'en ai trouvé deux mais je ne les ai pas encore essayés) soit un mélange d'assembleur et de C ou C++ (n'ayant rien trouvé pour le faire, il me faudra créer l'outil adéquat). Une fois ceci fait, il faut encore passer par une phase de compréhension du code (on peut déterminer quelles parties du code posent problème puisqu'on les a déjà identifiées avec la 1ère solution). Puis faire l'inverse, surement en code assembleur puisque l’on n’aura pas de fichier totalement en C ou C++.

Ces solutions consistent à continuer les pistes que j'ai abandonnées il y a quelques temps. Je le ferais quand j'en aurais le temps.
 

Mise à jour de la progression :

Ayant récupéré les sources disponibles sur le dernier SVN d'openWRT, j'ai pu obtenir un firmware. A noté qu'il ne m'est plus nécessaire de passer par les outils de constructions fourni par le fabriquant du modem, openWRT génère un firmware que l'on peut directement mettre à jour par le CFE sur la console.
 
Par contre, j'ai cru comprendre qu'il y a deux drivers différents pour le chien de garde (watchdog). Celui qu'il y avait par défaut ne fonctionne pas correctement sur mon système. J'ai donc du remplacer le contenu du fichier dev-wdt.c par celui du driver du fabricant qui se contente de le désactiver.
 
Je n'ai que peu de mémoire disponible sur mon modem, je n'ai donc pas pu y inclure toutes les fonctionnalités que je voulais mais l'essentiel est déjà la (Ethernet, wifi, interface web, ...).
 
Il ne reste plus que la partie modem et voip qui ne fonctionne pas. OpenWRT a introduit une mise à jour qui indique qu'ils sont en train de résoudre ces problèmes. La partie voip ne m'intéresse pas pour l'instant, je me concentre sur la partie adsl. J'espère qu'ils y arriveront avant moi pour que je puisse m'occuper d'autres projets en attente.
 
J'ai regardé du coté des décompilateur, c'est à dire ceux qui fournissent du C, et j'en ai trouvé quelques uns. Le meilleur est un produit commecial. C'est IDA associé à son plugin hex-rays. J'ai pu tester IDA 5.2 avec le plugin 1.0 et malheureusement, il n'est pas compatible mips. On obtient de l'assembleur. Une version 5.5/1.1 est sortie mais je n'ai pas plus d'informations si ce n'est que le code C s'approche encore plus des sources originales.
Il y a aussi  rec22 qui permet de décompiler mais on n'obtient pas grand chose d'exploitable.

Je me suis penché sur boomerang. J'ai réussit à le compiler ainsi que son interface graphique mais la partie mips est désactivée. J'ai essayé de le réactivé mais j'obtiens une erreur de lieur. D'après les exemples fourni sur le site officiel, il devrait être assez bon sauf que la partie mips n'est pas encore au stade alpha.

J'en ai trouvé d'autres mais je n'ai pas pu tous les essayer. Je compte me basé sur quelques informations donné par IDA associé à boomerang s'il fonctionne et rec22 pour essayer d'obtenir un code source qu'il faudra retravailler notamment pour retrouver les type de retour des fonctions et les types des variables en entrée/sortie.

ADSL | AH4021 | AH4222 | Assembleur | bcm63xx | bcm963xx | boomerang | brcm963xx | broadcom | Club-internet Box | Compilateur | Décompilateur | Désassembleur | driver | DSL | embarqué | Embedded | Firmware | kernel | linux | livebox | mips | Modem | neufbox | OpenSource | OpenWRT | rec22 | routeur | SFR box | TECOM | Wrapper

Mise à jour le Vendredi, 17 Juillet 2009 14:27
 
Copyright © 2020 Flyonsoft. Tous droits réservés.
Vous pouvez réutiliser les codes sources fourni sur ce site mais vous devez y mettre un lien vers la page du code ou à défaut sur la page www.flyonsoft.com.