カーネル 6.6 に切り替えた後、GStreamer を実行できません。
dmaに問題があると思います。
imx8mp:~$ GST_DEBUG=*dma*:5 gst-launch-1.0 videotestsrc ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
0:00:00.072033375 889 0xffff88000b70 WARN dmabufheapsmemory gstdmabufheaps.c:98:gst_dmabufheaps_allocator_mem_init: Could not open dmabufheaps driver
0:00:00.072123500 889 0xffff88000b70 WARN dmabufheapsmemory gstdmabufheaps.c:119:gst_dmabufheaps_allocator_obtain: No allocator named dmabufheapsmem found
(gst-launch-1.0:889): GStreamer-CRITICAL **: 06:27:14.679: gst_buffer_pool_config_set_allocator: assertion 'allocator != NULL || params != NULL' failed
0:00:00.077851750 889 0xffff88000b70 WARN dmabufheapsmemory gstdmabufheaps.c:119:gst_dmabufheaps_allocator_obtain: No allocator named dmabufheapsmem found
(gst-launch-1.0:889): GStreamer-CRITICAL **: 06:27:14.684: gst_buffer_pool_config_set_allocator: assertion 'allocator != NULL || params != NULL' failed
(gst-launch-1.0:889): GStreamer-CRITICAL **: 06:27:14.685: gst_object_unref: assertion 'object != NULL' failed
0:00:00.078302375 889 0xffff88000b70 DEBUG wl_dmabuf gstwllinuxdmabuf.c:141:gst_wl_linux_dmabuf_construct_wl_buffer: Creating wl_buffer from DMABuf of size 307200 (320 x 240), DRM fourcc AR24
(gst-launch-1.0:889): GStreamer-Allocators-CRITICAL **: 06:27:14.685: gst_dmabuf_memory_get_fd: assertion 'gst_is_dmabuf_memory (mem)' failed
error marshalling arguments for add: dup failed: Bad file descriptor
Error marshalling request: Bad file descriptor
0:00:01.078829000 889 0xffff88000b70 ERROR wl_dmabuf gstwllinuxdmabuf.c:217:gst_wl_linux_dmabuf_construct_wl_buffer: zwp_linux_buffer_params_v1 time out
0:00:01.078882000 889 0xffff88000b70 ERROR wl_dmabuf gstwllinuxdmabuf.c:225:gst_wl_linux_dmabuf_construct_wl_buffer: can't create linux-dmabuf buffer
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
Redistribute latency...
New clock: GstSystemClock
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:02.173458875
Setting pipeline to NULL ... 私はwaylandディスプレイサーバー、weston(v 12.0.4)を使用していますコンポジターおよびgStreamer v1.24.0として
VPU、GPU、DMA、...の間でバージョンが一致していませんか?どうすれば確認できますか?出力 abov には、「dmabufheaps ドライバーを開けませんでした」という警告が表示されます。どのドライバーを意味していますか?このドライバーは誰が提供しますか?
実際、私はグラフィックやマルチメディアのものにmeta-imxレイヤーを使用しています。もしかしたら、それは権利の問題かもしれません。
私はこの問題を調査するアイデアが恋しいです。ですから、どんな提案でもいただけるとありがたいです。
名前変更の理由がわかりました。カーネルコンフィグCONFIG_CMA_SIZE_MBYTESが
CONFIG_CMA_SIZE_MBYTES=320resmem: reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
ocram: ocram@900000 {
no-map;
reg = <0 0x900000 0 0x70000>;
};
/*
* Memory reserved for optee usage. Please do not use.
* This will be automaticky added to dtb if OP-TEE is installed.
* optee@56000000 {
* reg = <0 0x56000000 0 0x2000000>;
* no-map;
* };
*/
/* global autoconfigured region for contiguous allocations */
linux,cma {
compatible = "shared-dma-pool";
reusable;
size = <0 0x3C000000>;
alloc-ranges = <0 0x40000000 0 0xC0000000>;
linux,cma-default;
};
...0x3C000000は960MiBです。つまり、カーネル構成からは320MiBを超えていました。サイズを0x14000000に変更した後、/dev/dma_heapのデバイス名は、linux,cmaおよびlinux,cma-uncachedで期待どおりになりました。
私はいくつかの調査を行い、名前が変更された2つのデバイスがあることがわかりました。
/dev/dma_heap/linux,cma は /dev/dma_heap/reserved と呼ばれるようになりました
/dev/dma_heap/linux,cma-uncached は /dev/dma_heap/reserved-uncached という名前になりました
私は古い名前でこの新しいデバイスへの2つのシンボリックリンクを作りました、そして今ではgstreamerはうまく機能します。
デバイスの名前が変更されたのはなぜですか?そして、どうすればこれを変更できますか?