Добрый день.
Нужен совет по направлению "раскопок" для портирования драйвера ядра 2.6 на 2.4
В драйверах для ядра 2.6 встречаю два варианта варианта работы с виртуальной памятью:
1. vmalloc_32(), vmalloc_to_page(), vm_insert_page() - например UVC
2. vmalloc_32(), vmalloc_to_page() - например SPCA5xxОтсюда собственно вопросы:
1. какую задачу решает vm_insert_page(), почему spca спокойно обходится без него ?
2. есть ли аналог vm_insert_page() для ядра 2.4 ?В LDD2 и LDD3 этот метод не рассмартривается.
Заранее спасибо.
> ... для портирования драйвера ядра 2.6 на 2.4Нахуа? :)
> В драйверах для ядра 2.6 встречаю два варианта варианта работы с виртуальной
> памятью:
> 1. vmalloc_32(), vmalloc_to_page(), vm_insert_page() - например UVC
> 2. vmalloc_32(), vmalloc_to_page() - например SPCA5xx
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)kva = (unsigned long) page_address(vmalloc_to_page((void *) adr));
kva |= adr & (PAGE_SIZE - 1);#else
va = VMALLOC_VMADDR(adr);
kva = uvirt_to_kva(pgd_offset_k(va), va);http://mxhaard.free.fr/spca50x/Download/oldrelease/spca5xx-2...
> Отсюда собственно вопросы:
> 1. какую задачу решает vm_insert_page(), почему spca спокойно обходится без него ?This allows drivers to insert individual pages they've allocated into a user vma.
The page has to be a nice clean _individual_ kernel allocation. If you allocate
a compound page, you need to have marked it as such (__GFP_COMP), or manually
just split the page up yourself (see split_page).The page does not need to be reserved.
> 2. есть ли аналог vm_insert_page() для ядра 2.4 ?
remap_page_range()