流式dma對映,使用這個函式前需要事先分配連續物理記憶體,這個函式只是物理位址對映到虛擬位址
dma_map_single
dma_unmap_single
dma池
dma如果使用cache,那麼一定要考慮cache的一致性。解決dma導致的一致性的方法最簡單的就是禁止dma目標位址範圍內的cache功能。但是這樣就會犧牲效能。
從dma_alloc_coherent和dma_alloc_writecombie原始碼可以看出,
dma_alloc_coherent pgprot_noncached 禁止了頁表項中的c(cacheable)域和b(bufferable)域
此時由於關閉了cache/buffer,效能自然比較低
dma_alloc_writecombie pgprot_writecombine 只禁止了c (cacheable) 域
完整**位置:dma對映函式
// int direction = pci_dma_fromdevice ;
static int direction = pci_dma_bidirectional;
//int direction = pci_dma_none;
static char *kbuf;
static dma_addr_t handle;
static size_t size = (10 * page_size);
static struct dma_pool *mypool;
static size_t pool_size = 1024;
static size_t pool_align = 8;
static void my_release(struct device *dev)
static struct device dev = ;
static void output(char *kbuf, dma_addr_t handle, size_t size, char *string)
static int __init my_init(void)
static void __exit my_exit(void)
module_init(my_init);
module_exit(my_exit);
module_author("jerry cooperstein");
module_description("ldd:2.0 s_23/lab1_dma.c");
module_license("gpl v2");
dma匯流排全稱 DMA匯流排
dma 是所有現代電腦的重要特色,他允許不同速度的硬體裝置來溝通,而不需要依於 cpu 的大量 中斷 負載。否則,cpu 需要從 把每一片段的資料複製到 暫存器,然後把他們再次寫回到新的地方。在這個時間中,cpu 對於其他的工作來說就無法使用。dma 傳輸主要地將乙個記憶體區從乙個裝置複製到另外乙個...
Linux裝置驅動 DMA 介面API
目錄 dma概述 dma與cache的一致性 相關api dma資料結構 dma是一種無需cpu的參加就可以讓外設與系統記憶體之間進行雙向資料傳輸的硬體機制。它可以使系統cpu從實際的i o資料傳輸過程中擺脫出來,大大提高系統的吞吐率,並且在傳輸期間,cpu還可以併發執行其他任務。cache用作cp...
dma是什麼意思 什麼是dma
dma的英文拼寫是 direct memory access 漢語的意思就是直接記憶體訪問,是一種不經過cpu而直接從記憶體了訪問資料的資料交換模式。pio模式下硬碟和記憶體之間的資料傳輸是由 cpu來控制的 而在dma模式下,cpu只須向dma控制器下達指令,讓dma控制器來處理數的傳送,資料傳送...