저는 리눅스 민트 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를 사용하여 로드할 수 있습니다.