亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
如何將一塊指定用戶空間memory寫回內(nèi)存?
[打印本頁]
作者:
xhx321
時(shí)間:
2014-03-13 17:43
標(biāo)題:
如何將一塊指定用戶空間memory寫回內(nèi)存?
輸入是一個(gè)用戶空間地址,及memory size.準(zhǔn)備將這片memory做DMA, 有寫入和讀出兩種情況。
因此在DMA前,想將memory內(nèi)容先寫回并置無效。
linux 有一個(gè)函數(shù) dma_cache_wback_inv 可以按page來實(shí)現(xiàn)。
本人在這塊很菜,求實(shí)現(xiàn)方法。或者linux有其他函數(shù)可以直接實(shí)現(xiàn)的嗎?
先謝了。
作者:
humjb_1983
時(shí)間:
2014-03-14 09:47
用戶空間估計(jì)比較麻煩~~,能否再詳細(xì)描述下需求,為何要這樣~
作者:
linyunxian
時(shí)間:
2014-03-14 10:47
回復(fù)
2#
humjb_1983
呵呵,這種怪異一般都是需求不夠明確。
DMA本身有方向,不會(huì)存在DMA完之后還需要再寫入讀出的情況。
它可能需要的是mmap()出兩片內(nèi)存,做兩個(gè)dma通道,或者雙緩沖來完成所需的功能。
作者:
xhx321
時(shí)間:
2014-03-14 11:14
場(chǎng)景是這樣的,有個(gè)ioctl接口提供data transfer 功能。由用戶空間提供一塊memory,有時(shí)需要將memory的內(nèi)容DMA到一個(gè)device里,有時(shí)需要將device的內(nèi)容DMA到這塊memory里。我遇到的問題是,現(xiàn)在device的內(nèi)容DMA到這片memory里的數(shù)據(jù)不一致。
在查代碼時(shí),發(fā)現(xiàn)code 是下面的寫法
dma_cache_wback_inv(用戶空間地址,。。)
DMA data in/out
上網(wǎng)一查,發(fā)現(xiàn)這個(gè)寫法不對(duì)。但目前也沒找到正確的寫法
作者:
humjb_1983
時(shí)間:
2014-03-14 12:30
dma_cache_wback_inv(用戶空間地址,。。)
這里應(yīng)該是物理地址吧?
搜了下內(nèi)核代碼,發(fā)現(xiàn)x86中很少用到這個(gè)的,mips用的多,感覺不一定與此相關(guān)。
作者:
xhx321
時(shí)間:
2014-03-14 12:56
是啊,那個(gè)參數(shù)本來應(yīng)該是物理地址。這個(gè)問題是在mips芯片上碰到的。
作者:
humjb_1983
時(shí)間:
2014-03-14 13:48
那具體問題是啥?好像沒看明白~
作者:
xhx321
時(shí)間:
2014-03-14 14:18
現(xiàn)在知道用戶空間地址,以及memory size。但怎樣將這片memory寫回并置無效?
前面說了 dma_cache_wback_inv(用戶空間地址。。)這樣的調(diào)用是錯(cuò)的 ?
那正確的應(yīng)該怎樣寫呢?
作者:
humjb_1983
時(shí)間:
2014-03-14 15:33
不好意思,之前理解錯(cuò)了,
dma_cache_wback_inv()傳入的應(yīng)該是虛擬地址,這里傳物理地址可能不對(duì),你試試呢~
另外,x86架構(gòu)中該函數(shù)的實(shí)現(xiàn)中根本就沒有用到這個(gè)地址:
static inline void flush_write_buffers(void)
{
__asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory");
}
#define dma_cache_inv(_start,_size) flush_write_buffers()
#define dma_cache_wback(_start,_size) flush_write_buffers()
#define dma_cache_wback_inv(_start,_size) flush_write_buffers()
復(fù)制代碼
x86中使用很少,mips代碼不懂,各個(gè)平臺(tái)實(shí)現(xiàn)也不一樣,建議你研究下代碼。
作者:
linyunxian
時(shí)間:
2014-03-14 15:37
回復(fù)
4#
xhx321
硬件做DMA要求物理地址連續(xù)。由用戶空間申請(qǐng)到的內(nèi)存經(jīng)常是不連續(xù)的。
更常見的做法是用戶空間通過mmap向設(shè)備申請(qǐng)一塊可以做dma的內(nèi)存。
用戶空間控制dma的觸發(fā)。
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2