2010-03-22 7 views
3

기존 FreeBSD 장치 드라이버에 몇 가지 코드를 추가하려고하는데 사용자 공간에서 드라이버로 char*을 전달하려고합니다. 그래서 같은 _IOW 매크로를 사용하여 사용자 정의 ioctl() 명령을 구현했습니다 : #define TIBLOOMFILTER _IOW(0,253,char*)FreeBSD에서 ioctl() 명령을 구현합니다.

내 호출은 다음과 같은 : 내가 ioctl()를 호출 할 때

int file_desc = open("/dev/ti0", O_RDWR); 
ioctl(file_desc, TIBLOOMFILTER, (*filter).getBitArray()); 
close(file_desc); 

내가 얻을 : 오류 메시지로 Inappropriate ioctl for device. 어떤 일이 잘못되었을 수도 있습니다. 내 장치 드라이버에서 동일한 매크로를 정의하고 case 문에 추가했습니다.

+2

드라이버에 ioctl 처리기 코드를 게시하십시오. 그리고 드라이버 등록도 게시하십시오. – osgx

답변

1

당신의

.d_ioctl = ioctl_handler 

와 IOCTL 핸들러를 등록 했습니까? devsw (문자/블록 장치 스위치 테이블)?

+0

아니요, 핸들러는 이미 기존 드라이버 였으므로 이미 준비가되었습니다. 이미 작성한 핸들러에 다른 명령을 추가했습니다. 이게 맞지 않아? – acoffman

+0

올바른 반환 코드를 사용합니까? 'switch'와'case'의 뒤에서 디버그 프린트를 추가합니다. – osgx

+0

우리는 이것을 시도해 본 결과, 드라이버의 핸들에 도달하지 못하는 것으로 보입니다. – acoffman

관련 문제