2011-10-04 4 views
1

(커널 모드에서 한번) 쓰기를 시도하여 커널에 시스템 호출을 동적으로로드 (커널 재시작 및 압축 해제없이)하려고합니다. 사용자 프로세스의 메모리사용자 프로세스가 내 모듈에 의해로드 된 문자 디바이스에 액세스하는 방법

(나는 거기의 ptrace 인터페이스 할 수있는 방법이 있지만,이 옵션을 선택하지 않습니다 알고 있습니다.)

나는이 작업을 수행 할 수있는 유일한 방법을 알고는 모듈을로드하는 것입니다. 사용자가 그 장치와 통신 할 수있게하기 위해 문자 장치 (/ dev /에 있어야합니다.)를 사용해야한다고 들었습니다. 나는 하나를 성공적으로 적재했다. 제 문제는 사용자 프로세스가 시스템 호출없이 어떻게 액세스하는지 모릅니다. (ioctl을 사용하라는 메시지가 나타났습니다.) 사용자 프로세스가 ioctl을 호출 할 수있는 방법을 보여 줄 수 있습니까?

감사합니다, 샤이 아래의 답변

답변

0

, 난 당신이 리눅스 모듈을 개발하는 것으로 가정했다. 질문을 다시 읽으면 문제를 잘못 해석했을 수 있습니다. 통해

  • 직접 디바이스 인터페이스를 통해 (일명 procfs)

    • /proc 엔트리
    • ioctl :


  • 커널 드라이버와의 통신을 위해 여러 메커니즘이있다 장치 인터페이스

    가장 일반적인 기술은 read() 및/또는 write() 시스템 호출을 사용하여 드라이버 동작을 유발하는 마지막 기술입니다. 이러한 시스템 호출이 일반적으로 순수한 데이터를 전달하는 동안 특정 드라이버를 중지하는 대신에 metadata을 I/O 인터페이스를 통해 전달하는 것이 아무것도 없습니다. 드라이버가 이미 read()write() 메타 데이터에 대한 좋지 않다있는 유용한 순수 데이터 규율이있는 경우 반면에

    , 다음 ioctl() 시스템 호출은 범용 스위스 군용 칼의 종류 모든 종류의 것들 일입니다 자기 테이프의로드 또는 언로드, DVD 꺼내기, 네트워크 카드의 이더넷 주소 찾기 또는 얼마나 많은 디스크 드라이브 오류가 발생했는지 파악하는 것과 같은 파일 관련 작업입니다. ioctl 작업 코드가 너무 많아서 사용자 목적에 따라 재사용 할 수있는 합리적인 코드를 찾을 수 있습니다. ioctl 인터페이스의 가장 큰 단점은 사용자 정의 프로그램에서 사용하기에 가장 적합하므로 표준 프로그램의 파이프 라인에 연결된 ioctl을 통해 데이터를 전송하는 것이 어색하거나 어려울 수 있다는 것입니다. 이 표준 유틸리티 프로그램 stdin/ stdout 규칙을 사용하는 의무이지만, 또한 관통/O를 모든 I 독립적 인 디바이스 드라이버에 대한 인터페이스를 제공

    /proc 인터페이스는 이전 두 기술 중 가장 결합한 정기적 인 드라이버 메커니즘. 예를 들어, Linux 시스템에서 cat /proc/net/tcp을 시도하십시오. 모든 TCP 연결 상태를 보여줍니다.

    procfs 기능 구현에 관한 유용한 정보는 create_proc_entry()입니다. ioctl 구현은 here에 포함됩니다. 메타 데이터 접근법은 경험이 풍부한 구현 자에게 개념적으로 장애가 될 수 있지만 다른 모든 디바이스 드라이버만큼 쉽게 코딩 할 수 있습니다.

    +0

    감사합니다. 작동합니다! – user979223

    관련 문제