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를 다시 시도하세요.

그런데 왜 루트로 빌드합니까?

답변2

Linux 커널 인터페이스는 자주 변경됩니다. 드라이버 작성자에게 달려 있습니다.

  • 코드를 커널에 다시 제공하거나 호환성을 깨뜨린 사람이 드라이버를 수정해야 합니다.
  • 또는 호환되지 않는 인터페이스 변경 사항을 따라잡기 위해 드라이버를 발전시키세요.

xr21v1410 드라이버는 Linux 3.5용으로 작성되었습니다. 라인 1104를 참조하는 메시지는 vizzini.c구조 유형의 변수가 사용되고 있음을 나타냅니다. 소스를 보면 다음과 tty->termios같은 tty유형이 있습니다.tty_struct. Linux 3.6 부근에서는 포인터가 다른 구조체 내부의 구조체로 변경되었습니다.

코드 전체 tty->termios에서 로 변경하여 이 문제를 해결할 수 있습니다 . tty.termios그러나 이것이 유일한 문제는 아닐 것입니다. 제조업체에 문의하여 업데이트된 드라이버를 요청해야 합니다.

답변3

귀하의 답변을 테스트했으며 실제로 다음 줄을 다시 작성하면 문제가 해결됩니다.

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

vizzini.ko 드라이버는 잘 컴파일되며 insmod를 사용하여 로드할 수 있습니다.

관련 정보