前言
环境介绍:
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 :