Erreur lors de la compilation des pilotes pour Ralink RT2870

14

Im essayant d'installer des pilotes pour une carte sans fil rosewill RNX-N600UBE (chipset Ralink RT2870) sur Kali Linux. J'ai téléchargé les pilotes de leur site Web et les ai décompressés / décompressés, mais maintenant, lorsque j'essaie d'exécuter la commande «make», j'obtiens cette erreur.

/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.c:1156:20: error: incompatible types when assigning to type ‘int’ from type ‘kuid_t’
/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.c:1157:20: error: incompatible types when assigning to type ‘int’ from type ‘kgid_t’
make[4]: *** [/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.o] Error 1
make[3]: *** [_module_/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux] Error 2
make[2]: *** [sub-make] Error 2
make[1]: *** [all] Error 2
Renard
la source
Je pense que vous pourriez avoir besoin d'une version différente de quelque chose, peut-être du compilateur?
PlasmaPower
En guise de note secondaire, pourquoi quelqu'un de nouveau à Linux jouerait-il avec Kali? C'est une distribution pour les tests de sécurité et les attaques, remplie d'outils de bas niveau. Sûrement pas destiné à un utilisateur Linux
inexpérimenté

Réponses:

19

Le problème est que l'un des en-têtes / interfaces du noyau a changé dans un noyau 3.x récent. Là où les valeurs UID / GID étaient à l'origine appelées entiers normaux, ce sont maintenant des structures avec un seul élément. Tout code reposant sur l'ancienne définition ne pourra pas être compilé avant d'être mis à jour pour correspondre aux nouveaux en-têtes du noyau.

J'essaie actuellement de corriger une erreur similaire dans virtualbox-guest-utils pour mon installation Ubuntu; en théorie, la localisation et le remplacement des instances de ->i_uid =with ->i_uid.val =ou ->i_gid =with ->i_gid.val =sur les numéros de ligne signalés dans l'erreur devraient résoudre le problème (mais je ne peux pas garantir qu'à l'heure actuelle, la compilation échoue maintenant pour une erreur différente et sans rapport avec moi).

Votre meilleur pari est de contacter l'auteur d'origine de votre code pour une version mise à jour de la source qui fonctionne avec les noyaux les plus récents.

Jason Musgrove
la source
7
Testé! Cela fonctionne! J'ai changé current_fsuid()pourcurrent_fsuid().val
Jonathan
1
Pour moi, j'ai aussi dû changer current_fsgid()pourcurrent_fsgid().val
J'aime coder
@JonathanLeaders touché Merci. Cependant, le patch converti inten kuid_tsemble également faire l'affaire.
enthousiastegeek
10

J'ai trouvé un correctif aux erreurs de compilation dans un autre pilote sur ce site Web: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-fedora/

ci-dessous est le contenu du patch:

--- include/os/rt_linux.h   2013-09-12 13:27:14.000000000 +0800
+++ include/os/rt_linux.h.patched   2014-03-23 11:45:03.907628847 +0800
@@ -279,8 +279,8 @@ typedef struct file* RTMP_OS_FD;

 typedef struct _OS_FS_INFO_
 {
-   int             fsuid;
-   int             fsgid;
+   kuid_t              fsuid;
+   kgid_t              fsgid;
    mm_segment_t    fs;
 } OS_FS_INFO;
Geert Kroone
la source
1
Il s'agit d'une bonne solution de travail pour le pilote MT7601U, également utilisé pour le chipset Mediatek / Ralink 148F: 7601. (Oui,
j'ajoute
pour mon noyau 4.13.16-302.fc27.x86_64 sur Fedora 27, cela ne fonctionne plus. Échoue avec une erreur de compilation.
kmonsoor
@billyjmc: notez simplement que, en l'état, cette solution ne fonctionne pas pour les noyaux <3.5, où kuid_tet kgid_tont été introduits. Pour ceux-ci, kdoit être abandonné, comme dans uid_t fsuid;etgid_t fsgid;
MestreLion
2

make ne rapporte que les erreurs mais ce sont en fait des erreurs de votre compilateur (probablement gcc):

error: incompatible types when assigning to type ‘int’ from type ‘kuid_t’ 

Fondamentalement, votre code est bogué ou inapproprié pour votre plate-forme mais makefonctionne correctement.

lgeorget
la source
1

Cette solution a fonctionné pour moi. La procédure que j'ai suivie était:

  1. J'ai suivi les étapes de ma distribution (Debian Jessie) à partir d' ici .

  2. J'ai enregistré le pilote pour Linux du fabricant (fourni avec l'équipement sur le CD-ROM) et je l'ai décompressé dans un dossier.

  3. Dans le dossier, j'ai tapé make(as root) et j'ai eu une erreur. J'ai donc fait la modification ci-dessus, et cela a fonctionné.

  4. J'ai tapé make install(as root), j'ai redémarré l'ordinateur et l'interface sans fil a été reconnue. Je l'ai configuré et cela a fonctionné. ;)

Mon système est: Debian Jessie, noyau 3.16.0-4-amd64, utilisant gnome.

Isaias Soares
la source