Ошибка компиляции драйверов для Ralink RT2870


14

Я пытаюсь установить драйверы для беспроводной карты rosewill 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 возится с Кали? Это дистрибутив для тестов безопасности и атак, наполненный низкоуровневыми инструментами. Конечно, не предназначен для неопытного пользователя 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похоже, тоже помогает.
энтузиазм

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. Я следовал инструкциям для моего дистрибутива (Debian Jessie) отсюда .

  2. Я сохранил драйвер de для Linux производителя (который поставляется вместе с оборудованием на компакт-диске) и разархивировал его в папку.

  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.