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
Antworten:
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.
quelle
current_fsuid()
zucurrent_fsuid().val
current_fsgid()
aufcurrent_fsgid().val
int
inkuid_t
scheint jedoch ebenfalls zu funktionieren.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:
quelle
kuid_t
undkgid_t
eingeführt wurden. Für diejenigen,k
muss fallen gelassen werden, wie inuid_t fsuid;
undgid_t fsgid;
make
meldet nur die Fehler, aber es handelt sich tatsächlich um Fehler von Ihrem Compiler (wahrscheinlich gcc):Grundsätzlich ist Ihr Code fehlerhaft oder für Ihre Plattform ungeeignet,
make
funktioniert aber ordnungsgemäß.quelle
Diese Lösung hat bei mir funktioniert. Das Verfahren, dem ich folgte, war:
Von hier aus folgte ich den Schritten für meine Distribution (Debian Jessie) .
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.
Im Ordner habe ich
make
(asroot
) eingegeben und eine Fehlermeldung erhalten. Also habe ich die Modifikation oben durchgeführt und es hat funktioniert.Ich habe
make install
(asroot
) 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.
quelle