2014-05-10 2 views
0

사용자 응용 프로그램과 통신하는 커널 모듈을 작성하고 있습니다 (ioctl). 통신은 단방향 (즉, 정상적인 상황에서는 출력이 필요 없음)입니다. 내 질문은 - 사용자 응용 프로그램에 오류를 어떻게보고해야합니까?커널 모듈의 오류 처리

예를 들어, my 모듈은 프로세스 ID를 입력으로 받아들입니다. PID가 유효하지 않다고 가정 해 봅시다. errno.h에 일치하는 오류 코드가 없으므로이를보고하는 다른 방법이 필요합니다.

  1. , 공통 헤더 파일에서 (양의) 일정 INVALID_PID를 정의하는 ioctl 호출의 반환 값으로 -INVALID_PID을 반환하고, 사용자 응용 프로그램에서
  2. 인쇄 의미를 그것을 처리 : 나는 여러 가지 방법을 생각할 수 커널 로그 메시지와 일반 오류 코드
  3. ioctl을 반환은 사용자 응용 프로그램에서 인수를 수신 - 나는 사용자 응용 프로그램
  4. ,536과 일부 양방향 통신을 설정이
  5. 오류 메시지를 저장할 수 있습니다

표준 방법은 무엇입니까?

감사합니다.

답변

2

보통 ioctls이 실패하면 include/uapi/asm-generic/errno-base.h의 표준 코드를 사용합니다. 각 오류의 의미는 각 특정 ioctl에 대해 문서화됩니다.

귀하의 경우에는 ENOENT 또는 EINVAL을 돌려 주실 수 있습니다. ioctl의 인수가 PID 인 경우 ENOENT은이 PID이 존재하지 않는다는 것을 의미합니다. 그리고 어딘가에서이 동작을 문서화하는 것이 좋습니다. 좋은 예가 man console_ioctl에 있습니다.

+0

고마워요! 그러나 "사용자 정의"메시지가 필요할 때 어떻게해야할지 아직 확실하지 않습니다. 어쩌면 나의 예가 지나치게 단순화되었을 수도 있습니다. 여러 가지 주장이 있거나 여러 가지 이유가있어 인수가 유효하지 않다고 생각되면 사용자에게 정확한 공감대를 알리고 싶습니다. – Benesh

+0

@Benesh는 왜 사용자 지정 메시지가 필요한지 설명 할 수 있습니까? 'ioctl '은 커널에게 "이 파일 기술자와 관련된 일을하라"는 명령이다. 성공할 수도 있고 실패 할 수도있다. 실패하면 A, B 또는 C 이유로 실패합니다. 일반적인 오류 코드 세트가 다시 사용되는 이유입니다. 커널 코드는 일반적으로 스파르탄이며 "오류 메시지가 있습니다. 제공된 PID는 42이지만 PID 1, 2 및 3 만 허용합니다."와 같은 멋진 메시지를 반환하는 것은 중요하지 않습니다. 대신에 그것은 "EINVAL"을 말합니다. "PID를 올바르게 받으십시오!"와 더 비슷합니다. – Grapsus

+0

'fd'는 통신을 가능하게하기 위해서만 사용됩니다. 전적으로 그것을 잘못 사용하고있을 수도 있지만,이 연습의 몇 가지 예를 보았습니다. 어쨌든, 당신의 충고를 따를 것입니다. 다시 한 번 감사드립니다! – Benesh

관련 문제