Lỗi biên dịch trình điều khiển cho Ralink RT2870


14

Tôi đang cố gắng cài đặt trình điều khiển cho một card không dây RNX-N600UBE (chipset Ralink RT2870) trên Kali Linux. Tôi đã tải xuống trình điều khiển từ trang web của họ và giải nén / giải nén chúng, nhưng bây giờ khi tôi cố chạy lệnh 'make' tôi gặp lỗi này.

/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

Tôi nghĩ rằng bạn có thể cần một phiên bản khác của một cái gì đó, có thể là trình biên dịch?
PlasmaPower

Như một lưu ý phụ, tại sao một người nào đó mới sử dụng Linux với Kali? Đó là một bản phân phối cho các thử nghiệm và tấn công bảo mật, được đóng gói với các công cụ cấp thấp. Chắc chắn không dành cho người dùng linux chưa có kinh nghiệm
MestreLion

Câu trả lời:


19

Vấn đề là một trong những tiêu đề / giao diện kernel đã thay đổi trong kernel 3.x gần đây. Trong đó các giá trị UID / GID ban đầu được gọi là các số nguyên thông thường, giờ đây chúng là các cấu trúc với một phần tử duy nhất. Bất kỳ mã nào dựa trên định nghĩa cũ hơn bây giờ sẽ không thể biên dịch cho đến khi được cập nhật để phù hợp với các tiêu đề kernel mới.

Tôi hiện đang thử nghiệm vá một lỗi tương tự trong hộp ảo-khách-dụng cụ cho cài đặt Ubuntu của tôi; về mặt lý thuyết, việc định vị và thay thế các trường hợp ->i_uid =->i_uid.val =hoặc ->i_gid =bằng ->i_gid.val =các số dòng được báo cáo trong lỗi sẽ khắc phục được sự cố (nhưng tôi không thể đảm bảo rằng tại thời điểm này vì quá trình biên dịch hiện không thành công với một lỗi khác, không liên quan, đối với tôi).

Đặt cược tốt nhất của bạn là liên hệ với tác giả ban đầu của mã của bạn để biết phiên bản cập nhật của nguồn hoạt động với các hạt nhân mới hơn.


7
Thử nghiệm! Điều này làm việc! Tôi đã đổi current_fsuid()thànhcurrent_fsuid().val
Jonathan

1
Đối với tôi, tôi cũng phải đổi current_fsgid()thànhcurrent_fsgid().val
Tôi thích mã

@JonathanLeaders touché Cảm ơn. Tuy nhiên, các bản vá chuyển đổi intđể kuid_tdường như cũng thực hiện các mẹo.
nhiệt tình

10

Tôi đã tìm thấy cách khắc phục các lỗi biên dịch trong trình điều khiển khác trên trang web này: http://www.arnelborja.com/compiling-rt2870-wifi- ấn-in-fedora /

Dưới đây là nội dung bản vá:

--- 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
Đây là một giải pháp tốt, hoạt động tốt cho trình điều khiển MT7601U, cũng được sử dụng cho chipset Mediatek / Ralink 148F: 7601. (Vâng, tôi chỉ thêm các từ khóa này vì lý do SEO.)
billyjmc 30/03/2015

đối với kernel của tôi 4.13.16-302.fc27.x86_64 trên Fedora 27, điều này không hoạt động nữa. Thất bại với lỗi biên dịch.
kmonsoor

@billyjmc: chỉ cần lưu ý rằng, như vậy, giải pháp này không hoạt động đối với hạt nhân <3.5, ở đâu kuid_tkgid_tđược giới thiệu. Đối với những người, kphải được loại bỏ, như trong uid_t fsuid;gid_t fsgid;
MestreLion

2

make chỉ báo cáo lỗi nhưng thực tế chúng là lỗi từ trình biên dịch của bạn (có thể là gcc):

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

Về cơ bản, mã của bạn có lỗi hoặc không phù hợp với nền tảng của bạn nhưng makehoạt động chính xác.


1

Giải pháp này đã làm việc cho tôi. Thủ tục tôi làm theo là:

  1. Tôi đã làm theo các bước để phân phối của mình (Debian Jessie) từ đây .

  2. Tôi đã lưu trình điều khiển cho Linux của nhà sản xuất (đi kèm với thiết bị trong CDROM) và tôi đã giải nén nó vào một thư mục.

  3. Trong thư mục, tôi đã gõ make(as root) và tôi gặp lỗi. Vì vậy, tôi đã sửa đổi ở trên, và nó đã làm việc.

  4. Tôi gõ make install(như root), tôi khởi động lại máy tính và giao diện không dây được nhận ra. Tôi cấu hình nó và nó hoạt động. ;)

Hệ thống của tôi là: Debian Jessie, kernel 3.16.0-4-amd64, sử dụng gnome.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.