Linux USB Driver Compilation

2

Estou usando o Linux Mint 15. Quando tento compilar a versão do arquivo do driver EXAR UART para o kernel v3.5.0 e posterior aqui: link

Eu recebo o seguinte erro:

v@lenovo-linux ~/Downloads/xr21v141x-lnx-3.5-pak $ sudo make
make -C /lib/modules/3.8.0-19-generic/build M=/home/v/Downloads/xr21v141x-lnx-3.5-pak
make[1]: Entering directory '/usr/src/linux-headers-3.8.0-19-generic'
  LD      /home/v/Downloads/xr21v141x-lnx-3.5-pak/built-in.o
  CC [M]  /home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.o
/home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.c: In function ‘xr21v141x_tty_set_termios’:
/home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.c:1104:22: error: invalid type argument of ‘->’ (have ‘struct ktermios’)
make[2]: *** [/home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.o] Error 1
make[1]: *** [_module_/home/v/Downloads/xr21v141x-lnx-3.5-pak] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-3.8.0-19-generic'
make: *** [all] Error 2

Como posso resolver esse erro?

    
por Vik 10.10.2013 / 10:17

3 respostas

1

Eu geralmente primeiro tento encontrar algum fórum no site deles e pergunto lá. Se isso não funcionar eu tento consertá-lo sozinho, mas geralmente há mais erros como este e eu desisto depois de vários deles.

Para corrigir este:

  1. vá para /home/v/Downloads/xr21v141x-lnx-3.5-pak /
  2. abre vizzini.c
  3. vá para a linha 1104
  4. deve haver algo como whatever->whatever
  5. se não, poste a linha aqui
  6. se sim, altere para whatever.whatever e tente novamente

Por que você constrói como root?

    
por 10.10.2013 / 14:24
0

As interfaces do kernel Linux mudam com freqüência. Cabe aos escritores de driver para

  • ou contribuem com seu código de volta para o kernel, após o qual quem quebra a compatibilidade precisa consertar o driver;
  • ou faça seu driver evoluir para acompanhar as mudanças de interface incompatíveis.

O driver xr21v1410 foi escrito para o Linux 3.5. A mensagem referente à linha 1104 em vizzini.c indica que uma variável de um tipo de estrutura está sendo usada. Olhando para a fonte, isso é tty->termios onde tty é do tipo tty_struct . Em torno do Linux 3.6, o ponteiro mudou para se tornar uma estrutura dentro de outra estrutura.

Você pode tentar corrigir isso alterando tty->termios para tty.termios em todo o código. No entanto, é improvável que esse seja o único problema. Você deve entrar em contato com o fabricante e solicitar um driver atualizado.

    
por 11.10.2013 / 02:28
0

Eu testei suas respostas e, de fato, reescrever esta linha resolve o problema:

//  cflag = tty->termios->c_cflag;
cflag = tty->termios.c_cflag;

O driver vizzini.ko compila bem e pode ser carregado com o insmod.

    
por 21.07.2014 / 11:44