【RK3568+PG2L50H开发板实验例程】Linux部分/FPGA dma_memcpy_demo 读写案例

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com)

1.案例简介

案例功能描述:ARM端利用 PCIe总线对 FPGA的 DRAM执行读写操作。应用程序通过 ioctl函数触发 DMA数据传输后,将等待驱动程序发出的 input事件作为响应。应用程序接收到该事件时,表示 DMA数据传输已经结束。

2.测试程序执行流程

(1)ARM端

1.将数据写至 dma_memcpy驱动申请的连续内存空间(位于 DDR)。配置 DMA,如源地址、目标地址、传输的数据大小等;

2.写操作:通过 ioctl函数启动 DMA,通过 PCIe总线将数据搬运至 FPGA DRAM;程序接收驱动上报 input事件后,将通过 ioctl函数获取 DMA搬运数据耗时,并计算DMA写速率;

3.读操作:通过 ioctl函数启动 DMA,通过 PCIe总线将 FPGA DRAM中的数据搬运至 dma_memcpy驱动申请的连续内存空间(位于 DDR);程序接收驱动上报 input事件后,将数据从内核空间读取至用户空间,然后校验数据,同时通过 ioctl函数获取DMA搬运数据耗时,并计算 DMA读速率。

(2) FPGA端

1.实现 PCIe Endpoint功能;

2.处理 PCIe RC端发起的 PCIe BAR0空间读写事务;

3.将 PCIe BAR0读写数据缓存至 FPGA DRAM中。

3.操作流程

 打开终端,将本案例 bin目录下( 05-开发资料 \软件开发资料\linux_demo\mes_fpga_dma_memcpy_demo\bin ) 的 可 执 行 程 序mes_dma_memcpy_demo拷贝至开发板文件系统(源码可以在 src路径下查看)。#修改 Linux内核日志的显示级别,内核的日志级别被设置为只显示紧急或更高级别的消息

echo 1 4 1 7 > /proc/sys/kernel/printk

在终端执行如下指令,切换到 mes_dma_memcpy_demo可执行程序所在目录

#切换到 mes_fpga_fspi_demo可执行程序所在目录

cd ‘可执行文件所在目录’

#查看 mes_dma_memcpy_demo是否在该目录下

ls

若可执行文件 mes_dma_memcpy_demo在当前目录下,则修改可执行文件的权限#修改文件权限

chmod 777 mes_dma_memcpy_demo

#查询是否修改成功

ls -ld mes_dma_memcpy_demo

查询确认文件修改权限成功后,执行 ./mes_dma_memcpy_demo -h可以查看该程序的帮助信息

#查看帮助信息

./mes_dma_memcpy_demo -h #-a:设置 PCIe 地址; #-s:设置传输数据大小(单位:Byte); #-c:设置循环读写次数; #-d:设置输入设备;#-v:显示版本信息; #-h:显示帮助内容。 执行结果如下图:

 执行以下命令,查看 PCIe BAR 空间地址。从下图可见,PCIe BAR 空间映射至 0xf0200000 地址,大小为 64KByte,并查看 PCIe 设备连接状态。

lspci -s 0002:21:00.0 -vv

 执行以下命令,使能 PCIe设备。

echo 1 > /sys/class/pci_bus/0002\:21/device/0002\:21\:00.0/enable

应用程序通过 ioctl函数发送命令开启 DMA传输数据后,等待驱动上报 input事件;当应用层接收到 input事件,说明 DMA传输数据完成。执行以下指令以查看 input输入事件接口。如图所示,input事件接口为/dev/input/event0。

evetest

 

 执行以下指令,将随机生成的数据写入 FPGA的 DRAM,随后从 FPGA的 DRAM中读取数据。测试结束后,通过/dev/input/event0接收事件通知,输出测试结果,其中包括平均读写时间、平均传输速率以及读写错误数量等统计信息。执行结果如下图。./dma_memcpy_demo -a 0xf0200000 -s 65536 -c 100 -d /dev/input/event6#这里的 event0根据 evetest查询到的结果更改。

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

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

相关文章

7.3实验部分

一、HDFS基础操作 以root用户登录,创建如下HDFS目录: /dw/yourname/input hadoop fs -mkdir -p /dw/zhanggengchen/input /dw/yourname/output hadoop fs -mkdir -p /dw/zhanggengchen/output 输出结果: [rootmaster hadoop-mapreduce]# ha…

[nett5: AddressedEnvelope]-源码解析

AddressedEnvelope AddressedEnvelope<M, A> 表示一个带有发送者和接收者地址的消息封装&#xff0c;常用于处理如 UDP 数据报这类含地址信息的通信场景。 public interface AddressedEnvelope<M, A extends SocketAddress> {// 实际的消息内容M content();// 消…

基于 Drone CI 实现前端自动化打包并集成 Spug 自动发布流程

前言&#xff1a;代码自动化部署目前使用的是Spug开源运维平台&#xff0c;通过docker直接部署该平台后&#xff0c;在前端自动化打包&#xff08;npm run build&#xff09;会遇见Node的版本问题&#xff0c;因为Spug容器使用的是Centos7&#xff0c;所以Node版本只支持V16&am…

【基础】Golang语言开发环境搭建(Linux主机)

目录 1. 下载并安装Go语言2. 配置环境变量3. 验证安装4. 配置Go模块5. 安装常用开发工具6. 配置IDE&#xff08;可选&#xff09;7. 第一个Go程序 在Linux主机上搭建Golang开发环境&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 下载并安装Go语言 首先从官网下载Go…

MySQL安全加固:使用mysql_secure_installation

在安装MySQL后&#xff0c;为了确保服务器的安全性&#xff0c;建议使用mysql_secure_installation工具对MySQL进行安全加固。这个工具可以帮助我们完成一些关键的安全配置&#xff0c;包括设置强密码、移除匿名用户、限制root用户的远程登录以及清理默认的测试数据库等。以下是…

设计模式之中介者模式 (Mediator Pattern) -聊天室-控制室

中介者模式用于减少多个对象之间的直接通信&#xff0c;而是通过一个中介对象来协调它们之间的交互。下面我用一个聊天室的例子来演示这个模式。 举个栗子&#xff1a;聊天室系统 在这个系统中&#xff0c;用户不直接相互发送消息&#xff0c;而是通过聊天室&#xff08;中介者…

SpringSecurity01

目录 一、权限控制 二、相关框架 1、shiro 2、springsecurity 三、springsecurity使用流程 1、搭建环境实现默认用户名和密码登录 2、使用数据库表中定义好的用户名和密码访问实现等值密码匹配 1&#xff09;sql文件 2)搭建jdbc或者mybatis或者mybatis-plus环境 3&am…

解决git clone报错:fatal unable to access xxx. Could not resolve host github.com

作者&#xff1a;唐叔在学习 专栏&#xff1a;问题百宝箱 文章目录 问题描述问题诊断网络连通性测试 解决方案1. 获取GitHub最新IP地址2. 修改系统hosts文件 验证解决方案常见问题解答总结 问题描述 当使用git clone命令克隆GitHub仓库时&#xff0c;可能会遇到如下错误&#…

魔术方法__call__

__call__ 是一个特殊方法&#xff08;也称为魔术方法&#xff09;&#xff0c;用于使一个类的实例能够像函数一样被调用。当定义了这个方法后&#xff0c;实例对象可以后接括号&#xff08;即 ()&#xff09;来触发调用&#xff0c;这会让实例表现得像函数一样。 ​使实例可调…

PHP中的异常处理与错误日志记录

在PHP编程实践中&#xff0c;异常处理是一项至关重要的技能&#xff0c;它能够帮助开发者识别和响应程序执行过程中发生的非预期事件。与此同时&#xff0c;错误日志记录是确保应用程序可靠性和稳定性的关键组成部分。本文将详细介绍如何在PHP中实现这两个方面的技术。 首先&a…

JS去除空格(数组内字符串)

1.JS中去除空格 去除这个数组中每个对象内部参数&#xff08;也就是属性值&#xff09;的空格&#xff0c;可以通过遍历数组&#xff0c;再遍历每个对象的属性&#xff0c;使用 trim() 方法来去除字符串首尾的空格。以下是具体实现代码&#xff1a; let data [{ designHours:…

【Spring篇01】:Bean的线程安全问题总结

文章目录 1. 核心问题&#xff1a;Spring 框架中的 Bean 是线程安全的吗&#xff1f;2. 最佳实践与解决方案禁止方案&#xff1a;滥用prototype作用域推荐方案&#xff08;按优先级排序&#xff09; 3. 生产环境中的典型案例Case 1&#xff1a;订单服务统计Case 2&#xff1a;用…

本地项目上传git

将您本地的项目代码上传到一个私有的、别人看不见的 GitHub 仓库&#xff0c;是进行云端协作&#xff08;如使用 Google Colab&#xff09;、版本控制和代码备份的最佳实践。这是一个非常重要的技能。 整个过程可以分为三个部分&#xff1a; 准备工作&#xff1a;在您的电脑上…

【.NET Framework 窗体应用程序项目结构介绍】

在使用 Visual Studio (VS) 开发 .NET Framework 窗体应用程序&#xff08;Windows Forms App&#xff09; 时&#xff0c;项目结构通常包含以下核心文件夹和文件。以下是详细介绍&#xff1a; 1. 项目根目录下的主要文件 (1) .csproj 文件 作用&#xff1a;C# 项目文件&…

【SpringAI】4.多模态提问

SpringAI多模态提问 概述 SpringAI支持多模态输入&#xff0c;允许AI模型同时处理文本和图像内容。这对于需要视觉理解的AI应用场景非常有用&#xff0c;如图像描述、视觉问答、图像分析等。 核心概念 1. Media类 SpringAI使用Media类来表示多模态内容&#xff0c;支持图…

自动化提示工程:未来AI优化的关键突破

自动化提示工程:未来AI优化的关键突破 自动化提示工程能够自动化或半自动化地生成或优化提示词,以探索大规模的提示词组合,并通过 自动优化技术提升提示词生成的稳定性。 依据自动化提示工程实现形式在逻辑推理和效能导向 两个维度的取舍上,将其分为基于思维链的自动化提示工…

多模态大语言模型arxiv论文略读(148)

A Comprehensive Survey and Guide to Multimodal Large Language Models in Vision-Language Tasks ➡️ 论文标题&#xff1a;A Comprehensive Survey and Guide to Multimodal Large Language Models in Vision-Language Tasks ➡️ 论文作者&#xff1a;Chia Xin Liang, P…

关于.net core开发的实体所有注解详解

以下是对 .NET Core 开发中实体类&#xff08;用于数据模型&#xff09;和 Web API 控制器/方法&#xff08;用于定义接口&#xff09;常用注解属性&#xff08;Attributes&#xff09;的详细说明与示例&#xff0c;涵盖数据验证、API 行为控制、序列化、Swagger/OpenAPI 文档生…

【安全工具】SQLMap 使用详解:从基础到高级技巧

目录 简介 一、安装与基础配置 1. 安装方法 2. 基本语法 二、基础扫描技术 1. 简单检测 2. 指定参数扫描 3. 批量扫描 三、信息收集 1. 获取数据库信息 2. 获取当前数据库 3. 获取数据库用户 4. 获取数据库版本 四、数据提取技术 1. 列出所有表 2. 提取表数据 …

Redis大Key拆分实战指南:从问题定位到落地优化

引言 最近在项目里遇到一个棘手问题&#xff1a;生产环境的Redis突然变“卡”了&#xff01;查询延迟从几毫秒飙升到几百毫秒&#xff0c;监控面板显示某个节点CPU使用率飙到90%。排查半天才发现&#xff0c;原来是某个用户订单的Hash Key太大了——单Key存了100多万个订单字段…