NXP iMX8平台上使用imx-gpu-sdk开发

news2024/9/22 13:35:13

By Toradex胡珊逢

Apalis iMX8 计算机模块采用了 NXP 的 i.MX 8 QuadMax 处理器。该处理器具有两个 Vivante GC7000/XSVX 单元,能够支持 OpenCL、OpenVX、OpenGL ES 。本文将介绍如何使用 NXP 提供的 imx-gpu-sdk 编译能够在 Apalis iMX8 运行的 OpenCL 和 OpenCV 应用。

Toradex 的计算机模块所安装的 Linux BSP 采用 Yocto Project 编译。为了编译和运行 OpenCL 和 OpenCV 应用,首先需要重新编译 BSP 和 SDK,以添加相关库文件、头文件等。在 Yocto Project 的编译目录中修改build/conf/local.conf 文件,添加如下内容:

------------------------------------

IMAGE_INSTALL_append = " imx-gpu-viv imx-gpu-sdk fmt python3 python3-pip \

opencv"

PACKAGECONFIG_append_mx8qm = " opencl"

TOOLCHAIN_TARGET_TASK_append = " imx-gpu-viv imx-gpu-sdk stb fmt opencv"

------------------------------------

然后运行下面两个命令,分别生成安装镜像和 SDK 工具。

------------------------------------

bitbake tdx-reference-multimedia-image

bitbake tdx-reference-multimedia-image -c populate_sdk

------------------------------------

使用 Toradex Easy Installer 安装生成的镜像。复制生成的 SDK 安装文件 tdx-xwayland-glibc-x86_64-Reference-Multimedia-Image-aarch64-apalis-imx8-toolchain-5.7.0.sh 到 Linux 电脑,如 Ubuntu 20.04。这里安装到 /opt/SDK/ 路径,当然也可以换成其他合适的目录。由于 SDK 中缺少了 stb 库相关的头文件,因此,需要将 Yocto Project 编译路的 build/tmp/sysroots-components/aarch64/stb/usr/include/ 里面所有 .h 头文件复制到 SDK 的安装路径 sysroots/aarch64-tdx-linux/usr/include/stb/ 下面。同时,在 environment-setup-aarch64-tdx-linux 文件里添加 CPATH 变量。

------------------------------------

export ARCH=arm64

export CROSS_COMPILE=aarch64-tdx-linux-

export CPATH=/opt/SDK/sysroots/aarch64-tdx-linux/usr/include/stb

------------------------------------

接下来下载 OpenCL 和 OpenCV 应用代码。

------------------------------------

git clone -b master https://github.com/nxpmicro/gtec-demo-framework.git

------------------------------------

安装编译代码所需的其他工具,python 版本需要 3.6 以及以上。

------------------------------------

apt install build-essential ninja-build cmake

------------------------------------

编译 OpenCL 应用。其中 ROOTFS 的路径需要结合 SDK 的实际安装位置而修改,这里为 /opt/SDK/sysroots/aarch64-tdx-linux。

------------------------------------

source /opt/SDK/environment-setup-aarch64-tdx-linux

cd /opt/SDK/gtec-demo-framework

export FSL_PLATFORM_NAME=Yocto

export ROOTFS=/opt/SDK/sysroots/aarch64-tdx-linux

source prepare.sh

cd DemoApps/OpenCL/FastFourierTransform

FslBuild.py

------------------------------------

编译 OpenCV 应用。由于 Apalis iMX8 的图形框架采用 wayland,因此在编译时添加 --Variants [WindowSystem=wayland] 参数。

------------------------------------

source /opt/SDK/environment-setup-aarch64-tdx-linux

cd /opt/SDK/gtec-demo-framework

export FSL_PLATFORM_NAME=Yocto

export ROOTFS=/opt/SDK/sysroots/aarch64-tdx-linux

source prepare.sh

cd DemoApps/OpenCV/OpenCV101

FslBuild.py --Variants [WindowSystem=wayland]

------------------------------------

编译完成后在 gtec-demo-framework 文件夹的 build 目录生成了对应的项目文件。

------------------------------------

root@3b368d78738f:/opt/SDK/gtec-demo-framework/build/Yocto/Ninja/release/DemoApps# tree -L 3

.

|-- OpenCL

| `-- FastFourierTransform

| |-- CMakeFiles

| |-- Content

| |-- OpenCL.FastFourierTransform

| |-- OpenCL.FastFourierTransformConfigVersion.cmake

| |-- cmake_install.cmake

| `-- content_deps.txt

`-- OpenCV

`-- OpenCV101

|-- CMakeFiles

|-- Content

|-- OpenCV.OpenCV101

|-- OpenCV.OpenCV101ConfigVersion.cmake

|-- cmake_install.cmake

`-- content_deps.txt

------------------------------------

将 gtec-demo-framework/build/Yocto/Ninja/release/DemoApps 下的两个文件夹复制到 Apalis iMX8 上即可运行。

------------------------------------

root@apalis-imx8:~/DemoApps/OpenCV/OpenCV101# ./OpenCV.OpenCV101

Simple Linear Blender

-----------------------

libpng warning: iCCP: known incorrect sRGB profile

------------------------------------

OpenCV 应用在显示器上可以看到如下内容。

OpenCL FastFourierTransform 显示在 GPU 上运行状况。

------------------------------------

root@apalis-imx8-06852111:~/DemoApps/OpenCL/FastFourierTransform# ./OpenCL.FastFourierTransform

Block size: 16

Length: 16

Print result: yes

Initializing device(s)...

Get the Device info and select Device...

# of Devices Available = 1

# of Compute Units = 2

# compute units = 2

Getting device id...

……

Kernel execution time on GPU (kernel 0): 0.000146 seconds

Kernel execution time on GPU (kernel 1): 7.70000e-05 seconds

Kernel execution time on GPU (kernel 2): 7.80000e-05 seconds

Kernel execution time on GPU (kernel 3): 8.40000e-05 seconds

Total Kernel execution time on GPU: 0.000385 seconds

Successful.

------------------------------------

更多关于 OpenCL、OpenCV 等应用开发的内容可以参考 gtec-demo-framework 的网页说明,从而开发用户自己的应用。

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

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

相关文章

Java_Maven:2. maven 构建 SSM 工程

目录 ​​​​​​​ 1 需求 2 准备数据库 3 创建一个 maven 工程 4 知识点准备 4.1 依赖传递 4.2 依赖冲突的解决 4.2.1 依赖调解原则 4.2.2 排除依赖 4.2.3 锁定版本 5 定义 pom.xml 6 Dao 层 6.1 pojo 模型类 6.2 dao 层代码 6.3 配置文件 6.4 单元测试 7 …

软件测试面试准备——(一)Selenium(1)基础问题及自动化测试

滴滴面试:1. 自己负责哪部分功能?农餐对接系统分为了两大子系统,一个是个人订餐系统,二是餐馆、个人与农产品供应商进行农产品交易系统。我主要负责组织测试人员对该系统进行测试。我们测试分为两个阶段:一、功能测试阶…

Http发展历史

1 缘起 有一次,听到有人在议论招聘面试的人员, 谈及应聘人员的知识深度,说:问了一些关于Http的问题,如Http相关结构、网络结构等, 然后又说,问没问相关原理、来源? 我也是有些困惑了…

Spring Boot开发实战——echarts图标填充数据

echarts模块的导入 先看看成品吧! 有的图标的数据用了一些计算框架不是直接查数据库所以有点慢。 ok!😃 上正文,接上节Spring boot项目开发实战——(LayUI实现前后端数据交换与定义方法渲染数据)讲解了一般…

百度版本gactgpt即将来临,gpt人工智能机器横空出世

百度版本gactgpt即将来临,gpt人工智能机器横空出世,“一言”为定!百度版ChatGPT确认!李彦宏OKR曝光,率先应用于收索业务 gactCBT 大获,当下极有可能成为人工智能的 iPhone 时刻。为了在这场人工智能竞赛中…

Redis面试知识

概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能…

解决workman部署到Linux环境无法启动和连接的问题(结合TP6框架)

0、检查Linux是否满足workman的环境要求 curl -Ss www.workerman.net | php看要求的环境是否都是ok。 如果出现: workman Call to undefined function stream_socket_server()解决方案:去PHP的配置文件查找disabled_function,去掉stream_s…

SAP NetWeaver版本和SAP Kernel版本的确定

SAP NetWeaver(SAP NW)描述了用于“业务启用”的所有软件和服务。SAP业务套件(如ERP中央组件(ECC)或供应商关系管理(SRM))包含该特定业务解决方案的软件组件。 以下是SAP NetWeaver…

el-table+selet+pagination回显触发selection-change事件,打印的数组出现数据重复问题

目录 一、应用场景 二、问题描述 三、原因分析* 四、解决办法 一、应用场景 1】vue项目 2】el-conversation组件 3】使用el-table组件 4】使用type"select"属性 5】使用selection-change事件 6】使用toggleRowSelection方法 7】混合使用el-pagination组件 二…

《论文阅读》Towards Emotional Support Dialog Systems

《论文阅读》Towards Emotional Support Dialog Systems 前言简介思路出发点相关知识区别EC、ER和ESCEmotional Support Conversation任务定义ESC框架数据集总结前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到失望? 小白…

页表与线程学习

线程 线程(TCB)是进程(PCB)的基本单位。 linux认为没有进程,没有线程在概念上的区分,只有一个叫做执行流。这句话指明了都是PCB。 Linux的线程是用进程(PCB)模拟的. 这样做的好处 不用在单独设计TCB。不用维护TCB和PCB之间的关系。不用单独编写任何调度…

Day888.MySQL是怎么保证主备一致的 -MySQL实战

MySQL是怎么保证主备一致的 Hi,我是阿昌,今天学习记录的是关于MySQL是怎么保证主备一致的内容。 MySQL 能够成为现下最流行的开源数据库,binlog 功不可没。 在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人…

从0到1一步一步玩转openEuler--13 openEuler用户组管理

文章目录13.1 创建用户组13.1.1 groupadd命令13.1.2 用户组信息文件13.1.3 创建用户组实例13.2 修改用户组13.2.1 修改GID13.2.2 修改用户组名13.3 删除用户组13.4 将用户加入用户组或从用户组中移除13.5 切换用户组在Linux中,每个普通用户都有一个账户,…

集群使用——资源管理和租户创建

概述 OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如 CPU、Memory、Disk_Size 和 IOPS 等)。 创建租户前,必须规定租户使用的资源…

Java 面向对象基础

文章目录一、类和对象1. 类的定义2. 对象的使用二、对象内存图三、成员变量和局部变量四、封装1. private 关键字2. this 关键字五、构造方法六、标准类制作一、类和对象 在此之前,我们先了解两个概念,对象和类。 万物皆对象,客观存在的事物…

C语言基础应用(一)数据类型

一、数据类型 1、数据类型的分类 2、常量 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 2.1 常量举例 // 整型常量 举例 /*718 十进制0213 八进制0x4b 十六进制30u 无符号整数30l 长整型30ul 无符号长整型*/ // 浮点常量…

LoadRunner安装教程

备注:电脑最好安装有IE浏览器或者360极速版浏览器 一、下载安装包 提前下载安装文件,必须下载。 链接: https://pan.baidu.com/s/1blFiMIJcoE8s3uVhAxdzdA?pwdqhpt 提取码: qhpt 包含的文件有: 二、安装loadrunner 注意,以…

虚拟机CPU占用100%问题记录

项目场景 kswapd0占用CPU过高,严重影响服务器及虚拟机的使用。 原因分析 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。 系统物理内存不足时,kswapd0 会频繁的进行换页操作(使用swap分区与内存换页操作交换数据)&…

java手机短信验证,并存入redis中,验证码时效5分钟

目录 1、注册发送短信账号一个账号 2、打开虚拟机,将redis服务端打开 3、创建springboot工程,导入相关依赖 4、写yml配置 5、创建controller层,并创建controller类 6、创建service层,并创建service类 7、创建工具类&#x…

STL——priority_queue

一、priority_queue介绍及使用 1.priority_queue文档介绍 (1)优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。 (2)此上下文类似与堆,在堆中可以…