rk3568 rockit编译测试

前言

环境介绍:

1.编译环境

Ubuntu 20.04.6 LTS

2.SDK版本

rk3568_linux_5.10

3.单板

迅为itop-3568开发板


一、编译rockit组件包

rockit组件包在4.10版本需要手动编译,奈何我的版本怎么都编译不了,后来改用5.10版本才编译通过。
4.10版本报错信息

undefined reference to ... @GLIBCXX_3.35

改用5.10版本编译buildroot,需要将虚拟机内存调整到8GB以上,因为默认编译采用多线程,导致内存不足出现个别包无法编译导致固件无法编译完成。
rockit组件包在5.10版本在编译buildroot系统的时候是自动编译的,并且会安装到编译的系统里面。固件烧录后在单板直接测试即可。此处跳过系统,单领出来编译。
系统编译完成后存放默认路径

/home/zfeng/rk3568_linux_5.10/buildroot/output/rockchip_rk3568/build/rockit/

进入原来SDK组件存放路径

zfeng@ubuntu:~$ cd  /home/zfeng/rk3568_linux_5.10/external/rockit/
zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit$ ls
CMakeLists.txt  lib  mpi  README.md  tgi

rockit采用cmake,我们需要指定交叉编译器路径
编译rockit不能使用SDK默认编译kernel的交叉编译,需要采用编译buildroot的,而编译buildroot的编译器SDK并没有存放,需要编译过buildroot之后才可以用。
buildroot编译器路径为

/home/zfeng/rk3568_linux_5.10/buildroot/output/rockchip_rk3568/host/share/buildroot//bin/aarch64-buildroot-linux-gnu-gcc

在rockit里面新建toolchainfile.cmake,添加下面内容,指定cmake交叉编译器

# Example toolchain.cmake content
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

# 指定交叉编译器路径
string(REPLACE "/share/buildroot" "" RELOCATED_HOST_DIR /home/zfeng/rk3568_linux_5.10/buildroot/output/rockchip_rk3568/host/share/buildroot/)

set(CMAKE_C_COMPILER "${RELOCATED_HOST_DIR}/bin/aarch64-buildroot-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "${RELOCATED_HOST_DIR}/bin/aarch64-buildroot-linux-gnu-g++")

# 设置目标系统根目录
set(CMAKE_FIND_ROOT_PATH /home/zfeng/rk3568_linux_5.10/buildroot/output/rockchip_rk3568/target/)

# 配置 CMake 查找程序和库文件的方式
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

新建build文件夹

zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit$ mkdir build
zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit$ ls
build  CMakeLists.txt  lib  mpi  README.md  tgi  toolchainfile.cmake

进入build文件夹,执行cmake … -DCMAKE_TOOLCHAIN_FILE=…/toolchainfile.cmake

zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit$ cd build/
zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit/build$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchainfile.cmake

等命令执行完再执行make即可

zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit$ cd build/
zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit/build$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchainfile.cmake^C
zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit/build$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  compile_commands.json  Makefile  mpi  tgi
zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit/build$ make
[ 30%] Built target rt_test_comm
[ 34%] Built target rk_mpi_ao_test
[ 38%] Built target rk_mpi_adec_test
[ 41%] Built target rk_mpi_vpss_test
[ 45%] Built target rk_mpi_vgs_test
[ 49%] Built target rk_mpi_mb_test
[ 52%] Built target rk_mpi_sys_test
[ 56%] Built target rk_mpi_vdec_test
[ 60%] Built target rk_mpi_all_test
[ 63%] Built target rk_mpi_venc_test
[ 67%] Built target rk_mpi_tde_test
[ 70%] Built target rk_mpi_ai_test
[ 74%] Built target rk_mpi_rgn_test
[ 78%] Built target rk_mpi_vo_test
[ 81%] Built target rk_mpi_aenc_test
[ 85%] Built target rk_mpi_vi_test
[ 89%] Built target rk_mpi_mmz_test
[ 92%] Built target rk_mpi_gdc_test
[ 96%] Built target rk_mpi_avio_test
[100%] Built target rk_mpi_amix_test
zfeng@ubuntu:~/rk3568_linux_5.10/external/rockit/build$

最后将编译完成的可执行文件放到开发板即可,可执行文件路径为

/home/zfeng/rk3568_linux_5.10/external/rockit/build/mpi/example/mod/

二、测试

以rk_mpi_vi_test举例
接上摄像头模组与HDMI显示器,开机
因为系统默认已经安装了rockit组件,直接命令测试即可

rk_mpi_vi_test -w 1920 -h 1080 -t 4 -n /dev/video0 -m 4 -l 1000

命令参数相关解析可查阅代码,这里提醒一下-l参数,这是程序运行计数,默认是100,时间很短,基本上显示画面一闪而过,一度以为是程序哪里出问题了,改用-l 1000,画面显示时间加长。

root@topeet:/# rk_mpi_vi_test -w 1920 -h 1080 -t 4 -n /dev/video0 -m 4 -l 1000
vi               08:59:14-994 {main              :1387} test running enter!
vi               08:59:14-995 {main              :1493} test running enter ctx->aEntityName=/dev/video0!
cmd parse result:
output file open      : 0
yuv output file name  : /
enc0 output file path : //
enc1 output file path : //
loop count            : 1000
enMode                : 4
dev                   : 0
pipe                  : 0
channel               : 1
width                 : 1920
height                : 1080
enCompressMode        : 0
enMemoryType          : 4
aEntityName           : /dev/video0
depth                 : 0
enPixelFormat         : 0
bFreeze               : 0
src_frame rate        : -1
dst frame rate        : -1
out buf count         : 3
bUserPicEnabled       : 0
bEnRgn                : 0
rgn count             : 1
rgn type              : 5
bGetConnecInfo        : 0
bGetEdid              : 0
bSetEdid              : 0
rk-debug init version=3.78,args[16,16,0], threadId=547676397952
arm_release_ver: g13p0-01eac0, rk_so_ver: 3
rk-debug setupGraphicsRenderRGB [6,1,0,0]
rk-debug setupGraphicsRenderRGB [9,1,0,-1]
rk-debug init version=3.78,args[16,16,0], threadId=547532763520
rk-debug setupGraphicsRenderRGB [6,1,0,0]
rk-debug setupGraphicsRenderRGB [9,1,0,-1]
RTVersion        08:59:15-709 {dump              :064} ---------------------------------------------------------
RTVersion        08:59:15-714 {dump              :065} rockit version: git-855c43b3b Fri May 5 15:05:16 2023 +0800
RTVersion        08:59:15-724 {dump              :066} rockit building: built-Chu 2023-05-19 14:11:19
RTVersion        08:59:15-733 {dump              :067} ---------------------------------------------------------
Using mplane plugin for capture
Using mplane plugin for capture
Using mplane plugin for capture
[ 3341.198103] rkisp_hw fdff0000.rkisp: set isp clk = 297000000Hz
mpi_vo           08:59:15-763 {RK_MPI_VO_DisableL:1114} layer 0 had already been diabled
mpi_vo           08:59:15-769 {RK_MPI_VO_DisableL:1114} layer 4 had already been diabled
mpi_vo           08:59:15-777 {RK_MPI_VO_DisableL:1114} layer 5 had already been diabled
mpi_vo           08:59:15-785 {RK_MPI_VO_DisableL:1114} layer 6 had already been diabled
mpi_vo           08:59:15-793 {RK_MPI_VO_DisableL:1114} layer 7 had already been diabled
drm_get_vo_type connector 18 1 out of vo intf type range
[ 3341.200172] rockchip-csi2-dphy0: dphy0, data_rate_mbps 840
[ 3341.200215] rockchip-csi2-dphy csi2-dphy0: csi2_dphy_s_stream stream on:1, dphy0
drm_output_create crtc id 68
[ 3341.325977] rockchip-vop2 fe040000.vop: [drm:vop2_crtc_atomic_enable] Update mode to 1280x720p60, type: 11(if:800) for vp0 dclk: 74250000
rk-debug init version=3.78,args[16,16,2], threadId=547264328064
vi               08:59:15-909 {test_vi_bind_vo_lo:755} loopCount:1
vi               08:59:15-943 {test_vi_bind_vo_lo:755} loopCount:2
rk-debug setupGraphicsRenderRGB [6,1,0,0]
rk-debug setupGraphicsRenderRGB [9,1,0,-1]

三、修改输出分辨率

我测试用的小屏显示器分辨率是1280x720的,例程视频输出默认是1920x1080,导致无法正常显示

drm_get_vo_type connector 18 1 out of vo intf type range
[ 4111.828169] rockchip-csi2-dphy0: dphy0, data_rate_mbps 840
[ 4111.828210] rockchip-csi2-dphy csi2-dphy0: csi2_dphy_s_stream stream on:1, dphy0
[ 4111.910321] rockchip-vop2 fe040000.vop: [drm:vop2_crtc_atomic_disable] Crtc atomic disable vp0
drm_output_create crtc id 68
[ 4111.971000] rockchip-vop2 fe040000.vop: [drm:vop2_crtc_atomic_enable] Update mode to 1280x720p60, type: 11(if:800) for vp0 dclk: 74250000
rk-debug init version=3.78,args[16,16,2], threadId=547578614144
rk-debug setupGraphicsRenderRGB [6,1,0,0]
rk-debug setupGraphicsRenderRGB [9,1,0,-1]
drm_render       09:12:06-845 {vo_render_set_plan:247} layer cord [0, 0, 1920, 1080] out of output range [1280 x 720]
drm_render       09:12:06-850 {drm_render        :780} event 1 add prop failed
drm_render       09:12:06-857 {drm_render        :882} collect infomation failed a0098003
drm_render       09:12:06-879 {vo_render_set_plan:247} layer cord [0, 0, 1920, 1080] out of output range [1280 x 720]
drm_render       09:12:06-883 {drm_render        :780} event 1 add prop failed
drm_render       09:12:06-890 {drm_render        :882} collect infomation failed a0098003
drm_render       09:12:06-911 {vo_render_set_plan:247} layer cord [0, 0, 1920, 1080] out of output range [1280 x 720]
drm_render       09:12:06-916 {drm_render        :780} event 1 add prop failed
drm_render       09:12:06-923 {drm_render        :882} collect infomation failed a0098003

修改rk_mpi_vi_test.cpp下面内容,重新编译即可

    stLayerAttr.enPixFormat = RK_FMT_RGB888;
    stLayerAttr.stDispRect.s32X = 0;
    stLayerAttr.stDispRect.s32Y = 0;
    stLayerAttr.u32DispFrmRt = 60;
    //原先分辨率
    // stLayerAttr.stDispRect.u32Width = 1920;
    // stLayerAttr.stDispRect.u32Height = 1080;
    // stLayerAttr.stImageSize.u32Width = 1920;
    // stLayerAttr.stImageSize.u32Height = 1080;

    // 修改后的设置,确保在输出范围内
    stLayerAttr.stDispRect.u32Width = 1280;
    stLayerAttr.stDispRect.u32Height = 720;
    stLayerAttr.stImageSize.u32Width = 1280;
    stLayerAttr.stImageSize.u32Height = 720;
    
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值