zynqmp Linux + 裸机 (A53-0 Linux,A53-1 2 3 裸机大数据量实时处理,R5-0 协议处理,R5-1 屏幕显示逻辑等)填坑笔记

fpga 和arm 采用预留内存的方式,采用neon 协处理器只能做到 250M/S 的速度,预留内存采用mmap的方式,当读取内存页的时候采用缺页中断的方式,导致速度拖沓而且预留内存没有进行Linux系统的内存管理(在系统内 memcpy的速度 可以到 5G/S),自己写DMA驱动,虽然可以用Linux 本身的框架,但是结果不确定,
1.首先CPU 涉及Linux的调度损失,可能数据处理的实时性受到影响,即使用cpu的亲和性属性,但是结果还是存在风险
2.DMA 传递到 Linux管理的内存 类似内存拷贝,FPGA的乒乓结构+ DMA,在DDR 会存在叁份拷贝,况且3个通道,会导致内存的极大浪费
3.算法优化,Linux调用库函数,存在层层调用的问题,即使编译器极大优化,我认为跟与在裸机层面的优化 存在差距

现状:
1.实时处理在裸机上运行,算法C 实现,编译器开 -O2 优化,查看汇编代码,效率很高,经测试效果达到预期
2.3个通道分别用3个cpu 处理,读取,处理,结果输出,内存访问完全分开,互不影响
3.一个A53 跑Linux 系统,方便使用第三方库,和其他几个核的交互采用共享内存的方式
4.2个R5 核虽然是实时核,但是主频只有 500M ,且只是 32bit cpu ,经测试算法处理比较拉跨,只能做协议处理,屏幕驱动显示,同步相关的工作

裸机步骤:
1.分别开发裸机程序,并测试通过 (注意各个cpu内存的位置配置)按需求来且不需要太大

2.在裸机端先把除运行Linux系统的CPU的其他核都运行起来,测试是否正常,这可以参考官方AMP 手册,我是参考黑金Vitis 应用教程 双核AMP的使用,重点如下:

Note:前面我们已经建立了一个cpu0 的工程

3.如上建立3个A53 的工程,两个R5的工程,编译通过,且确认已经生成 elf 文件
4.板上验证

注意图中,Application下每个cpu 对应的 elf 是否存在,是否对应

正常情况下,我们配置的cpu 都会运行起来,可以用驱动led 或者串口打印的方式

注意:如果我们配置多个cpu ,且各个cpu的使用了同样的led 或者串口,也就是说一个硬件有多个驱动源,那么生效的是最后加载程序的那个cpu

Linux编译步骤:
1.打开虚拟机配置环境变量,确保可以编译 如:source /opt/pkg/petalinux/settings.sh 个人按自己的开发指导来
2.执行 petalinux-config
在 DTG Seting ---- > Kernel_Bootargs ----> 取消 generate boot args atuomatically
在底下配置填写如下:重点:maxcpus = 1 ,你需要几个核跑Linux就填写几个

console=ttyPS0,115200 maxcpus=1 clk_ignore_unused earlyprintk root=/dev/mmcblk1p2 rw rootwait 

在 Subsystem AUTO Hardware Setting 下配置
1) System Processor ,指定运行Linux 系统的cpu 核心数
2)Memory Setting,配置ddr 参数 ,这里很关键,需要和 裸机那边的配置区别开,冲突了可能启动有问题,我配置到了低2G的空间,高2G 可能存在问题,还没试。下图是我自己的配置,裸机那边ddr 是从 0 地址开始的。

3.取消设备树里和目前地址冲突的预留内存配置
4.编译:执行

petalinux build

5.编译完成,查看生成文件,我一般查看文件生成 的时间确保系统更改导致新文件已生成

6.生成bootimag 把上图红框的文件拷贝出虚拟机,放到裸机程序的工程下,方便打包

注意 :
1.这里bootloader 要用虚拟机下编译出来的 zynqmp_fsbl.elf

最后点击 Create Image 生成 BOOT.bin 替换sd卡里的 BOOT.bin, image.ub 也要替换成虚拟机编译出来最新的

启动:设置板子 sd卡启动,打开调试串口 查看启动,启动过程中如果遇到错误,根据log 定位解决。

附加1:由于我的板子ps 端只有一个串口,裸机和 Linux是不能同时使用的,我是在裸机这里关闭了串口0,在Linux 设置里配置了串口0,linux 启动的log 才可以正常从串口 0 打印

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

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

相关文章

JavaSE 泛型

目录 1 泛型类的定义1.1 为什么需要泛型1.2 泛型的概念1.3 泛型的分类 2 泛型类2.1 泛型类的定义2.2 泛型类的例子2.3 泛型类的实例化2.3.1 实例化语法2.3.2 裸类型(Raw Type) 2.4 泛型类的定义-类型边界2.5 泛型类的使用-通配符(Wildcards)2.5.1 基本概念2.5.2 通配符-上界2.5…

【09】ServiceEntry使用案例

案例背景 为了便于测试,我们用非网格化的名称空间中运行的应用来模拟运行于VM/萝服务上的外部服务,假设: 在网格外部运行nginx服务,有2个实例 Nginx2001:监听地址为172.29.1.201:8091,nginx版本为1.20nginx2002&#x…

c语言编写http服务器(Linux下运行)

参考文章&#xff1a;https://blog.csdn.net/baixingyubxy/article/details/125964986?spm1001.2014.3001.5506 上面是详细讲解&#xff0c;我这篇是总结了他的代码&#xff0c;因为他没给整体代码 所有代码&#xff1a; #include <stdio.h> #include <stdlib.h&g…

DDD领域驱动设计

DDD 领域驱动实践 业务初期由于业务简单 只要简单的crud就可以满足。这个时候系统功能是清晰的。但是随着疯狂的迭代 不断的业务演化。业务逻辑越来越复杂。系统也越来越冗余。模块彼此关联。资深业务开发也很难说清楚这一块会涉及到什么功能。这个时候要基于这个版本去做迭代…

【深度学习目标检测】九、基于yolov5的路标识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

金融数据可视化大屏,开启数字时代的金融新篇章

随着数字化时代的到来&#xff0c;金融行业的数据量正在迅速增长。如何有效处理、分析和呈现这些数据&#xff0c;成为了一个亟待解决的问题。而金融数据可视化大屏的出现&#xff0c;正是为了解决这一问题&#xff0c;让金融行业的数据处理和分析更加直观、高效。 一、金融数据…

网络的发展历史,ip地址

TCP/IP 是获得最广泛支持的通信协议集合 包含了大量internet应用的标准协议 -支持跨网络架构&#xff0c;跨操作系统平台的通信 主机与主机之间通信的三个要素 1.ip地址(ip address) 2.子网掩码(subent mask) 3.ip路由(ip router) ip地址&#xff1a; 作用&#xff1a;用…

实时时钟(RTC)的选择与设计:内置晶体与外置晶体的优缺点对比

实时时钟(RTC)作为一种具备独立计时和事件记录功能的设备&#xff0c;现已广泛应用于许多电子产品中&#xff0c;并对时钟的精度要求越来越高。根据封装尺寸、接口方式、附加功能、时钟精度和待机功耗等因素进行分类&#xff0c;市场上有各种种类的RTC产品可供选择。 而在设计…

webpack知识点总结(基础应用篇)

一、为什么需要webpack 1.为什么使用webpack ①传统的书写方式&#xff0c;加载太多脚本会导致网络瓶颈&#xff0c;如不小心改变JavaScript文件加载顺序&#xff0c;项目会崩溃&#xff0c;还会导致作用域问题、js文件太大无法做到按需加载、可读性和可维护性太低的问题。 ②…

node.js mongoose中间件(middleware)

目录 简介 定义模型 注册中间件 创建doc实例&#xff0c;并进行增删改查 方法名和注册的中间件名相匹配 执行结果 分析 错误处理中间件 手动抛出错误 注意点 简介 在mongoose中&#xff0c;中间件是一种允许在执行数据库操作前&#xff08;pre&#xff09;或后&…

数据结构(Chapter Two -02)—顺序表基本操作实现

在前一部分我们了解线性表和顺序表概念&#xff0c;如果有不清楚可以参考下面的博客&#xff1a; 数据结构(Chapter Two -01)—线性表及顺序表-CSDN博客 首先列出线性表的数据结构&#xff1a; #define MaxSize 50 //定义顺序表最大长度 typedef struct{ElemType data…

Next.js 学习笔记(三)——路由

路由 路由基础知识 每个应用程序的骨架都是路由。本页将向你介绍互联网路由的基本概念以及如何在 Next.js 中处理路由。 术语 首先&#xff0c;你将在整个文档中看到这些术语的使用情况。以下是一个快速参考&#xff1a; 树&#xff08;Tree&#xff09;&#xff1a;用于可…