Здравствуйте!
Есть задача: для 1-4 PCI плат выделить по 64Mб непрерывной памяти, иметь доступ к каждому из блоков этой памяти из user-space и его физический адрес для передачи соотвествующей плате. ОС: Ubuntu 11.01 x86 Kernel 3.0.0-12-generic.
Блоки памяти могут выделяться кусочно (сейчас необходимо сделать по 2 банка 32Мб для каждой платы, но хорошо бы иметь возможность изменять объем банков и их количество).
Я предполагаю, что необходимо делать это с помощью функции dma_alloc_coherent(), из которой будет получаться dma_addr_t* - физический адрес, который можно передать в устройство, и указатель на памяти в kernel-space. Далее этот указатель отправляется в user-space с помощью mmap().
Возможно, можно выбрать для выделения памяти kmalloc() с необходимыми флагами, а физический адрес получить из полученного указателя с помощью дополнительных функций.
Вопрос: какими средствами лучше сделать эту операцию, чем выделать память? Как лучше отправить указатель на выделенную память в user-space (с учетом того, что банков памяти может быть много и нужно иметь указатель на каждый из них)?
Спасибо.