Как реализовать mmap для bar0

Я пытаюсь написать свой собственный драйвер PCIe для Linux. Я хотел бы написать мой mmap Функция так, чтобы он отображал bar0, я понимаю, что могу сделать это без написания драйвера, но я делаю это в основном для целей обучения.

Мой первый вопрос: зачем вам реализовывать mmap если ты можешь mmap bar0 без какой-либо разработки драйвера?

Мой второй вопрос: почему мой mmap не работает?

Вот мой mmap код и приложение пользовательского пространства, которое я использую для доступа к нему

static int dma_proxy_mmap(struct file *filp, struct vm_area_struct *vma)
{

if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,vma->vm_end - vma->vm_start,vma->vm_page_prot))
{
return -EAGAIN;
}
printk(KERN_ALERT "mmap done\n");
return 0;
}

и вот мой код пространства пользователя

int main()
{

int proxy_fd;
int *MyMmap;
proxy_fd = open("/dev/scull", O_RDWR);
MyMmap = (int*)mmap(0,32, PROT_READ | PROT_WRITE, MAP_SHARED, proxy_fd, 0);
if (MyMmap == MAP_FAILED) {
printf("mmap failed");
}
MyMmap[0] = 10;
printf ("Decimals: %d\n", MyMmap[0]);

}

Я знаю, что она не работает правильно, потому что моя pcie-карта предназначена для записи другого значения независимо от того, что я отправляю на него для записи, что, как я проверял, работает с помощью mmaping для resource0 этой платы.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]