KERNEL 2.6.12 et IPW2200

KERNEL 2.6.12 et IPW2200 - Linux et OS Alternatifs

Marsh Posté le 20-06-2005 à 23:33:59    

Bonjours !
 
Je viens de compiler le nouveau kernel 2.6.12, mais quand je compile le driver IPW2200 ça me donne cette erreur :
 

Citation :

make -C /lib/modules/2.6.12-mr-ti.com/build SUBDIRS=/root/ipw2200/ipw2200-1.0.4 MODVERDIR=/root/ipw2200/ipw2200-1.0.4 modules
make[1]: Entering directory `/usr/src/linux-2.6.12'
  CC [M]  /root/ipw2200/ipw2200-1.0.4/ipw2200.o
In file included from /root/ipw2200/ipw2200-1.0.4/ipw2200.h:50,
                 from /root/ipw2200/ipw2200-1.0.4/ipw2200.c:33:
/root/ipw2200/ipw2200-1.0.4/net/ieee80211.h:722: error: redefinition of `is_multicast_ether_addr'
include/linux/etherdevice.h:67: error: `is_multicast_ether_addr' previously defined here
make[2]: *** [/root/ipw2200/ipw2200-1.0.4/ipw2200.o] Erreur 1
make[1]: *** [_module_/root/ipw2200/ipw2200-1.0.4] Erreur 2
make[1]: Leaving directory `/usr/src/linux-2.6.12'
make: *** [modules] Erreur 2


 
Quelqun aurait-il eu cette erreur ?
 
merci d'avance ...

Reply

Marsh Posté le 20-06-2005 à 23:33:59   

Reply

Marsh Posté le 21-06-2005 à 15:52:12    

oui j'ai exactement la même, je ne sais pas pourquoi, mais j'ai posté dans le topic officiel  
 
http://forum.hardware.fr/hardwaref [...] 1401-1.htm

Reply

Marsh Posté le 21-06-2005 à 16:11:09    

Bha suffit de lire, c'est marqué, y'a une variable redéfinie, z'avez qu'a la renommer proprement dans un des deux ( de préférence dans le driver ipw2200 ), et ca devrait aller ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 21-06-2005 à 16:25:15    

lol ok merci.. je vais essayer

Reply

Marsh Posté le 21-06-2005 à 16:44:21    

ça marche nickel, mais question, je connais pas bcp le c, y a une notation à suivre ? parce que la j'ai juste rajouté un 2 à la fonction, est c'est assez moche mdr

Reply

Marsh Posté le 21-06-2005 à 16:47:43    

montre le bout de code que t'as touché pour voir ... ( avec l'original de pref ... )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 22-06-2005 à 10:50:57    

désolé pour le temps de réponse...
 

Code :
  1. extern inline int is_multicast_ether_addr2(const u8 *addr)
  2. {
  3. return ((addr[0] != 0xff) && (0x01 & addr[0]));
  4. }


 
L'original est pareil sauf sans le 2, et tous les appels de la fonction dans les autre fichiers ont été modifiés. voila..

Reply

Marsh Posté le 22-06-2005 à 13:08:13    

merci beaucoup pour vos réponses !
je vais aissayer ça

Reply

Marsh Posté le 22-06-2005 à 15:14:54    

L0k a écrit :

désolé pour le temps de réponse...
 

Code :
  1. extern inline int is_multicast_ether_addr2(const u8 *addr)
  2. {
  3. return ((addr[0] != 0xff) && (0x01 & addr[0]));
  4. }


 
L'original est pareil sauf sans le 2, et tous les appels de la fonction dans les autre fichiers ont été modifiés. voila..


 
Si t'as modifié les appels de fonctions dans les fichiers ca va alors ;)
( Sinon il serait entrain d'appeller l'autre fonction (celle du fichier du kernel qui entre en conflit et la ... aieaieaie :/ )
 
tu peut ptêtre poster un diff pour faciliter la chose pour les autres ;) (bien qu'il est fort possible qu'un patch plus "propre" existe sous peu...
D'ailleurs si ca se trouve la fct qui est dans le kernel est la même et il a été décidé de l'integrer ( faudrait aller voir le code) et dans ce cas la, la manip propre serait de virer la déclaration faite dans le module ipw2200 ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 22-06-2005 à 18:02:16    

dans le kernel il y a ça comme code, ça ressemble bcp  
 

Code :
  1. /**
  2. * is_zero_ether_addr - Determine if give Ethernet address is all
  3. * zeros.
  4. */
  5. static inline int is_zero_ether_addr(const u8 *addr)
  6. {
  7. return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
  8. }
  9. /**
  10. * is_multicast_ether_addr - Determine if the given Ethernet address is a
  11. * multicast address.
  12. *
  13. * @addr: Pointer to a six-byte array containing the Ethernet address
  14. *
  15. * Return true if the address is a multicast address.
  16. */
  17. static inline int is_multicast_ether_addr(const u8 *addr)
  18. {
  19. return addr[0] & 0x01;
  20. }
  21. /**
  22. * is_valid_ether_addr - Determine if the given Ethernet address is valid
  23. * @addr: Pointer to a six-byte array containing the Ethernet address
  24. *
  25. * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
  26. * a multicast address, and is not FF:FF:FF:FF:FF:FF.
  27. *
  28. * Return true if the address is valid.
  29. */
  30. static inline int is_valid_ether_addr(const u8 *addr)
  31. {
  32. /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
  33.  * explicitly check for it here. */
  34. return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
  35. }


 
mais dans ce cas je me demande si il faudrait pas plutot utiliser is_valid_ether_addr ?


Message édité par L0k le 22-06-2005 à 18:07:30
Reply

Marsh Posté le 22-06-2005 à 18:02:16   

Reply

Marsh Posté le 22-06-2005 à 20:07:34    

Nan il faut pas utiliser is_valid, il teste le contraire justement.
je sais pas ce que ca implique que l'adresse commence par ff ( c'est la seule diff entre la version du kernel et celle du module ), je suis entrain de vérifier, mais a terme je pense qu'il faut utiliser celle du kernel ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 22-06-2005 à 20:14:52    

bon disons que c'est provisoire de toute façon, la prochaine version du pilote sera corrigée merci de tes conseils en tt cas.

Reply

Marsh Posté le 22-06-2005 à 20:21:06    

Bon de ce que j'ai vu, ff:ff:ff:ff:ff:ff est une adresse de broadcast (utilisé notament par ARP) ne tester que le premier ca doit être une version "rapide" du test de broadcast je suppose, pour être "propre" il faudrait donc :
 
- virer la déclaration de is_multicast_ether_addr() dans le module
- avoir une fonction is_broadcast_ether_addr() ( qui test ff ) (ptêtre qu'elle existe déja )
- que le module face un is_multicast && !is_broadcast à la place de l'ancien multicast.
 
Alternativement, on pourrait voir ce qui se passe si on utilise simplement le test is_multicast du noyo sans utiliser de is_broadcast, peut-être que d'avoir un "true" en cas de broadcast ne gène en rien la carte, et ca serait l'idéal, bonne séance de test si ca te dis ^^
 
Enfin le patch que t'as fait suffit amplement pour le moment, mais je suis curieux de voir la décision qui sera finalement prise ...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 22-06-2005 à 21:01:43    

ouais ça serait intéressant de voir, mais j'ai pas de résau wifi à portée en ce moment.. je peux toujours voir si ça plante pas le tout.. mais je peux faire aucun tests..


Message édité par L0k le 22-06-2005 à 21:02:00
Reply

Marsh Posté le 22-06-2005 à 21:09:40    

mhh (addr[0] != 0xff) je sais pas si c'est un test broadcast rapide, parce que juste après dans le code du modules y a un fonction pour vérifier si c'est broadcast...
 

Code :
  1. extern inline int is_broadcast_ether_addr(const u8 *addr)
  2. {
  3. return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) &&   \
  4.  (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
  5. }


 
et la ça vérifie tout.
 
Y a p'tet des spécfication particulières pour un multicast qui interdit d'avoir 0xff sans pour autant que ça soit du broadcast...

Reply

Marsh Posté le 22-06-2005 à 21:42:11    

utilisez le patch mm1 -> il contient les ipw2200 ainsi que reiser4

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed