2012-05-14 1 views
1

제 질문은 어떻게 메모리를 조작 할 수 있도록 mmap'd 영역을 모듈로 다시 전달할 것입니다.커널 공간으로 다시 mmap'd 영역 전달

은 내가 무엇을 찾고 있어요 것은 이것이다 :

  1. 내 사용자 공간 응용 프로그램 (커널이있는 사용자 공간 스레드에 주신 버퍼지를 추적하기 너무 하드) 수백 개의 스레드를 사용하여 실행됩니다.
  2. 사용자 스레드는 모듈의 mmap 기능을 호출하고 가져온 후에 버퍼로 데이터를 채 웁니다.
  3. 그런 다음 모듈에 ioctl()을 사용하여이 버퍼를 모듈로 전달해야 모듈이 버퍼를 처리하고 수정합니다.
  4. 사용자 공간 스레드는 새로운 데이터

내가 "3 단계"을 구현하는 방법에 관해서는 확실하지 않다을 읽습니다. 이 사용자 버퍼를 모듈에 전달하여 커널 공간에있는 주소를 알 수 있습니까?

(I malloc을하거나 위해서는 copy_from_user를 사용할 수 없습니다) 당신을 위해

답변

1

확인 virt_to_phys() 작동합니다.

  1. userspace-thread는 mmap()을 호출합니다.
  2. 버퍼 주소를 가져오고 버퍼로 데이터를 채 웁니다.
  3. ioctl()을 사용하여 버퍼 주소를 다시 모듈로 전달합니다.
  4. 모듈 호출 virt_to_phys (addr)은 버퍼에서 처리합니다.
  5. 나중에 userspace-thread는 처리 된 데이터를 읽습니다.
관련 문제