簡體   English   中英

mmap 物理連續內存

[英]mmap physically contiguous memory

我可能在這里有一些誤解,所以請耐心等待。

我寫了一個程序,從相機捕捉圖像。 正如我在V4L2 文檔中找到的那樣,我正在使用mmap在相機和我的應用程序之間共享內存。 這很好用。 現在我的處理器(它是 TI 的 DM3730)也有一個 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); 
...

我怎樣才能立即將幀放入物理連續內存中?

如果您不能將Memory_alloc()的結果作為第一個參數傳遞給您的mmap() (例如,如果它還使用 mmap() 這將使其無法再次映射到該內存),您可能應該使用另一個流 I/ O給定示例中的方法 - IO_METHOD_USERPTR變體。 它使用與 IO_METHOD_MMAP 相同的ioctl來捕獲幀,並且應該提供類似的效率。

您需要相機驅動程序的驅動程序支持。 mmap從它映射的任何驅動程序獲取它映射的物理頁面 - 在這種情況下是相機。 你不能告訴 mmap 使用一些預先分配的頁面,因為必須告訴底層驅動程序使用這些預先分配的頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM