2012-03-01 2 views
2

샘플 드라이버가 성공적으로 생성되어로드되었습니다. 사용자 정의 함수가 작성되고 일부 동작이 수행됩니다. 드라이버 모듈에 사용자 정의 함수를 호출하는 사용자 프로그램을 작성해야합니다.사용자 프로그램에서 커널 모듈로 작성된 함수를 어떻게 호출 할 수 있습니까?

다음과 같은 경우 도움이 필요합니다.

  1. 어떻게하면 사용자 프로그램에서 드라이버 코드에 액세스 할 수 있습니까?
  2. 사용자 프로그램에서 커널 모듈로 작성된 함수를 어떻게 호출 할 수 있습니까?

감사합니다.

+0

1. 할 수 없다. 2. 무엇? 도움을 주신 덕분에 – UmNyobe

답변

7

/dev/xxx 파일이나/proc/xxx 파일에 쓰기 (또는 필요한 경우 ioctl)에 반응하도록 드라이버를 만들 수 있습니다. 또한 새로운 시스템 콜을 만들 수도 있지만 모듈은 커스텀 빌드 커널에서만 작동하므로 더 많은 장난감이 필요합니다.

편집 : http://www.faqs.org/docs/kernel/x571.html (문자 장치 드라이버에.) 시도

+0

. 너는 약간 참고를 제공 할 수 있는다. – tijin

+0

여기에서이 참조를 확인하십시오. https://github.com/sachinites/RIBDriver 장치 파일을 사용하여 커널 통신에 사용자 공간을 구현합니다. –

3

그것은 당신의 함수가 무엇인지에 따라 다르지만 일반적으로 :

  • 당신이 저장하려면 특성을 보여 값의 형태 (예 : 백라이트의 현재 밝기)의 표준 방법은 sysfs를 사용하는 것입니다. http://kernel.org/doc/Documentation/filesystems/sysfs.txt

  • 장치 (실제 또는 가상)에서 값을 쓰거나 읽으려면 장치의 메모리 또는 IO 영역을 사용자 공간으로 내보내거나 더 일반적으로 장치를 제어하십시오 (예 : 카메라의 해상도 설정 및 프레임 캡처) 다음과 같이 읽기/쓰기/mmap 및 ioctl 기능이있는 문자 또는 블록 장치를 사용할 수 있습니다. http://luv.asn.au/overheads/chrdev-talk.html

  • 마지막으로 함수가 커널에서 제어하는 ​​경우 sysfs 또는 procfs 가야 할 길이되어야합니다. 어쩌면 사람들이 아직도 procfs를 사용하고 있는지 모르겠다. 아마도 기타 장치를 제외하고.

그래서 일반적으로, 당신은 사용자에게 /로부터 데이터를 복사 (작성, 읽기, 파일을 열 때 호출되는 후크를 정의하여, 파일로부터의 유저 공간 커널 함수를 내 보내야합니다 공백), mmap'ed (복사하지 않고 메모리 영역을 공유) 또는 ioctl이 호출 될 때 (보다 일반적인 제어를 수행하기 위해).

0

Qn.1을 위해 : 읽기/쓰기/ioctl을 볼 경우 file_operations Qn.2에 대한 : 1) 시스템 호출 2) 드라이버 - ioctl

관련 문제