1. 2種類のDMAマッピング 1.1. 一貫性のあるDMAマッピング 主に長期間使用されるエリアをマッピングするために使用されます。 CPU と DMA コントローラはキャッシュの影響を考慮する必要はありません。 ここでの一貫性は、実際にはコヒーレントの概念であり、保証することはできません。言い換えると、メモリの順序を保証するためにメモリバリアが必要です。 1.2 ストリーミングDMAマッピング 主に 1 回限りの 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バッファを割り当てる // dev DMA コントローラー デバイス // size 割り当てられる DMA バッファー サイズ // dma_handle は DMA バッファーの物理アドレスを返します // flag 割り当てフラグ // 戻り値 DMA バッファーの仮想アドレス void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag) // dev DMAコントローラデバイス // size 解放されたDMAバッファのサイズ // cpu_addr DMAバッファの仮想アドレス // dma_handle DMAバッファの物理アドレス void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr、dma_addr_t dma_handle) より小さい DMA バッファを割り当て、それを dma ポールから適用します。 /** * dma_pool_alloc - DMA ポーリングから一貫性のあるメモリのブロックを取得します * @pool: メモリ ブロックを生成する DMA プール * @mem_flags: GFP_* ビットマスク * @handle: メモリブロックのDMAアドレスを返します */ void *dma_pool_alloc(構造体dma_pool *pool, gfp_t mem_flags, dma_addr_t *ハンドル) /** * dma_pool_free - メモリを解放して DMA プールに戻す * @pool: メモリブロックを生成するDMAプール * @vaddr: メモリブロックの仮想アドレス* @dma: メモリブロックの物理アドレス*/ void dma_pool_free(構造体 dma_pool *pool、void *vaddr、dma_addr_t dma) 3.2 ストリーミング DMA インターフェイス // dev メモリをマップする必要があるデバイス // ptr マップされたバッファの仮想アドレス // size マップされたサイズ // dir 転送方向 // attr 属性 // 戻り値 dma 物理アドレス dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr, size_t サイズ、 列挙型 dma_data_direction ディレクトリ、 符号なしロング属性) // dev メモリをマップする必要があるデバイス // addr DMA領域の物理アドレス // size マッピングのサイズ // dir 転送方向 // attr 属性 void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, size_t サイズ、 列挙型 dma_data_direction ディレクトリ、 符号なしロング属性) ページマッピング dma_addr_t dma_map_page(構造体デバイス*dev、構造体ページ*ページ、 size_t オフセット、size_t サイズ、 列挙型 dma_data_direction dir) void dma_unmap_page(構造体デバイス*dev、dma_addr_t addr、 size_t サイズ、列挙型 dma_data_direction dir) DMAマッピングエラーを返します // DMAマッピングエラーを返す int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) マッピング散布リスト int dma_map_sg_attrs(構造体デバイス*dev、構造体スキャッターリスト*sg、 int nents、enum dma_data_direction dir、 符号なしロング属性) void dma_unmap_sg_attrs(構造体デバイス*dev、構造体スキャッターリスト*sg、 int nents、enum dma_data_direction dir、 符号なしロング属性) // マップ後の DMA アドレスと長さを返します sg_dma_address(struct scatterlist *sg) sg_dma_len(構造体スキャッターリスト *sg) 同期操作 void dma_sync_single_for_cpu(構造体デバイス*dev、dma_addr_t addr、 size_t サイズ、 列挙型 dma_data_direction dir) void dma_sync_single_for_device(構造体デバイス*dev, dma_addr_t アドレス、size_t サイズ、 列挙型 dma_data_direction dir) 空所 dma_sync_sg_for_cpu(構造体デバイス*dev、構造体スキャッターリスト*sg、 int nelems、enum dma_data_direction dir) 空所 dma_sync_sg_for_device(構造体デバイス*dev、構造体スキャッターリスト*sg、 int nelems、enum dma_data_direction dir) 以上が今回ご紹介した関連知識の全てです。追加事項がありましたら、123WORDPRESS.COM 編集部までご連絡ください。 以下もご興味があるかもしれません:
|
<<: mysql5.5.28 のインストール チュートリアルは非常に詳細です。
>>: MySQL 文字列連結と null 値の設定のためのインスタンス メソッド
皆様の参考と操作を容易にするために、様々な主要ウェブサイトを検索し、関連するスケジュールされたタスク...
達成すべき効果: 必要なもの1枚、2枚、3枚とスタイルが異なります。子要素の判定はjsで完結できます...
次のように、Windows/MacOS からログインした Linux の SSH ターミナルで簡単に...
1. フロート: 主な目的は、テキストを画像の周囲に折り返す効果を実現することです。また、複数列レイ...
HTML イベント リスト一般イベント: onClick HTML: マウスクリックイベント。主にオ...
ロケーションは「位置指定」を意味し、主にさまざまな位置指定のための URI に基づいています。これは...
この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...
負荷分散とは何ですか?ドメイン名が複数の Web サーバーを指している場合は、nginx ロード バ...
最近、プロジェクトで input size 属性と maxlength 属性を使用しました。以前は、...
最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...
目次序文: 1. デフォルト値に関する操作2. 使用上の提案要約:序文: MySQL では、テーブル...
フロントエンド開発者がよく遭遇する問題は、ユーザーに情報を提示するためのポップアップ ウィンドウを作...
実際、Vueでaxiosをカプセル化するのは非常に簡単ですまず、srcパスにhttpフォルダを作成し...
現在、Linux を使用するほとんどの人は、クラウド サーバーを使用するか、Windows 上に仮想...
序文これまでインターネットでMySQLジョイントインデックスの最左接頭辞マッチングに関する記事をたく...