다음 이전 차례

8. 문제 해결

Q1. 포트를 제어하려 할 때 segmentation faults 에러가 난다.

A1. 여러분의 프로그램이 루트 권한을 가지고 있지 않거나 ioperm() 호출이 다 른 이유로 실패하였을 것이다. ioperm()의 리턴값을 점검해보라. 또한, 실제로 ioperm()으로 읽고 쓰기가 가능한 포트에 접근하는 것인지 점검한다.

Q2. 어디에서도 in*(), out*()로 정의된 함수를 찾을 수 없다. gcc는 undefined references라고 한다.

A2. 여러분은 최적화 옵션(-O)을 켜지 않고 컴파일 하였다, 따라서 gcc는 asm/io.h 매크로를 분석할 수 없다. 또는 #include <asm/io.h>를 하지 않았다.

Q3. out*()은 아무것도 하지 않거나, 이상하게 동작한다.

A3. 매개변수의 순서를 점검한다; 도스에서는 outportb(port,value)가 아닌 outb(value,port)가 되어야 한다.

Q4. 표준 RS-232 포트/병렬 프린터/조이스틱을 제어하고 싶다.

A4. 여러분은 이미 존재하는 드라이버를 (리눅스 커널 또는 X 서버 어딘가에 있 는) 제거하는 것이 좋다. 그 드라이버는 매우 다양한 목적으로 쓰일 수 있어서, 비표준 장치도 동작시키기도 한다. 이 문서가 제시하고 있는 표준 포트에 대한 정보를 참조한다.


다음 이전 차례