Ralink RT2870용 드라이버 컴파일 중 오류가 발생했습니다.

Ralink RT2870용 드라이버 컴파일 중 오류가 발생했습니다.

Kali Linux에 Rosewill RNX-N600UBE 무선 카드(Ralink RT2870 칩셋)용 드라이버를 설치하려고 합니다. 해당 웹사이트에서 드라이버를 다운로드하고 압축을 풀었지만 이제 "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

답변1

문제는 최근 3.x 커널에서 커널 헤더/인터페이스 중 하나가 변경되었다는 것입니다. UID/GID 값은 원래 일반 정수라고 불렸지만 이제는 단일 요소를 가진 구조입니다. 이제 이전 정의에 의존하는 모든 코드는 새 커널 헤더와 일치하도록 업데이트될 때까지 컴파일되지 않습니다.

현재 Ubuntu 설치를 위해 virtualbox-guest-utils에서 유사한 버그를 패치하려고 합니다. 이론상으로는 오류에 보고된 줄 번호에서 ->i_uid =with ->i_uid.val =또는 with ->i_gid =의 인스턴스를 찾아서 바꾸면 ->i_gid.val =문제가 해결됩니다(하지만 그럴 수는 없습니다). 이 시점에서 관련 없는 다른 오류로 인해 컴파일이 실패했음을 보장합니다.

가장 좋은 방법은 코드의 원 작성자에게 연락하여 최신 커널에 대한 소스 코드의 업데이트된 버전을 얻는 것입니다.

답변2

이 사이트의 다른 드라이버에서 컴파일 오류에 대한 수정 사항을 찾았습니다. 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;

답변3

make오류만 보고되지만 실제로는 컴파일러(아마도 gcc)의 오류입니다.

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

기본적으로 코드는 버그가 있거나 플랫폼에 적합하지 않지만 make정상적으로 작동합니다.

답변4

이 솔루션은 저에게 효과적입니다. 내가 따르는 절차는 다음과 같습니다.

  1. 내 배포판(Debian Jessie)의 단계를 따랐습니다.여기.

  2. 제조업체의 Linux 드라이버(CD에 장치에 포함되어 있음)를 저장하고 폴더에 압축을 풀었습니다.

  3. make해당 폴더에 (as )를 입력했는데 root오류가 발생했습니다. 그래서 위와 같이 수정했더니 효과가 있었습니다.

  4. make install(예: ) 을 입력하고 root컴퓨터를 다시 시작했는데 무선 인터페이스가 인식되었습니다. 나는 그것을 구성했고 작동했습니다. ;)

내 시스템은 Debian Jessie, 커널 3.16.0-4-amd64, gnome을 사용합니다.

관련 정보