Błąd podczas kompilowania sterowników dla Ralink RT2870

14

Próbuję zainstalować sterowniki do karty RNX-N600UBE dla róży wolnej (chipset Ralink RT2870) w systemie Kali Linux. Pobrałem sterowniki z ich witryny i rozpakowałem / rozpakowałem je, ale teraz, gdy próbuję uruchomić polecenie „make”, pojawia się ten błąd.

/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
Lis
źródło
Myślę, że możesz potrzebować innej wersji czegoś, może kompilatora?
PlazmaPower
Na marginesie, dlaczego ktoś nowy w Linuksie miałby bawić się z Kali? To dystrybucja testów bezpieczeństwa i ataków, wypełniona narzędziami niskiego poziomu. Z pewnością nie jest przeznaczony dla niedoświadczonego użytkownika Linuksa
MestreLion,

Odpowiedzi:

19

Problem polega na tym, że jeden z nagłówków / interfejsów jądra zmienił się w ostatnim jądrze 3.x. Tam, gdzie wartości UID / GID były pierwotnie nazywane zwykłymi liczbami całkowitymi, są one teraz strukturami z jednym elementem. Kod oparty na starszej definicji nie będzie się teraz kompilował, dopóki nie zostanie zaktualizowany w celu dopasowania do nowych nagłówków jądra.

Obecnie eksperymentuję z łataniem podobnego błędu w virtualbox-guest-utils dla mojej instalacji Ubuntu; Teoretycznie lokalizowania i zastąpienie wystąpień ->i_uid =z ->i_uid.val =albo ->i_gid =z ->i_gid.val =na numery linii podano w błąd powinno rozwiązać problem (ale nie mogę zagwarantować, że w tej chwili jako kompilacji jest teraz upadającego na innej, niezwiązanej, błędu dla mnie).

Najlepszym rozwiązaniem jest skontaktowanie się z oryginalnym autorem kodu w celu uzyskania zaktualizowanej wersji źródła współpracującego z nowszymi jądrami.

Jason Musgrove
źródło
7
Przetestowany! To działa! Zmieniłem current_fsuid()nacurrent_fsuid().val
Jonathan
1
Dla mnie musiałem także zmienić current_fsgid()nacurrent_fsgid().val
Lubię kodować
@JonathanLeaders touché Dzięki. Jednak poprawka konwersji intdo kuid_trównież wydaje się rade.
entuzjastyczny
10

Znalazłem naprawę błędów kompilacji w innym sterowniku na tej stronie: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-fedora/

poniżej znajduje się treść poprawki:

--- 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
źródło
1
To dobre, działające rozwiązanie dla sterownika MT7601U, stosowanego również w chipsecie Mediatek / Ralink 148F: 7601. (Tak,
dodaję
dla mojego jądra 4.13.16-302.fc27.x86_64 na Fedorze 27, to już nie działa. Nie działa z błędem kompilacji.
kmonsoor,
@billyjmc: zwróć uwagę, że tak jak jest, to rozwiązanie nie działa na jądrach <3.5, gdzie kuid_ti kgid_tzostały wprowadzone. Dla tych knależy upuścić, jak w uid_t fsuid;igid_t fsgid;
MestreLion
2

make zgłasza tylko błędy, ale w rzeczywistości są to błędy kompilatora (prawdopodobnie gcc):

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

Zasadniczo kod jest błędny lub nieodpowiedni dla Twojej platformy, ale makedziała poprawnie.

lgeorget
źródło
1

To rozwiązanie działało dla mnie. Postępowałem zgodnie z procedurą:

  1. Postępowałem zgodnie z instrukcjami dotyczącymi mojej dystrybucji (Debian Jessie) stąd .

  2. Zapisałem sterownik dla Linuksa producenta (dostarczany ze sprzętem na CDROM) i rozpakowałem go do folderu.

  3. W folderze wpisałem make(as root) i dostałem błąd. Więc zrobiłem powyższą modyfikację i zadziałało.

  4. Wpisałem make install(as root), ponownie uruchomiłem komputer i interfejs bezprzewodowy został rozpoznany. Skonfigurowałem i działało. ;)

Mój system to: Debian Jessie, jądro 3.16.0-4-amd64, przy użyciu gnome.

Isaias Soares
źródło