1.兩種dma對映型別
1.1. 一致性dma對映(consistent dma mappings )
主要用於對映長時間使用的區域。
cpu和dma controller不需要考慮cache的影響。
這裡的consistent實際上是coherent的概念,不能保證consistent,也就是說需要memory barrier來保證memory order。
1.2 流式dma對映(streaming dma mapping)
主要用於一次性dma傳輸,傳輸完成後就會釋放。
2.指定dma裝置的定址範圍
include/linux/dma-mapping.h
// 用於一致性記憶體對映的對映範圍
static inline int dma_set_coherent_mask(struct device *dev, u64 mask)
// 用於流式記憶體對映的對映範圍
static inline int dma_set_mask(struct device *dev, u64 mask);
3.dma對映介面
3.1一致性dma介面
分配較大dma buffer
// dev dma控制器裝置
// size 要分配的dma buffer大小
// dma_handle 返回dma buf的實體地址
// flag 分配標誌
// 返回值 dma buffer的虛擬位址
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag)
// dev dma控制器裝置
// size 釋放的dma buffer大小
// cpu_addr dma buf的虛擬位址
// dma_handle dma buf的實體地址
void dma_free_coherent(struct device *dev, size_t size,
void *cpu_addr, dma_addr_t dma_handle)
分配較小dma buffer,從dma poll中申請。
/*** dma_pool_alloc - 從dma poll獲得一塊一致性記憶體
* @pool: 產生記憶體塊的dma pool
* @mem_flags: gfp_* bitmask
* @handle: 返回記憶體塊的dma位址
*/void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
dma_addr_t *handle)
/** * dma_pool_free - 將記憶體釋放回dma pool
* @pool:產生記憶體塊的dma pool
* @vaddr: 記憶體塊的虛擬位址
* @dma: 記憶體塊的實體地址
*/void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma)
3.2 流式dma介面
// dev 需要對映記憶體的裝置
// ptr 對映的buffer虛擬位址
// size 對映的大小
// dir 傳輸方向
// attr 屬性
// 返回值 dma實體地址
dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr,
size_t size,
enum dma_stsrxovdata_direction dir,
unsigned long attr程式設計客棧s)
// dev 需要對映記憶體的裝置
// addr dma區域的實體地址
// size 對映的大小
// dir 傳輸方向
// attr 屬性
void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr,
size_t size,
enum dma_data_direction dir,
unsigned long attrs)
page對映
dma_addr_t dma_map_page(struct device *dev, struct page *page,
size_t offset, size_t size,
enum dma_data_direction dir)
void dma_unmap_page(struct device *dev, dma_addr_t addr,
size_t size, enum dma_data_direction dir)
返回dma對映錯誤
// 返回dma對映錯誤
int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
對映scatterlist
int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
int nents, enum dma_data_direction dir,
unsigned long attrs)
void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
程式設計客棧 int nents, enum dma_data_direction dir,
unsigned long attrs)
// 返回map後的dma位址和長度
sg_dma_address(struct scatterlist *sg)
sg_dma_len(struct scatterlist *sg)
sync操作
void dma_sync_single_for_程式設計客棧cpu(struct device *dev, dma_addr_t addr,
size_t size,
enum dma_data_direction dir)
void dma_sync_single_for_device(struct device *dev,
dma_addr_t addr, size_t size,
enum dma_data_direction dir)
void
dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
int nelems, enum dma_data_directionwww.cppcns.com dir)
void
dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
int nelems, enum dma_data_direction dir)
介面知識點2
1.介面中常量的定義 public static final int num one 34 注意事項 前三個關鍵字可以省略,final定義的是不可變的量,名字盡量是用大寫,必須進行賦值。2.介面是沒有靜態 塊或者構造方法的。3.乙個類的直接父類只能有乙個,但是乙個類可以同時實現多個介面。格式為 pu...
Map介面知識點
map知識點 1 map介面 hashmap集合 linkedhashmap集合 2 map 雙列集合,collection 單列集合 3 hashmap 要保證鍵的唯 一 不重複,需要重寫鍵的hashcode 方法 equals 方法。4 linkedhashmap儲存順序一致 5 map 鍵ke...
介面測試知識點
介面大體分為 websevice介面 請求報文格式是body date,返回報文是xml格式 http api介面 請求報文格式是value key,返回報文是jsonp 介面文件的組成部分 可以檢查頁面上發現不了的bug,如繞過前端頁面的一些操作是否具有安全性 檢查系統的異常處理能力 安全性 介面...