mmap()은 파일에서 메모리 주소와 파일 사이의 일대일 대응을 위해 파일을 메모리에 매핑하는 것을 허용한다는 것을 알고 있습니다.리눅스 : 비정상 파일을위한 mmap()
하지만 내 질문에 파일이 장치 드라이버에서 생성 된 비정규 파일 인 경우 어떻게됩니까? 아시다시피 일부 비정규 파일은 mmap 가능하고 일부는 그렇지 않습니다. 이것이 프로그래밍의 관점에서 무엇을 의미합니까? 비정상적인 파일을 mmap 가능하게하려면 어떻게해야합니까?
mmap()은 파일에서 메모리 주소와 파일 사이의 일대일 대응을 위해 파일을 메모리에 매핑하는 것을 허용한다는 것을 알고 있습니다.리눅스 : 비정상 파일을위한 mmap()
하지만 내 질문에 파일이 장치 드라이버에서 생성 된 비정규 파일 인 경우 어떻게됩니까? 아시다시피 일부 비정규 파일은 mmap 가능하고 일부는 그렇지 않습니다. 이것이 프로그래밍의 관점에서 무엇을 의미합니까? 비정상적인 파일을 mmap 가능하게하려면 어떻게해야합니까?
저는 mmap 함수 포인터 (struct file_operations)를 구현 한 Linux 커널 모듈에서 작업했습니다. 이 모듈은/dev/디렉토리에 장치 항목을 만듭니다. 이제는 내 사용자 공간 응용 프로그램이 "open"을 사용하여이 항목을 열고 mmap 시스템 호출을합니다. 결국 Linux-Kernel-module 내부에서 mmap 함수가 불려질 것이라는 것을 암시하고 구현 된 처리를 수행하고 사용자 공간으로 돌아갈 것입니다.
이것은 사용자 공간이 OS (커널)에 요청한 서비스를 나타내는 예입니다. 사용자가 하드웨어에 액세스하려고하거나 커널에서 서비스를 요청하려는 경우 (실제 메모리를 사용자 가상 주소 공간에 매핑하는 것처럼)/dev/또는/sys에있는 드라이버가 만든 항목을 사용하여 수행 할 수 있습니다/또는/proc/등이 있습니다.이 파일은 커널에 대한 "가상 인터페이스"라고 할 수 있습니다.