web-dev-qa-db-fra.com

Erreur de compilation du pilote b43 corrigé pour Ubuntu 12.04

J'ai essayé ceci Comment installer ce pilote b43 patché? guide pour installer le pilote b43 patché sur Ubuntu 12.04 avec un noyau générique 3.2.0-31 mais je ne peux pas passer la phase de compilation. fait:

wget http://www.orbit-lab.org/kernel/compat-wireless-3-stable/v3.1/compat-wireless-3.1.1-1.tar.bz2 cd compat- sans fil-3.1.1-1 /

scripts/sélection de pilote b43

make

make -C /lib/modules/3.2.0-31-generic/build M=/home/marco/compat-wireless-3.1.1-1 modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-31-generic'
  CC [M]  /home/marco/compat-wireless-3.1.1-1/compat/main.o
In file included from /home/marco/compat-wireless-3.1.1-1/include/linux/compat-2.6.29.h:5:0,
                 from /home/marco/compat-wireless-3.1.1-1/include/linux/compat-2.6.h:24,
                 from <command-line>:0:
include/linux/netdevice.h:1153:5: warning: "IS_ENABLED" is not defined [-Wundef]
include/linux/netdevice.h:1153:15: error: missing binary operator before token "("
include/linux/netdevice.h: In function ‘netdev_uses_dsa_tags’:
include/linux/netdevice.h:1421:9: error: ‘struct net_device’ has no member named ‘dsa_ptr’
include/linux/netdevice.h:1422:31: error: ‘struct net_device’ has no member named ‘dsa_ptr’
include/linux/netdevice.h: In function ‘netdev_uses_trailer_tags’:
include/linux/netdevice.h:1431:9: error: ‘struct net_device’ has no member named ‘dsa_ptr’
include/linux/netdevice.h:1432:35: error: ‘struct net_device’ has no member named ‘dsa_ptr’
make[3]: *** [/home/marco/compat-wireless-3.1.1-1/compat/main.o] Error 1
make[2]: *** [/home/marco/compat-wireless-3.1.1-1/compat] Error 2
make[1]: *** [_module_/home/marco/compat-wireless-3.1.1-1] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-31-generic'
make: *** [modules] Error 2

Pour corriger cette erreur, j'ai ajouté #include <linux/kconfig.h> vers /usr/src/linux-headers-3.2.0-31-generic/include/linux/netdevice.h mais maintenant j'obtiens autre chose

make

make -C /lib/modules/3.2.0-31-generic/build M=/home/marco/compat-wireless-3.1.1-1 modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-31-generic'
  CC [M]  /home/marco/compat-wireless-3.1.1-1/compat/main.o
  LD [M]  /home/marco/compat-wireless-3.1.1-1/compat/compat.o
  CC [M]  /home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.o
In file included from /home/marco/compat-wireless-3.1.1-1/include/linux/bcma/bcma.h:9:0,
                 from /home/marco/compat-wireless-3.1.1-1/drivers/bcma/bcma_private.h:8,
                 from /home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:8:
/home/marco/compat-wireless-3.1.1-1/include/linux/ssb/ssb.h: In function ‘ssb_driver_register’:
/home/marco/compat-wireless-3.1.1-1/include/linux/ssb/ssb.h:236:36: error: ‘THIS_MODULE’ undeclared (first use in this function)
/home/marco/compat-wireless-3.1.1-1/include/linux/ssb/ssb.h:236:36: note: each undeclared identifier is reported only once for each function it appears in
In file included from /home/marco/compat-wireless-3.1.1-1/drivers/bcma/bcma_private.h:8:0,
                 from /home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:8:
/home/marco/compat-wireless-3.1.1-1/include/linux/bcma/bcma.h: In function ‘bcma_driver_register’:
/home/marco/compat-wireless-3.1.1-1/include/linux/bcma/bcma.h:170:37: error: ‘THIS_MODULE’ undeclared (first use in this function)
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c: At top level:
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:12:20: error: expected declaration specifiers or ‘...’ before string constant
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:13:16: error: expected declaration specifiers or ‘...’ before string constant
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:182:1: warning: data definition has no type or storage class [enabled by default]
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:182:1: warning: type defaults to ‘int’ in declaration of ‘EXPORT_SYMBOL_GPL’ [-Wimplicit-int]
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:182:1: warning: parameter names (without types) in function declaration [enabled by default]
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:188:1: warning: data definition has no type or storage class [enabled by default]
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:188:1: warning: type defaults to ‘int’ in declaration of ‘EXPORT_SYMBOL_GPL’ [-Wimplicit-int]
/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.c:188:1: warning: parameter names (without types) in function declaration [enabled by default]
make[3]: *** [/home/marco/compat-wireless-3.1.1-1/drivers/bcma/main.o] Error 1
make[2]: *** [/home/marco/compat-wireless-3.1.1-1/drivers/bcma] Error 2
make[1]: *** [_module_/home/marco/compat-wireless-3.1.1-1] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-31-generic'
make: *** [modules] Error 2

Une suggestion à essayer ensuite?

2
Zed

Face au même problème, j'ai dû modifier de nombreux fichiers à corriger.

/usr/src/linux-headers-3.2.0-31-generic/include/linux/netdevice.h
bcm4331/compat-wireless-2011-08-27/include/linux/compat-2.6.h
bcm4331/compat-wireless-2011-08-27/drivers/net/wireless/b43/main.c
bcm4331/compat-wireless-2011-08-27/drivers/net/wireless/b43legacy/main.c
bcm4331/compat-wireless-2011-08-27/drivers/net/wireless/b43/pio.c
bcm4331/compat-wireless-2011-08-27/net/mac80211/mlme.c
bcm4331/compat-wireless-2011-08-27/net/mac80211/rate.c
bcm4331/compat-wireless-2011-08-27/net/wireless/core.c
bcm4331/compat-wireless-2011-08-27/net/wireless/util.c
bcm4331/compat-wireless-2011-08-27/net/wireless/reg.c
bcm4331/compat-wireless-2011-08-27/net/wireless/nl80211.c

ajoutant principalement

+#include <linux/module.h>
+#include <linux/export.h>

Lorsque le problème est causé par des chaînes, j'ai commenté les fonctions dans /usr/src/linux-headers-3.2.0-31-generic/include/linux/netdevice.h et d'autres fichiers.

//#if IS_ENABLED(CONFIG_NET_DSA)
//      struct dsa_switch_tree  *dsa_ptr;       /* dsa specific data */
//#endif

//#ifdef CONFIG_NET_DSA_TAG_DSA
//      if (dev->dsa_ptr != NULL)
//              return dsa_uses_dsa_tags(dev->dsa_ptr);
//#endif

//#ifdef CONFIG_NET_DSA_TAG_TRAILER
//      if (dev->dsa_ptr != NULL)
//              return dsa_uses_trailer_tags(dev->dsa_ptr);
//#endif

ou adding = false dans l'instruction de déclaration pour une variable dans un fichier.

Je ne suis pas un développeur C mais PHP dev mais simplement en suivant le make debug et cela a fonctionné ensuite avec:

Sudo ./b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" ../broadcom-wl-5.100.138/linux/wl_apsta
0
Interchouette