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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/37633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存储请求地址但是使用时请求的是端口

baseURL默认全局加载一次,后续直接读取缓存 解决方案:

类和对象(封装、继承、多态、友元)

c面相对象的三大特性为:封装、继承、多态 c 认为万事万物都皆为对象,对象上有其属性和行为 一、类和对象(封装) (一)封装的意义 封装是c面相对象的三大特性之一 封装的意义: 将属性和行为…

实现List接口的ArrayList和LinkedList

package study;import java.util.*;public class day01_list {public static void main(String[] args) {// <Integer> 这个尖括号表示的是 Java 的泛型&#xff08;Generics&#xff09;// 泛型是 Java 5 引入的一项特性&#xff0c;它允许你在 类、接口和方法 中使用类…

网页如何快速被收录?

其实就是要要吸引搜索引擎爬虫更快地抓取你的网页&#xff0c;想让爬虫爬取网页&#xff0c;首要做的自然是创建并提交站点地图。站点地图是搜索引擎了解你网站结构的重要工具。它可以帮助爬虫更快地发现和抓取你网站上的所有重要页面。通过Google Search Console提交站点地图&…

网络编程常识

网络编程常识 网络编程常识一、 OSI七层模型对应 TCP/IP四层模型二、TCP协议 最后 网络编程常识 一、 OSI七层模型对应 TCP/IP四层模型 OSI七层模型TCP/IP四层模型应用层表示层会话层应用层传输层传输层网络层网络层数据链路层物理层网络接口层 物理层&#xff1a;主要定义物…

深度学习在目标检测中的革命性应用与进展

目标检测是计算机视觉领域的核心任务之一&#xff0c;它旨在从图像或视频中识别和定位感兴趣的目标。深度学习的出现极大地推动了目标检测技术的发展&#xff0c;提高了检测的准确性和效率。本文将详细探讨深度学习在目标检测中的应用&#xff0c;包括关键技术、算法进展、实际…

python编程题3

1. 将一个文件中的所有英文字母转换成大写&#xff0c;复制到另一文件中。 fiopen("ex01.py",r) foopen("f2.txt",w) for line in fi:lineline.upper()fo.write(line) fi.close() fo.close() 2. 将一个文件中的指定单词删除后&#xff0c;复制到另一个文…

mysql lpad函数和rpad函数的用法

1、lpad函数 -从左至右填充 lpad( string, padded_length, [ pad_string ] ) string 准备被填充的字符串&#xff1b; padded_length 填充之后的字符串长度&#xff0c;也就是该函数返回的字符串长度&#xff0c;如果这个数量比原字符串的长度要短&#xff0c;lpad函数将会把字…

Perl与CGI脚本:入门指南到Web页面生成

Perl是一种功能强大的编程语言&#xff0c;广泛用于文本处理和系统管理任务。它也是早期Web开发中用于编写CGI脚本的流行选择之一。CGI&#xff08;Common Gateway Interface&#xff09;是一个标准&#xff0c;定义了Web服务器与执行在服务器上的程序之间的交互方式。本文将详…

MobPush REST API的推送 API之批量推送

调用验证 详情参见 REST API 概述的 鉴权方式 说明。 频率控制 详情参见推送限制策略的 接口限制 说明。 调用地址 POST http://api.push.mob.com/v3/push/createMulti 推送对象 以 JSON 格式表达&#xff0c;表示一条推送相关的所有信息 字段类型必须说明pushWorkobje…

用JSZip,FileSaver 有现成cdn的http图片或者文件地址,弄成压缩包导出,解决如果文件名字都是一样的只导出一个图片或文件的方法

第一步先处理重名的数据 &#xff0c; 解决方法 &#xff1a;将相同名字的图片或文件后面加后缀数字作为区分 let arr [{name:图片一,url:http://cdn}, {name:图片一,url:http://cdn}, {name:图片二,url:http://cdn}]; // 创建一个对象来跟踪已经遇到的名称和它们的计数 le…

6. 较全的Open3D点云数据处理(python)

注意&#xff1a;以下内容来自博客爆肝5万字❤️Open3D 点云数据处理基础&#xff08;Python版&#xff09;_python 点云 焊缝-CSDN博客&#xff0c;这篇博客写的全且详细&#xff0c;在这里是为了记笔记方便查看&#xff0c;并非抄袭。 1.点云的读写 代码如下&#xff1a; …

ARM功耗管理软件之软件栈及示例

安全之安全(security)博客目录导读 思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS?

php对接快手券码,扫码核销

快手本地生活-开放平台&#xff1a;https://open.kwailocallife.com/docs/dev 快手本地生活-商家中心&#xff1a;https://lbs.kuaishou.com/ll/merchant/login 实现功能&#xff1a;对接快手券码&#xff0c;实现在快手上购买券码&#xff0c;然后在自己开发的app上扫码核销&…

ubuntu22.04速装中文输入法

附送ubuntu安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb

磁盘扩容,新增磁盘

磁盘扩容 1.点击设置-硬盘-添加-按推荐添加磁盘 2.查看磁盘使用情况&#xff0c;未扩容之前&#xff0c;查看分区使用情况 [rootnode1 ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 1.4G 0 1.4G …

干系人参与度矩阵

干系人参与度矩阵 干系人的定义干系人参与水平分类应用与策略总结 干系人参与度矩阵是用于评估项目干系人当前参与水平与期望参与水平之间差异的工具。以下是对干系人参与度矩阵的详细解释&#xff1a; 干系人的定义 在项目管理中&#xff0c;干系人指的是那些积极参与项目&am…

python中pip换源

目录 1. 背景2. Python 的 pip 换源2.1 临时换源&#xff08;命令行中使用参数&#xff09;2.2 永久换源&#xff08;修改配置文件&#xff09;2.2.1 Windows系统2.2.2 Linux/macOS系统 2.3 使用 pip-config 命令换源&#xff08;Linux/macOS 特定&#xff09; 3. 常用的 PyPI …

探索WebKit的革新之旅:HTML5新特性的卓越处理

标题&#xff1a;探索WebKit的革新之旅&#xff1a;HTML5新特性的卓越处理 摘要 WebKit作为许多流行浏览器的渲染引擎&#xff0c;包括Safari、Chrome和Epiphany&#xff0c;它在处理HTML5新特性方面扮演了重要角色。HTML5引入了一系列新特性&#xff0c;旨在改善网络应用的性…

Java IO: 使用 `FileInputStream` 和 `FileOutputStream` 进行文件操作

在 Java 中&#xff0c;文件 I/O 操作是常见的任务。FileInputStream 和 FileOutputStream 是用于读取和写入文件的基础类&#xff0c;适用于处理二进制数据。本文将介绍如何使用 FileInputStream 和 FileOutputStream&#xff0c;并提供具体的示例代码。 FileInputStream 类概…