Errore durante la compilazione dei driver per Ralink RT2870


14

Sto cercando di installare i driver per una scheda wireless RNX-N600UBE rosewill (chipset Ralink RT2870) su Kali Linux. Ho scaricato i driver dal loro sito Web e li ho decompressi / decompressi, ma ora quando provo a eseguire il comando 'make' ottengo questo errore.

/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

Penso che potresti aver bisogno di una versione diversa di qualcosa, forse il compilatore?
PlasmaPower

Come nota a margine, perché qualcuno di nuovo a Linux giocherebbe con Kali? Questa è una distro per test di sicurezza e attacchi, piena di strumenti di basso livello. Sicuramente non è pensato per un utente Linux inesperto
MestreLion,

Risposte:


19

Il problema è che una delle intestazioni / interfacce del kernel è cambiata in un recente kernel 3.x. Laddove i valori UID / GID erano originariamente indicati come numeri interi regolari, ora sono strutture con un singolo elemento. Qualsiasi codice basato sulla definizione precedente ora non sarà compilato fino all'aggiornamento per corrispondere alle nuove intestazioni del kernel.

Attualmente sto sperimentando la correzione di un errore simile in virtualbox-guest-utils per la mia installazione di Ubuntu; in teoria, individuare e sostituire le istanze di ->i_uid =con ->i_uid.val =o ->i_gid =con ->i_gid.val =i numeri di riga riportati nell'errore dovrebbe risolvere il problema (ma non posso garantire che in questo momento la compilazione non riesca ora con un errore diverso, non correlato, per me).

La tua scommessa migliore è contattare l'autore originale del tuo codice per una versione aggiornata della fonte che funziona con i kernel più recenti.


7
Provato! Questo funziona! Ho cambiatocurrent_fsuid() acurrent_fsuid().val
Jonathan il

1
Per me, ho anche dovuto cambiare current_fsgid()incurrent_fsgid().val
mi piace programmare il

@JonathanLeaders touché Grazie. Tuttavia, la conversione di patchint a kuid_tsembra anche fare il trucco.
enthusiasticgeek,

10

Ho trovato una correzione agli errori di compilazione in un altro driver su questo sito Web: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-fedora/

di seguito è riportato il contenuto della 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;

1
Questa è una buona soluzione funzionante per il driver MT7601U, utilizzata anche per il chipset Mediatek / Ralink 148F: 7601. (Sì, sto solo aggiungendo queste parole chiave per motivi SEO.)
billyjmc

per il mio kernel 4.13.16-302.fc27.x86_64 su Fedora 27, questo non funziona più. Errore con errore di compilazione.
kmonsoor,

@billyjmc: basta notare che, così com'è, questa soluzione non funziona per i kernel <3.5, dove kuid_te kgid_tsono stati introdotti. Per quelli, kdeve essere lasciato cadere, come in uid_t fsuid;egid_t fsgid;
MestreLion

2

make riporta solo gli errori ma in realtà sono errori del tuo compilatore (probabilmente gcc):

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

Fondamentalmente, il tuo codice è errato o inappropriato per la tua piattaforma ma makefunziona correttamente.


1

Questa soluzione ha funzionato per me. La procedura che ho seguito è stata:

  1. Ho seguito i passaggi per la mia distribuzione (Debian Jessie) da qui .

  2. Ho salvato il driver per Linux del produttore (che viene fornito con l'apparecchiatura nel CD-ROM) e l'ho decompresso in una cartella.

  3. Nella cartella, ho digitato make(as root) e ho ricevuto un errore. Quindi, ho fatto la modifica sopra e ha funzionato.

  4. Ho digitato make install(as root), ho riavviato il computer e l'interfaccia wireless è stata riconosciuta. L'ho configurato e ha funzionato. ;)

Il mio sistema è: Debian Jessie, kernel 3.16.0-4-amd64, usando gnome.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.