Fehler beim Kompilieren der Treiber für Ralink RT2870

14

Ich versuche, Treiber für eine Rosewill RNX-N600UBE-Funkkarte (Ralink RT2870-Chipsatz) auf Kali Linux zu installieren. Ich habe die Treiber von ihrer Website heruntergeladen und entpackt, aber jetzt, wenn ich versuche, den Befehl 'make' auszuführen, erhalte ich diesen Fehler.

/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
Fuchs
quelle
Ich denke, Sie brauchen vielleicht eine andere Version von etwas, vielleicht den Compiler?
PlasmaPower
Warum sollte jemand, der neu in Linux ist, mit Kali experimentieren? Das ist eine Distribution für Sicherheitstests und Angriffe, vollgepackt mit Low-Level-Tools. Sicherlich nicht für einen unerfahrenen Linux-Benutzer
gedacht

Antworten:

19

Das Problem ist, dass einer der Kernel-Header / -Schnittstellen in einem neueren 3.x-Kernel geändert wurde. Wurden UID / GID-Werte ursprünglich als reguläre Ganzzahlen bezeichnet, handelt es sich jetzt um Strukturen mit einem einzelnen Element. Jeder Code, der sich jetzt auf die ältere Definition stützt, kann erst kompiliert werden, wenn er mit den neuen Kernel-Headern übereinstimmt.

Ich experimentiere gerade mit dem Patchen eines ähnlichen Fehlers in Virtualbox-Guest-Utils für meine Ubuntu-Installation. Theoretisch sollte das Auffinden und Ersetzen von Instanzen ->i_uid =mit ->i_uid.val =oder ->i_gid =mit ->i_gid.val =in den im Fehler angegebenen Zeilennummern das Problem beheben (ich kann jedoch nicht garantieren, dass zum gegenwärtigen Zeitpunkt die Kompilierung auf einem anderen, für mich nicht relevanten Fehler fehlschlägt).

Wenden Sie sich am besten an den ursprünglichen Autor Ihres Codes, um eine aktualisierte Version der Quelle zu erhalten, die mit den neueren Kerneln kompatibel ist.

Jason Musgrove
quelle
7
Geprüft! Das funktioniert! Ich wechselte current_fsuid()zucurrent_fsuid().val
Jonathan
1
Für mich musste ich auch umsteigen current_fsgid()aufcurrent_fsgid().val
ich
@ JonathanLeaders touché Vielen Dank. Die Patch-Konvertierung intin kuid_tscheint jedoch ebenfalls zu funktionieren.
enthusiasticgeek
10

Ich habe eine Korrektur für die Kompilierungsfehler in einem anderen Treiber auf dieser Website gefunden: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-fedora/

Unten ist der Patch-Inhalt:

--- 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
quelle
1
Dies ist eine gute, funktionierende Lösung für den MT7601U-Treiber, der auch für den Mediatek / Ralink 148F: 7601-Chipsatz verwendet wird. (Ja, ich
füge
Für meinen Kernel 4.13.16-302.fc27.x86_64 unter Fedora 27 funktioniert dies nicht mehr. Fehler beim Kompilieren.
kmonsoor
@billyjmc: beachte nur, dass diese lösung im jetzigen zustand nicht für kerne <3.5 funktioniert, bei denen kuid_tund kgid_teingeführt wurden. Für diejenigen, kmuss fallen gelassen werden, wie in uid_t fsuid;undgid_t fsgid;
MestreLion
2

make meldet nur die Fehler, aber es handelt sich tatsächlich um Fehler von Ihrem Compiler (wahrscheinlich gcc):

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

Grundsätzlich ist Ihr Code fehlerhaft oder für Ihre Plattform ungeeignet, makefunktioniert aber ordnungsgemäß.

lgeorget
quelle
1

Diese Lösung hat bei mir funktioniert. Das Verfahren, dem ich folgte, war:

  1. Von hier aus folgte ich den Schritten für meine Distribution (Debian Jessie) .

  2. Ich habe den Treiber für Linux des Herstellers (der mit dem Gerät auf der CD-ROM mitgeliefert wird) gespeichert und in einen Ordner entpackt.

  3. Im Ordner habe ich make(as root) eingegeben und eine Fehlermeldung erhalten. Also habe ich die Modifikation oben durchgeführt und es hat funktioniert.

  4. Ich habe make install(as root) eingegeben , den Computer neu gestartet und die drahtlose Schnittstelle wurde erkannt. Ich habe es konfiguriert und es hat funktioniert. ;)

Mein System ist: Debian Jessie, Kernel 3.16.0-4-amd64, mit Gnome.

Isaias Soares
quelle