ioctl 관련 질문
글쓴이: swunk / 작성시간: 월, 2006/01/09 - 11:55오전
ioctl 을 정의 하려 합니다.
일반 캐릭터 디바이스 드라이버 혹은 네트워크 디바이스 드라이버가 아닌,
일반 커널 모듈에서 ioctl 을 정의할 수 있는 방법이 있나요 ?
mknod 해서 가상의 장치파일 만들고 open() 함수를 수행후register_chrdev() 해서 사용할 수 있겠지만 이렇게 하지 않고,
socket()을 통하거나 혹은 다른 방법을 통해서 사용할 수 있는 방법이 없는지 궁급합니다.
답변 부탁드립니다.
Forums:
무엇을 원하시는지 모르겠으나, 유닉스/리눅스의 ioctl은 모든 것(!)
무엇을 원하시는지 모르겠으나, 유닉스/리눅스의 ioctl은 모든 것(!)을 파일로 보고자 하는 유닉스의 관점에서 출발입니다.
무엇이건 간에 유닉스의 기본자원이라면 ioctl을 지원하는게 좀.. 보편적입니다.
제가 원하는건...디바이스 드라이버(캐릭터,블록,네트워크)가 아닌
제가 원하는건...
디바이스 드라이버(캐릭터,블록,네트워크)가 아닌 커널 모듈에서 ioctl을 정의해서 사용하고자 합니다.
캐릭터 디바이스와 블록 디바이스는 mknod를 사용해서 파일을 생성후 open() 을 통하고 register_chrdev()등의 함수를 통하여 사용하고, 네트워크 디바이스 드라이버는 socket() 함수와 register_netdev() 함수를 통하여 ioctl() 로 접근 하여 사용하는 것으로 알고 있습니다. 물론 파일오퍼레이션도 등록해야 되고요...
그런데 이런 디바이스 드라이버가 아닌 커널 모듈에 ioctl() 을 사용는게 가능한가가 궁금합니다.
곰곰히 생각해보니...
안될것 같군요...손님 말씀과 같이 모든 자원들을 파일을 통해서 사용하는게 기본 개념인 점을 감안하면 안되는게 맞는것 같습니다.
혹시 사용가능하다면 답변 부탁드립니다.
만드시고자 하는 커널모듈을 파일개념에 접목시켜서 만드시면 별 무리없어 보
만드시고자 하는 커널모듈을 파일개념에 접목시켜서 만드시면 별 무리없어 보이는데, 어떻게 생각하십니까?
적어도 해당모듈(?!)을 다루기 위해, 핸들을 얻게 하고(open), 사용후 반납하게 한후(close), 해당 핸들을 통해 해당 모듈을 제어를 하고(ioctl), 일반적인 read,write는 사용하지 않더라도 말입니다. mmap정도로 사용하는 방법도 고려할 수 있을듯해 보입니다.
[quote="Anonymous"]만드시고자 하는 커널모듈을 파일개념에
이 말씀은 캐릭터 디바이스와 같은 형태로 사용하라는 말씀이죠 ?
mknod 로 /dev/ 밑에 장치파일을 생성하고
해당 장치 파일을
fd = open( /dev/xxx,....) 로 열고
ioctl(fd,....) 로 접근하라는...
제가 잘못 이해했나요 ?
지금까지 위와 같이 사용해 왔는데...이 방법 말고 다른 방법이 없나해서 질문을 드린겁니다.
질문의 의도를 정확히 모르겠군요.. mknod 등의 일련의 작업이 귀찮다
질문의 의도를 정확히 모르겠군요.. mknod 등의 일련의 작업이 귀찮다면 sysctl을 사용하세요.
반드시 ioctl로 해야하는 상황이 아니라면 별도의 시스템호출을 만들어
반드시 ioctl로 해야하는 상황이 아니라면 별도의 시스템호출을 만들어 보시는것은 어떨까요?
물론, 표준적인 방식이 아니라서 좀... 그렇군요.
댓글 달기