[問題] linux DMA問題

看板LinuxDev作者時間10年前 (2014/04/30 17:34), 編輯推噓7(7016)
留言23則, 4人參與, 最新討論串1/1
我想在linux下用DMA和我的硬體溝通 網路上很多教學文都是kmalloc一塊記憶體大小 用dma_map_single 映射出一個DMA可使用的地址 這種方法我也試成功了 現在的問題是我有一筆資料要用我的硬體做運算 我已經知道這筆資料起始位置也確定資料是連續的 但是我把這個地址用dma_map_single會出現segment fault 我現在的做法是把要算的資料複製到一塊kmalloc的記憶體 再用硬體算我剛剛複製的資料 這樣是成功的 但是複製一份花了相當多的時間 我想知道已知memory address 可否直接用DMA 該怎麼做 我的dma_map_single 跟 kmalloc 都是寫在我硬體的driver中的ioctl 要算的資料是在main中產生 當要開始算的時候call ioctl 拜託各位高手救救我 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.27.12 ※ 文章網址: http://www.ptt.cc/bbs/LinuxDev/M.1398850493.A.75F.html

04/30 18:03, , 1F
kmalloc有大小限制,你提到花很多時間.我猜有可能爆掉
04/30 18:03, 1F

04/30 18:04, , 2F
有考慮試看看 vmalloc 嗎
04/30 18:04, 2F

04/30 18:38, , 3F
我kmalloc一塊記憶體將資料複製進去是成功的
04/30 18:38, 3F

04/30 18:39, , 4F
但是這麼做感覺很浪費時間
04/30 18:39, 4F

04/30 18:40, , 5F
可以用原本的資料不用經過複製的程序嗎?
04/30 18:40, 5F

04/30 20:27, , 6F
vmalloc的位置應該不能拿來用DMA? 我記得不保證連續
04/30 20:27, 6F

04/30 20:31, , 7F
只是說為什麼你不一開始用就kmalloc來保存你的資料?
04/30 20:31, 7F

04/30 20:33, , 8F
driver init時可以先kmalloc一塊記憶體出來
04/30 20:33, 8F

04/30 20:34, , 9F
如果資料來自userspace,可以用mmap讓userspace可以直接
04/30 20:34, 9F

04/30 20:34, , 10F
到kmalloc出來的buffer,不需要ioctl送資料進driver~
04/30 20:34, 10F

05/02 01:40, , 11F
實作你的IOREMAP,在DRIVER中MAP一段實體連續的給APP
05/02 01:40, 11F

05/02 01:41, , 12F
說錯..實作mmap
05/02 01:41, 12F

05/02 12:05, , 13F
感謝askacis跟mayasky的回覆,這幾天上網爬文已經實作出
05/02 12:05, 13F

05/02 12:06, , 14F
mmap,不過他的感覺是在kernel映射一塊記憶體給user用
05/02 12:06, 14F

05/02 12:07, , 15F
所以我想運算的資料一定要寫在mmap回傳的address
05/02 12:07, 15F

05/02 12:10, , 16F
可是我想算的資料是一張圖用opencv的函式cvLoadImage以及
05/02 12:10, 16F

05/02 12:15, , 17F
webcam傳入,所以我無法指定要算資料的起始address
05/02 12:15, 17F

05/02 12:17, , 18F
請問各位高手這種問題要如何解決?小弟是第一次寫driver
05/02 12:17, 18F

05/02 21:21, , 19F
把輸入的資料複製到mmap回傳的記憶體位置勒?
05/02 21:21, 19F

05/02 21:30, , 20F
是用memcpy()嗎? 我現在就是使用這種方法,想請問一下還
05/02 21:30, 20F

05/02 21:31, , 21F
有更快的方法嗎?因為這樣感覺把記憶體複製感覺會慢很多
05/02 21:31, 21F

05/03 02:35, , 22F
所以IMAGE的ADDRESS是LIBRARY決定的?
05/03 02:35, 22F

05/03 02:37, , 23F
如果OPENCV是OPEN SOURCE...我會改OPENCV的配置MEM方式
05/03 02:37, 23F
文章代碼(AID): #1JOCEzTV (LinuxDev)
文章代碼(AID): #1JOCEzTV (LinuxDev)