RK3588 HDMI-RX 驱动、RGA 加速与 OpenCV GStreamer 支持完整指南
一、环境检测与前置依赖
确认内核与 HDMI-RX 节点:
uname -a# 输出:6.1.0-1025-rockchip ...dmesg | grep -i hdmirx# 应能看到 hdmirx-controller 节点:# fdee0000.hdmirx-controller driver probe ok!
如果仅出现:
rockchip-dmc dmc: hdmirx_rate = 2112000000
说明设备树已识别 hdmirx,但没有加载 Overlay (rk3588-hdmirx.dtbo)。
更新系统依赖:
sudo apt updatesudo apt install -y \\ gstreamer1.0-plugins-base gstreamer1.0-plugins-good \\ gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-tools v4l-utils
二、启用 HDMI-RX Overlay
-
获取或编译 Overlay 文件
从 Joshua-Riek Rockchip Ubuntu 仓库 下载rk3588-hdmirx.dtbo
,拷贝到固件路径:
sudo cp rk3588-hdmirx.dtbo \\ /lib/firmware/6.1.0-1025-rockchip/device-tree/rockchip/overlay/
-
编辑 u-boot 配置
sudo vim /etc/default/u-boot
取消注释并加入:
U_BOOT_FDT_OVERLAYS=\"device-tree/rockchip/overlay/rk3588-hdmirx.dtbo\"
-
更新并重启
sudo u-boot-updatesudo reboot
-
验证驱动加载
dmesg | grep -i hdmirxv4l2-ctl --list-devicesls /dev/video*# 应看到 /dev/video0 (hdmirx)
三、安装 RGA 硬件加速支持
-
安装 librga 并生成 pkg-config
git clone https://github.com/airockchip/librga.gitcd librgasudo mkdir -p /usr/local/lib/pkgconfigsudo tee /usr/local/lib/pkgconfig/librga.pc > /dev/null <<\'EOF\'prefix=/usr/localexec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/includeName: librgaDescription: Rockchip Raster Graphic Acceleration libraryVersion: 2.2Libs: -L${libdir} -lrgaCflags: -I${includedir}EOF
-
复制头文件和库文件
sudo cp -r include/* /usr/local/include/sudo cp libs/Linux/gcc-aarch64/* /usr/local/lib/sudo ldconfig
-
配置环境变量
echo \'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH\' >> ~/.bashrcsource ~/.bashrc
pkg-config --modversion librga# 输出 2.2(或实际版本)
四、构建 gstreamer-rgaconvert 插件
git clone https://github.com/higithubhi/gstreamer-rgaconvert.gitcd gstreamer-rgaconvertmeson setup build --wipeninja -C buildsudo ninja -C build install
安装完成后,将插件放到 GStreamer 搜索路径:
sudo cp build/libgstrgaconvert.so /usr/lib/aarch64-linux-gnu/gstreamer-1.0/
测试插件:
gst-inspect-1.0 rgaconvert
五、重建支持 GStreamer 的 OpenCV 5.x
-
准备源码
git clone https://github.com/opencv/opencv.gitcd opencv && git checkout 5.x && cd ..git clone https://github.com/opencv/opencv_contrib.gitcd opencv_contrib && git checkout 5.x && cd ..
-
构建 OpenCV
mkdir build_opencv && cd build_opencvcmake ../opencv \\ -D CMAKE_BUILD_TYPE=Release \\ -D CMAKE_INSTALL_PREFIX=~/opencv-gst-install \\ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \\ -D WITH_GSTREAMER=ON \\ -D WITH_GTK=ON \\ -D WITH_FFMPEG=ON \\ -D WITH_V4L=ON \\ -D BUILD_opencv_highgui=ON \\ -D OPENCV_ENABLE_NONFREE=ON \\ -D BUILD_EXAMPLES=OFF \\ -D PYTHON3_EXECUTABLE=$(which python) \\ -D PYTHON3_INCLUDE_DIR=$(python -c \"from sysconfig import get_paths; print(get_paths()[\'include\'])\") \\ -D PYTHON3_LIBRARY=$(python -c \"import sysconfig, sys; print(sysconfig.get_config_var(\'LIBDIR\') + \'/libpython\' + sys.version[:3] + \'.so\')\") \\ -D PYTHON3_PACKAGES_PATH=$(python -c \"import site; print(site.getsitepackages()[0])\")
如果 CMake 输出:
-- GStreamer: YES-- Found librga: /usr/local/lib/librga.so
表示 RGA 与 GStreamer 支持已启用。
六、测试 HDMI 输入 + RGA 加速
-
直接用 GStreamer 测试
DEVICE=/dev/video0gst-launch-1.0 v4l2src device=$DEVICE io-mode=4 ! \\ rgaconvert ! \\ video/x-raw,width=1280,height=720,format=NV12 ! \\ autovideosink
-
OpenCV + GStreamer
import cv2pipeline = ( \"v4l2src device=/dev/video0 io-mode=4 ! \" \"video/x-raw,format=NV12,width=1920,height=1080 ! \" \"rgaconvert ! \" \"video/x-raw,width=1280,height=720,format=NV12 ! \" \"appsink\")cap = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)while cap.isOpened(): ret, frame = cap.read() if not ret: break cv2.imshow(\"HDMI-IN with RGA\", frame) if cv2.waitKey(1) & 0xFF == 27: # ESC 退出 breakcap.release()cv2.destroyAllWindows()