Цитата(Dubov @ Aug 16 2012, 09:41)

Просто я опасаюсь, что если я отображу память как mmap(), не отобразится ли что-то ненужное кроме буфера из драйвера.
Это уже от вас зависит - что вы отобразите в своем драйвере, что вам мешает проверять не выходит ли запрашиваемый из юзерспейс размер буфера за пределы выделенного в драйвере региона памяти ? учитывайте при этом что выделение памяти в ядре и отображение ее в виртуальном адресном пространстве процесса или ядра всегда происходит кратно странице, что для ARM будет 4096 байт.
Код
static int xxx_mmap (struct file *file, struct vm_area_struct *vma)
{
unsigned long size = vma->vm_end - vma->vm_start;
if (size > kmalloc_area_size)
return -ENOMEM;
if (remap_pfn_range(vma,
vma->vm_start,
virt_to_phys((void *)kmalloc_area) >> PAGE_SHIFT,
size,
vma->vm_page_prot))
return -EAGAIN;
return 0;
}
static const struct file_operations xxx_fops = {
...
.mmap = xxx_mmap,
};
Цитата
P.S. Прошу сильно не пинать. С Linux'ом я только начинаю знакомиться.
вы выбрали очень неэффективный метод обучения - вместо того чтобы почитать документацию на процессор, книги или статьи по по устройству ядра Linux и написанию драйверов коих и на русском сейчас великое множество - идете на форум с кучей вопросов.