Я пытаюсь понять, как работает mmap. Вызов mmap на уровне пользователя выглядит следующим образом.
void *mmap(void *addr, size_t len, int prot, int flags,
int fildes, off_t off);
но mmap на уровне ядра для конкретного драйвера устройства выглядит так:
int <device_name>_mmap(struct file*fp, struct vm_area_struct *vma)
Я также просмотрел исходный код, но не смог найти связь между ними.
Как mmap для конкретного устройства получает свои аргументы «struct vm_area_struct *vma»? Не могли бы вы помочь мне понять это? Ценю вашу помощь.