Kesalahan saat mengkompilasi driver untuk Ralink RT2870

14

Saya mencoba menginstal driver untuk kartu nirkabel RNX-N600UBE yang baru (chipset Ralink RT2870) di Kali Linux. Saya mengunduh driver dari situs web mereka dan membongkar / membuka ritsletingnya, tetapi sekarang ketika saya mencoba menjalankan perintah 'make' saya mendapatkan kesalahan ini.

/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
Rubah
sumber
Saya pikir Anda mungkin perlu versi yang berbeda dari sesuatu, mungkin kompilernya?
PlasmaPower
Sebagai catatan tambahan, mengapa seseorang yang baru mengenal Linux bermain-main dengan Kali? Itulah distro untuk pengujian dan serangan keamanan, dikemas dengan alat tingkat rendah. Tentunya tidak dimaksudkan untuk pengguna linux yang tidak berpengalaman
MestreLion

Jawaban:

19

Masalahnya adalah bahwa salah satu header / antarmuka kernel berubah dalam kernel 3.x baru-baru ini. Di mana nilai-nilai UID / GID awalnya disebut sebagai bilangan bulat biasa, mereka sekarang struct dengan elemen tunggal. Kode apa pun yang mengandalkan definisi yang lebih lama sekarang akan gagal dikompilasi hingga diperbarui untuk mencocokkan header kernel yang baru.

Saat ini saya sedang bereksperimen dengan menambal kesalahan serupa di virtualbox-guest-utils untuk instalasi Ubuntu saya; dalam teori menemukan dan mengganti contoh ->i_uid =dengan ->i_uid.val =atau ->i_gid =dengan ->i_gid.val =nomor baris yang dilaporkan dalam kesalahan harus memperbaiki masalah (tetapi saya tidak dapat menjamin bahwa saat ini karena kompilasi sekarang gagal pada kesalahan yang berbeda, tidak terkait, untuk saya).

Taruhan terbaik Anda adalah menghubungi pembuat kode asli Anda untuk versi sumber yang diperbarui yang bekerja dengan kernel yang lebih baru.

Jason Musgrove
sumber
7
Diuji! Ini tidak bekerja! Saya berubah current_fsuid()menjadicurrent_fsuid().val
Jonathan
1
Bagi saya, saya juga harus berubah current_fsgid()menjadicurrent_fsgid().val
Saya suka kode
@JonathanLeaders touché Terima kasih. Namun, patch mengkonversi intke kuid_ttampaknya juga melakukan trik.
enthusiasticgeek
10

Saya menemukan perbaikan untuk kesalahan kompilasi pada driver lain di situs web ini: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-fedora/

di bawah ini adalah konten tambalan:

--- 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
sumber
1
Ini adalah solusi yang baik dan berfungsi untuk driver MT7601U, yang juga digunakan untuk chipset Mediatek / Ralink 148F: 7601. (Ya, saya hanya menambahkan kata kunci ini untuk alasan SEO.)
billyjmc
untuk kernel saya 4.13.16-302.fc27.x86_64 pada Fedora 27, ini tidak berfungsi lagi. Gagal dengan kesalahan kompilasi.
kmonsoor
@ billyjmc: perhatikan saja, apa adanya, solusi ini tidak berfungsi untuk kernel <3.5, di mana kuid_tdan kgid_tdiperkenalkan. Bagi mereka, kharus dijatuhkan, seperti pada uid_t fsuid;dangid_t fsgid;
MestreLion
2

make hanya melaporkan kesalahan tetapi sebenarnya kesalahan dari kompiler Anda (mungkin gcc):

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

Pada dasarnya, kode Anda buggy atau tidak sesuai untuk platform Anda tetapi makeberfungsi dengan benar.

lororget
sumber
1

Solusi ini berhasil untuk saya. Prosedur yang saya ikuti adalah:

  1. Saya mengikuti langkah-langkah untuk distribusi saya (Debian Jessie) dari sini .

  2. Saya menyimpan de driver untuk Linux dari pabrikan (yang dilengkapi dengan peralatan dalam CDROM), dan saya membuka ritsletingnya ke folder.

  3. Di folder, saya mengetik make(as root), dan saya mendapat kesalahan. Jadi, saya melakukan modifikasi di atas, dan itu berhasil.

  4. Saya mengetik make install(as root), saya reboot komputer, dan antarmuka nirkabel dikenali. Saya mengkonfigurasinya dan berhasil. ;)

Sistem saya adalah: Debian Jessie, kernel 3.16.0-4-amd64, menggunakan gnome.

Isaias Soares
sumber