Я пытаюсь понять, как работает mmap. Вызов уровня пользователя mmap выглядит как показано ниже.Связь между вызовом пользователя mmap на вызов ядра mmap
void *mmap(void *addr, size_t len, int prot, int flags,
int fildes, off_t off);
, но на уровне ядра ММАП для конкретного драйвера устройства выглядит следующим образом:
int <device_name>_mmap(struct file*fp, struct vm_area_struct *vma)
Я также посмотрел на исходный код, но я не могу найти связь между ними.
Как mmap для конкретного устройства получает свои аргументы "struct vm_area_struct * vma"? Можете ли вы, пожалуйста, помочь мне понять это? Ценю вашу помощь.
Фактически я не смог найти соединение – vindyz
'vm_area_struct' содержит информацию о диапазоне виртуальных адресов для отображения в пользовательском процессе и смещении на устройстве, которое приложение хочет сопоставить. Аргумент 'file' соответствует файловому дескриптору на стороне пользователя. –
Пример минимального запускаемого модуля ядра: https://stackoverflow.com/questions/10760479/how-to-mmap-a-linux-kernel-buffer-to-user-space/45645732#45645732 –