Помилка під час компіляції драйверів для Ralink RT2870


14

Я намагаюся встановити драйвери для бездротової карти RNX-N600UBE (чіпсет Ralink RT2870) на Kali Linux. Я завантажив драйвери з їх веб-сайту і розпакував / розпакував їх, але тепер, коли я намагаюся запустити команду 'make', я отримую цю помилку.

/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

Я думаю, що вам може знадобитися інша версія чогось, можливо, компілятор?
PlasmaPower

Як зауваження, чому хтось новий у Linux не поспілкується з Kali? Це дистрибутив для тестів безпеки та атак, укомплектованих інструментами низького рівня. Напевно не призначений для недосвідченого користувача Linux
MestreLion

Відповіді:


19

Проблема полягає в тому, що один із заголовків / інтерфейсів ядра змінився в недавньому 3.x ядрі. Там, де значення UID / GID спочатку називалися звичайними цілими числами, вони тепер будуються з одним елементом. Будь-який код, який спирається на старіше визначення, тепер не вдасться скомпілювати, поки не оновиться, щоб відповідати новим заголовкам ядра.

Я зараз експериментую з виправленням подібної помилки у virtualbox-guest-utils для моєї установки Ubuntu; в теорії пошуку і заміни примірників ->i_uid =з ->i_uid.val =або ->i_gid =з ->i_gid.val =за номерами рядків повідомили в помилку повинні виправити цю проблему (але я не можу гарантувати , що в цей час як компіляції тепер несправні на інший, не пов'язаний, помилку для мене).

Ваша найкраща ставка - зв’язатися з оригінальним автором вашого коду для оновленої версії джерела, яка працює з новими ядрами.


7
Перевірено! Це працює! Я змінився current_fsuid()наcurrent_fsuid().val
Джонатан

1
Для мене, я повинен був змінити current_fsgid()доcurrent_fsgid().val
мені подобається код

@JonathanLeaders touché Спасибі Однак патч, що перетворюється intна, kuid_tтакож, здається, робить свою справу.
enthusiasticgeek

10

Я знайшов виправлення помилок компіляції в іншому драйвері на цьому веб-сайті: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-fedora/

нижче вміст виправлення:

--- 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
Це хороше, робоче рішення для драйвера MT7601U, що використовується і для чіпсета Mediatek / Ralink 148F: 7601. (Так, я просто додаю ці ключові слова з причин SEO.)
billyjmc

для мого ядра 4.13.16-302.fc27.x86_64 у Fedora 27, це більше не працює. Помилка з помилкою компіляції.
kmonsoor

@billyjmc: просто зауважте, що, як є, це рішення не працює для ядер <3.5, куди kuid_tі kgid_tбули введені. Для тих, хто kповинен бути скинутий, як uid_t fsuid;і вgid_t fsgid;
MestreLion

2

make повідомляє лише про помилки, але насправді вони є помилками вашого компілятора (можливо, gcc):

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

В основному ваш код невдалий або невідповідний для вашої платформи, але makeфункціонує правильно.


1

Це рішення спрацювало на мене. Я дотримувався процедури:

  1. Я дотримувався кроків для свого розповсюдження (Дебіан Джессі) звідси .

  2. Я врятував драйвер de Linux для виробника Linux (який постачається з обладнанням у CDROM) і розпакував його у папку.

  3. У папці я набрав make(як root), і сталася помилка. Отже, я зробив модифікацію вище, і вона спрацювала.

  4. Я набрав make install(як root), перезавантажив комп’ютер, і бездротовий інтерфейс був розпізнаний. Я налаштував це, і він працював. ;)

Моя система: Debian Jessie, ядро ​​3.16.0-4-amd64, використовуючи gnome.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.