Linux USB驱动编译

Linux USB驱动编译

我正在使用 Linux Mint 15。当我尝试编译此处提供的内核 v3.5.0 及更高版本的 EXAR UART 驱动程序文件版本时: http://www.exar.com/connectivity/uart-and-bridging-solutions/usb-uarts/xr21v1410

我收到以下错误:

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

我该如何解决这个错误?

答案1

我通常首先尝试在他们的网站上找到一些论坛并在那里提问。如果这不起作用,我会尝试自己修复它,但通常会出现更多这样的错误,并且在出现几次之后我就放弃了。

要解决这个问题:

  1. 转到/home/v/Downloads/xr21v141x-lnx-3.5-pak/
  2. 打开 vizzini.c
  3. 转到第 1104 行
  4. 应该有类似的东西whatever->whatever
  5. 如果没有,请在此处发布该行
  6. 如果是,则将其更改为whatever.whatever并重试 make

顺便说一句,为什么你要以 root 身份构建?

答案2

Linux 内核接口经常变化。这取决于驱动程序编写者

  • 要么将他们的代码贡献回内核,之后谁破坏兼容性就必须修复驱动程序;
  • 或者让他们的驱动程序不断发展以跟上不兼容的接口变化。

xr21v1410 驱动程序是为 Linux 3.5 编写的。引用行1104的消息vizzini.c指示正在使用结构类型的变量。查看源代码,这是类型的tty->termios地方ttytty_struct。在 Linux 3.6 左右,指针变成了另一个结构体中的结构体。

您可以尝试通过更改整个代码tty->termios来修复此问题。tty.termios然而,这不太可能是唯一的问题。您应该联系制造商并请求​​更新的驱动程序。

答案3

我已经测试了你的答案,事实上,重写这一行可以解决问题:

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

vizzini.ko 驱动程序编译良好,并且可以使用 insmod 加载。

相关内容