mmap physically contiguous memory

У меня могут быть некоторые заблуждения здесь, так что потерпите меня.

Я написал программу, которая захватывает изображения с камеры. Я разделяю память между камерой и моим приложением с помощью mmap, как я нашел в документации по V4L2. Это работает отлично. Теперь мой процессор (это DM3730 от TI) также имеет DSP. Я хочу использовать DSP, но ему требуется физическая непрерывная память. TI предоставляет драйверы для выделения памяти. Моя проблема в том, что сейчас я теряю много времени на копирование mmap'ed памяти в физическую непрерывную память. Есть ли способ сказать mmap, что он не должен сам выделять память, а я должен сказать mmap использовать память, которую я выделяю.

Чтобы дать вам представление о том, что я делаю (Конечно, много кода отсутствует, но я очень близко придерживался документации V4L2. Надеюсь, этого достаточно для понимания моей проблемы):

//reserve physical contiguous memory
dsp_buffer      = Memory_alloc(buffer_length, &myParams); 

...
//reserve memory for buffer, but not contiguous
buffers[n_buffers].start =
     mmap (NULL ,                    /* start anywhere */
     buf.length,
     PROT_READ | PROT_WRITE ,  /* required */                               
     MAP_SHARED ,              /* recommended */
     fd, buf.m.offset);

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

...
//wait until frame is ready in memory
r = select (fd + 1, &fds, NULL, NULL, &tv); 
...
//copy the memory over to the physically contiguous memory
memcpy(dsp_buffer,buffers[buf.index].start,size); 
...

Как я могу получить кадры в физическую непрерывную память сразу же?

10
задан Lucas 28 November 2011 в 19:02
поделиться