저는 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
나는 보통 먼저 그들의 웹사이트에서 포럼을 찾아 거기에 질문하려고 합니다. 그래도 안되면 제가 직접 고치려고 노력하지만, 대개 이런 오류가 더 많이 발생하고 몇 개 있다가 포기하게 됩니다.
이 문제를 해결하려면:
- /home/v/Downloads/xr21v141x-lnx-3.5-pak/로 이동
- vizzini.c를 엽니다.
- 1104행으로 이동
- 다음과 같은 것이 있어야합니다
whatever->whatever
- 그렇지 않은 경우 여기에 해당 줄을 게시하십시오.
- 그렇다면 다음으로 변경
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를 사용하여 로드할 수 있습니다.