linux-4.4/DMA_buffer
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#l9ed6214]
#backlinks
*説明 [#j29aa4c1]
FIXME: なにをするもの?
-とぴっく
--共有に特化、バッファを確保する機能は提供しない。
--CMA など、別の手段を用いてドライバ(DMA buffer sharing ...
**主要ユーザ API [#v97154ee]
-[[linux-4.4.1/dma_buf_fops(global)]] より、下記に対応し...
--close()
--mmap()
---ユーザプロセスからバッファを読み書きしたいときに使う。...
--seek()
---バッファのサイズを知るために使う。SEEK_END を指定すれ...
--poll()
---同時に DMA を実行して、バッファの内容を破壊しないよう...
-mmap() の動き
mmap()
- dma_buf_mmap_internal()
- dmabuf->ops->mmap()
ION の場合 mmap = ion_mmap, なので、
- ion_mmap()
- buffer->heap->ops->map_user()
Carveout Heap の場合 map_user = ion_heap_map_u...
- ion_heap_map_user()
- remap_pfn_range()
もう一例。
mmap()
- dma_buf_mmap_internal()
- dmabuf->ops->mmap()
V4L2, 物理連続メモリを要求するデバイスの場合 mmap ...
- vb2_dc_mmap()
- dma_mmap_coherent()
- dma_mmap_attrs()
- ops->mmap()
ARM の場合、通常は mmap = arm_dma_mmap, な...
- arm_dma_mmap()
- __arm_dma_mmap()
- remap_pfn_range()
**主要カーネル API [#v9878462]
-dma_buf_ops を使って、DMA バッファの扱い方(特にどうやっ...
--[[linux-4.4.1/dma_buf_ops]]
--なぜかというと、DMA バッファの確保の仕方によってバッフ...
---map_dma_buf
---unmap_dma_buf
---release
---kmap_atomic
---kmap
---mmap
-バッファを共有するための準備をする、dma_buf ライブラリに...
--[[linux-4.4.1/dma_buf_export()]]
--[[linux-4.4.1/dma_buf_export_info]]
-DMA Buffer から fd を得る。
--[[linux-4.4.1/dma_buf_fd()]]
-fd から DMA Buffer を得る。
--[[linux-4.4.1/dma_buf_get()]]
-DMA Buffer の共有を開始する
--[[linux-4.4.1/dma_buf_attach()]]
--[[linux-4.4.1/dma_buf_attachment]]
-DMA Buffer をカーネルのリニアアドレス空間にマッピングす...
--ドライバからバッファにアクセスするときは必須。
--[[linux-4.4.1/dma_buf_map_attachment()]]
--[[linux-4.4.1/dma_buf_unmap_attachment()]]
-DMA Buffer をユーザの仮想空間にマッピングする。
--[[linux-4.4.1/dma_buf_mmap()]]
-DMA Buffer の共有を終了する
--[[linux-4.4.1/dma_buf_detach()]]
**シーケンス [#n3abc860]
-バッファのオーナーとなるドライバ
--バッファ確保
---方法は何でも良い、例えば [[linux-4.4.1/dma_alloc_coher...
--[[linux-4.4.1/dma_buf_export()]]
---バッファの共有の準備をする。
---dma_buf カーネルライブラリにバッファの存在を教える。
---[[linux-4.4.1/dma_buf]] が得られる。
--[[linux-4.4.1/dma_buf_fd()]]
---バッファを共有するためのファイルディスクリプタが得られ...
-バッファのオーナーとなるプロセス
--ファイルディスクリプタを受け取る。
---ドライバからファイルディスクリプタを受け取る方法は任意。
---[[linux-4.4.1/ioctl()]] を使うことになる?
-バッファのユーザとなるプロセス
--ファイルディスクリプタを受け取る。
---バッファのオーナープロセスから受け取る方法は任意。
---UNIX socket の sendmsg() の cmsg で複製できる?
-バッファのユーザとなるドライバ
--ファイルディスクリプタを受け取る
---ユーザプロセスから fd を受け取る方法は任意。
---[[linux-4.4.1/ioctl()]] を使うことになる?
--[[linux-4.4.1/dma_buf_get()]]
---dma_buf カーネルライブラリから共有したいバッファを得る。
---[[linux-4.4.1/dma_buf]] が得られる。
--[[linux-4.4.1/dma_buf_attach()]]
---dma_buf カーネルライブラリにバッファを使用し始めること...
---[[linux-4.4.1/dma_buf_attachment]] が得られる。
---attach() コールバックが呼ばれる。
--[[linux-4.4.1/dma_buf_map_attachment()]]
---バッファにアクセスできるようにマップする。
---[[linux-4.4.1/sg_table]] が得られる。
---map_dma_buf() コールバックが呼ばれる。
--バッファに対して、データの読み書きなどを行う。
--[[linux-4.4.1/dma_buf_unmap_attachment()]]
---バッファのマップを解放して、アクセスできないようにする。
---unmap_dma_buf() コールバックが呼ばれる。
--[[linux-4.4.1/dma_buf_detach()]]
---dma_buf カーネルライブラリにバッファを使用し終わったこ...
---detach() コールバックが呼ばれる。
-予想
--バッファのオーナーとユーザーがファイルディスクリプタを...
release() コールバックが呼ばれると思われる。
**使い方の例 [#ab4da934]
(調査中)
**カーネル API 一覧[#v9878462]
-linux/Documentation/DocBook/device-drivers/ より
--[[linux-4.4.1/dma_buf_export()]]: Creates a new dma_buf...
--[[linux-4.4.1/dma_buf_fd()]]: returns a file descriptor...
--[[linux-4.4.1/dma_buf_get()]]: returns the dma_buf stru...
--[[linux-4.4.1/dma_buf_put()]]: decreases refcount of th...
--[[linux-4.4.1/dma_buf_attach()]]: Add the device to dma...
--[[linux-4.4.1/dma_buf_detach()]]: Remove the given atta...
--[[linux-4.4.1/dma_buf_map_attachment()]]: Returns the s...
--[[linux-4.4.1/dma_buf_unmap_attachment()]]: unmaps and ...
--[[linux-4.4.1/dma_buf_begin_cpu_access()]]: Must be cal...
--[[linux-4.4.1/dma_buf_end_cpu_access()]]: Must be calle...
--[[linux-4.4.1/dma_buf_kmap_atomic()]]: Map a page of th...
--[[linux-4.4.1/dma_buf_kunmap_atomic()]]: Unmap a page o...
--[[linux-4.4.1/dma_buf_kmap()]]: Map a page of the buffe...
--[[linux-4.4.1/dma_buf_kunmap()]]: Unmap a page obtained...
--[[linux-4.4.1/dma_buf_mmap()]]: Setup up a userspace mm...
--[[linux-4.4.1/dma_buf_vmap()]]: Create virtual mapping ...
--[[linux-4.4.1/dma_buf_vunmap()]]: Unmap a vmap obtained...
**参考 [#oea5d6fe]
$ egrep -r '^EXPORT_SYMBOL' drivers/dma-buf/
drivers/dma-buf/seqno-fence.c:EXPORT_SYMBOL(seqno_fence_...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_context_allo...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_signal_locke...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_signal);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_wait_timeout);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_release);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_free);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_enable_sw_si...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_add_callback);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_remove_callb...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_default_wait);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_wait_any_tim...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_init);
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL_GPL(reservat...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL_GPL(reservat...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL_GPL(reservat...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_expo...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_fd);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_get);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_put);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_atta...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_deta...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_map_...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_unma...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_begi...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_end_...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kmap...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kunm...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kmap);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kunm...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_mmap);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_vmap);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_vunm...
**関連モジュール [#q31b30fc]
*コメント [#n7c0ba9b]
終了行:
*参照元 [#l9ed6214]
#backlinks
*説明 [#j29aa4c1]
FIXME: なにをするもの?
-とぴっく
--共有に特化、バッファを確保する機能は提供しない。
--CMA など、別の手段を用いてドライバ(DMA buffer sharing ...
**主要ユーザ API [#v97154ee]
-[[linux-4.4.1/dma_buf_fops(global)]] より、下記に対応し...
--close()
--mmap()
---ユーザプロセスからバッファを読み書きしたいときに使う。...
--seek()
---バッファのサイズを知るために使う。SEEK_END を指定すれ...
--poll()
---同時に DMA を実行して、バッファの内容を破壊しないよう...
-mmap() の動き
mmap()
- dma_buf_mmap_internal()
- dmabuf->ops->mmap()
ION の場合 mmap = ion_mmap, なので、
- ion_mmap()
- buffer->heap->ops->map_user()
Carveout Heap の場合 map_user = ion_heap_map_u...
- ion_heap_map_user()
- remap_pfn_range()
もう一例。
mmap()
- dma_buf_mmap_internal()
- dmabuf->ops->mmap()
V4L2, 物理連続メモリを要求するデバイスの場合 mmap ...
- vb2_dc_mmap()
- dma_mmap_coherent()
- dma_mmap_attrs()
- ops->mmap()
ARM の場合、通常は mmap = arm_dma_mmap, な...
- arm_dma_mmap()
- __arm_dma_mmap()
- remap_pfn_range()
**主要カーネル API [#v9878462]
-dma_buf_ops を使って、DMA バッファの扱い方(特にどうやっ...
--[[linux-4.4.1/dma_buf_ops]]
--なぜかというと、DMA バッファの確保の仕方によってバッフ...
---map_dma_buf
---unmap_dma_buf
---release
---kmap_atomic
---kmap
---mmap
-バッファを共有するための準備をする、dma_buf ライブラリに...
--[[linux-4.4.1/dma_buf_export()]]
--[[linux-4.4.1/dma_buf_export_info]]
-DMA Buffer から fd を得る。
--[[linux-4.4.1/dma_buf_fd()]]
-fd から DMA Buffer を得る。
--[[linux-4.4.1/dma_buf_get()]]
-DMA Buffer の共有を開始する
--[[linux-4.4.1/dma_buf_attach()]]
--[[linux-4.4.1/dma_buf_attachment]]
-DMA Buffer をカーネルのリニアアドレス空間にマッピングす...
--ドライバからバッファにアクセスするときは必須。
--[[linux-4.4.1/dma_buf_map_attachment()]]
--[[linux-4.4.1/dma_buf_unmap_attachment()]]
-DMA Buffer をユーザの仮想空間にマッピングする。
--[[linux-4.4.1/dma_buf_mmap()]]
-DMA Buffer の共有を終了する
--[[linux-4.4.1/dma_buf_detach()]]
**シーケンス [#n3abc860]
-バッファのオーナーとなるドライバ
--バッファ確保
---方法は何でも良い、例えば [[linux-4.4.1/dma_alloc_coher...
--[[linux-4.4.1/dma_buf_export()]]
---バッファの共有の準備をする。
---dma_buf カーネルライブラリにバッファの存在を教える。
---[[linux-4.4.1/dma_buf]] が得られる。
--[[linux-4.4.1/dma_buf_fd()]]
---バッファを共有するためのファイルディスクリプタが得られ...
-バッファのオーナーとなるプロセス
--ファイルディスクリプタを受け取る。
---ドライバからファイルディスクリプタを受け取る方法は任意。
---[[linux-4.4.1/ioctl()]] を使うことになる?
-バッファのユーザとなるプロセス
--ファイルディスクリプタを受け取る。
---バッファのオーナープロセスから受け取る方法は任意。
---UNIX socket の sendmsg() の cmsg で複製できる?
-バッファのユーザとなるドライバ
--ファイルディスクリプタを受け取る
---ユーザプロセスから fd を受け取る方法は任意。
---[[linux-4.4.1/ioctl()]] を使うことになる?
--[[linux-4.4.1/dma_buf_get()]]
---dma_buf カーネルライブラリから共有したいバッファを得る。
---[[linux-4.4.1/dma_buf]] が得られる。
--[[linux-4.4.1/dma_buf_attach()]]
---dma_buf カーネルライブラリにバッファを使用し始めること...
---[[linux-4.4.1/dma_buf_attachment]] が得られる。
---attach() コールバックが呼ばれる。
--[[linux-4.4.1/dma_buf_map_attachment()]]
---バッファにアクセスできるようにマップする。
---[[linux-4.4.1/sg_table]] が得られる。
---map_dma_buf() コールバックが呼ばれる。
--バッファに対して、データの読み書きなどを行う。
--[[linux-4.4.1/dma_buf_unmap_attachment()]]
---バッファのマップを解放して、アクセスできないようにする。
---unmap_dma_buf() コールバックが呼ばれる。
--[[linux-4.4.1/dma_buf_detach()]]
---dma_buf カーネルライブラリにバッファを使用し終わったこ...
---detach() コールバックが呼ばれる。
-予想
--バッファのオーナーとユーザーがファイルディスクリプタを...
release() コールバックが呼ばれると思われる。
**使い方の例 [#ab4da934]
(調査中)
**カーネル API 一覧[#v9878462]
-linux/Documentation/DocBook/device-drivers/ より
--[[linux-4.4.1/dma_buf_export()]]: Creates a new dma_buf...
--[[linux-4.4.1/dma_buf_fd()]]: returns a file descriptor...
--[[linux-4.4.1/dma_buf_get()]]: returns the dma_buf stru...
--[[linux-4.4.1/dma_buf_put()]]: decreases refcount of th...
--[[linux-4.4.1/dma_buf_attach()]]: Add the device to dma...
--[[linux-4.4.1/dma_buf_detach()]]: Remove the given atta...
--[[linux-4.4.1/dma_buf_map_attachment()]]: Returns the s...
--[[linux-4.4.1/dma_buf_unmap_attachment()]]: unmaps and ...
--[[linux-4.4.1/dma_buf_begin_cpu_access()]]: Must be cal...
--[[linux-4.4.1/dma_buf_end_cpu_access()]]: Must be calle...
--[[linux-4.4.1/dma_buf_kmap_atomic()]]: Map a page of th...
--[[linux-4.4.1/dma_buf_kunmap_atomic()]]: Unmap a page o...
--[[linux-4.4.1/dma_buf_kmap()]]: Map a page of the buffe...
--[[linux-4.4.1/dma_buf_kunmap()]]: Unmap a page obtained...
--[[linux-4.4.1/dma_buf_mmap()]]: Setup up a userspace mm...
--[[linux-4.4.1/dma_buf_vmap()]]: Create virtual mapping ...
--[[linux-4.4.1/dma_buf_vunmap()]]: Unmap a vmap obtained...
**参考 [#oea5d6fe]
$ egrep -r '^EXPORT_SYMBOL' drivers/dma-buf/
drivers/dma-buf/seqno-fence.c:EXPORT_SYMBOL(seqno_fence_...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_context_allo...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_signal_locke...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_signal);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_wait_timeout);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_release);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_free);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_enable_sw_si...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_add_callback);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_remove_callb...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_default_wait);
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_wait_any_tim...
drivers/dma-buf/fence.c:EXPORT_SYMBOL(fence_init);
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL(reservation_...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL_GPL(reservat...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL_GPL(reservat...
drivers/dma-buf/reservation.c:EXPORT_SYMBOL_GPL(reservat...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_expo...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_fd);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_get);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_put);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_atta...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_deta...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_map_...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_unma...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_begi...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_end_...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kmap...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kunm...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kmap);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_kunm...
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_mmap);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_vmap);
drivers/dma-buf/dma-buf.c:EXPORT_SYMBOL_GPL(dma_buf_vunm...
**関連モジュール [#q31b30fc]
*コメント [#n7c0ba9b]
ページ名: