Linux USB驅動編譯

Linux USB驅動編譯

我正在使用 Linux Mint 15。 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 載入。

相關內容