Sharing a buffer between kernel-space and user-space


ION memory allocator 관련 글은 LWN 를 번역한 The Android ION memory allocator 참조.


이번에는 user-space 에서 할당한 메모리를 kernel driver 에서 공유하여 write 를 하고 user에서 write 한 데이터가 잘 들어가 있는지 확인하는 수준(?)으로 진행한다.


% 모바일이나 특정 브라우저에서는 syntex highlight 가 지원이 안되어 textbox 에 소스가 나올 수도 있음.


Scenario

1. User 에서 ion("/dev/ion")을 open ==> alloc ==>  share 순으로 진행하여 공유할 ion buffer 를 생성 및 공유 준비

2. User application 에서 공유하려는 kernel driver("/dev/vion_dev")를 open : 여기서 vion_dev 는 내가 만든 device driver 이다. 

3. User 에서 만들어진 shared_fd 를 vion_dev driver 로 전달.

4. Kernel driver 에서 받은 shared_fd 를 이용해 import 하여 메모리를 공유할 준비.

5. User 영역에서 특정 string("ion buffer test magic string") 을 vion_dev driver 에 write 를 요청

6. Kernel driver 에서 shared buffer 에 magic string을 write

7. User 에서 mmap 으로 shared buffer 의 내용 확인.


먼저 User application을 살펴 보면,

아래의 ion_XXX interface 들은 https://android.googlesource.com/platform/system/core/+/android-4.1.2_r1/libion/ion.c 를 살펴 보면 내용을 볼 수 있다. 


  - User-space application


주석을 참조하고 Android ION 에 대한 내용의 글을 보면 이해가 쉬울 듯 한데..


  - Kernel-space driver


참고 할 정도의 code는 되지 않을까? ^^



+ Recent posts