Erro ao compilar drivers para Ralink RT2870

14

Estou tentando instalar drivers para uma placa sem fio RNX-N600UBE da rosewill (chipset Ralink RT2870) no Kali Linux. Eu baixei os drivers do site e os descompactei / descompactei, mas agora, quando tento executar o comando 'make', recebo esse erro.

/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
Raposa
fonte
Eu acho que você pode precisar de uma versão diferente de algo, talvez o compilador?
PlasmaPower
Como uma observação lateral, por que alguém novo no Linux mexeria com Kali? Essa é uma distribuição para testes e ataques de segurança, repleta de ferramentas de baixo nível. Certamente não significava para um usuário linux inexperiente
MestreLion

Respostas:

19

O problema é que um dos cabeçalhos / interfaces do kernel mudou em um kernel 3.x recente. Onde os valores UID / GID eram originalmente chamados de números inteiros regulares, agora são estruturas com um único elemento. Qualquer código baseado na definição mais antiga agora falhará na compilação até ser atualizado para corresponder aos novos cabeçalhos do kernel.

Atualmente, estou experimentando corrigir um erro semelhante no virtualbox-guest-utils para minha instalação do Ubuntu; em teoria, localizar e substituir instâncias de ->i_uid =com ->i_uid.val =ou ->i_gid =com ->i_gid.val =os números de linha relatados no erro deve resolver o problema (mas não posso garantir que, neste momento, a compilação esteja falhando em um erro diferente e não relacionado) para mim).

Sua melhor aposta é entrar em contato com o autor original do seu código para obter uma versão atualizada da fonte que funciona com os kernels mais recentes.

Jason Musgrove
fonte
7
Testado! Isso funciona! Mudei current_fsuid()paracurrent_fsuid().val
Jonathan
1
Para mim, eu também tive que mudar current_fsgid()paracurrent_fsgid().val
eu gosto de codificar
@JonathanLeaders touché Thanks. No entanto, o patch convertido intpara kuid_ttambém parece funcionar.
enthusiasticgeek
10

Encontrei uma correção para os erros de compilação em outro driver neste site: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-fedora/

abaixo está o conteúdo do patch:

--- 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
fonte
1
Essa é uma solução boa e funcional para o driver MT7601U, usado também para o chipset Mediatek / Ralink 148F: 7601. (Sim, eu estou apenas adicionando essas palavras-chave por razões de SEO.)
billyjmc
para o meu kernel 4.13.16-302.fc27.x86_64 no Fedora 27, isso não funciona mais. Falha com erro de compilação.
kmonsoor 09/12/19
@billyjmc: observe que, como está, esta solução não funciona para kernels <3.5, onde kuid_te kgid_tforam introduzidos. Para aqueles, kdeve ser descartado, como em uid_t fsuid;egid_t fsgid;
MestreLion 19/10/1918
2

make relata apenas os erros, mas na verdade são erros do seu compilador (provavelmente o gcc):

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

Basicamente, seu código é makeincorreto ou inapropriado para sua plataforma, mas funciona corretamente.

lgeorget
fonte
1

Esta solução funcionou para mim. O procedimento que segui foi:

  1. Segui os passos para a minha distribuição (Debian Jessie) a partir daqui .

  2. Salvei o driver para Linux do fabricante (que acompanha o equipamento no CD-ROM) e descompactei em uma pasta.

  3. Na pasta, digitei make(as root) e recebi um erro. Então, eu fiz a modificação acima e funcionou.

  4. Digitei make install(as root), reiniciei o computador e a interface sem fio foi reconhecida. Eu configurei e funcionou. ;)

Meu sistema é: Debian Jessie, kernel 3.16.0-4-amd64, usando o gnome.

Isaias Soares
fonte