Compilación del controlador USB de Linux

Compilación del controlador USB de Linux

Estoy usando Linux Mint 15. Cuando intento compilar la versión del archivo del controlador EXAR UART para el kernel v3.5.0 y posteriores, se proporciona aquí: http://www.exar.com/connectivity/uart-and-bridging-solutions/usb-uarts/xr21v1410

Obtuve el siguiente error:

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

¿Cómo puedo resolver este error?

Respuesta1

Por lo general, primero intento encontrar algún foro en su sitio web y preguntar allí. Si esto no funciona intento arreglarlo yo mismo, pero normalmente hay más errores como este y me rindo después de varios de ellos.

Para arreglar este:

  1. vaya a /home/v/Descargas/xr21v141x-lnx-3.5-pak/
  2. abrir vizzini.c
  3. ir a la línea 1104
  4. debería haber algo comowhatever->whatever
  5. si no, publique la línea aquí
  6. En caso afirmativo, cámbielo whatever.whatevery vuelva a intentarlo.

Por cierto, ¿por qué construyes como root?

Respuesta2

Las interfaces del kernel de Linux cambian con frecuencia. Depende de los escritores de conductores

  • o contribuyen con su código al kernel, después de lo cual quien rompa la compatibilidad tiene que arreglar el controlador;
  • o hacer que su controlador evolucione para mantenerse al día con cambios de interfaz incompatibles.

El controlador xr21v1410 fue escrito para Linux 3.5. El mensaje que hace referencia a la línea 1104 vizzini.cindica que se está utilizando una variable de un tipo de estructura. Mirando la fuente, aquí es tty->termiosdonde ttyestá el tipo.tty_struct. Alrededor de Linux 3.6, el puntero cambió para convertirse en una estructura dentro de otra estructura.

Puede intentar solucionar este problema cambiando tty->termiosa tty.termiostodo el código. Sin embargo, es poco probable que éste sea el único problema. Debe comunicarse con el fabricante y solicitar un controlador actualizado.

Respuesta3

He probado sus respuestas y, de hecho, reescribir esta línea soluciona el problema:

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

El controlador vizzini.ko se compila bien y se puede cargar con insmod.

información relacionada