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.mzph.cn/news/237301.shtml

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

相关文章

使用代理服务器和Beautiful Soup爬取亚马逊

概述 Beautiful Soup 是一个用于解析 HTML 和 XML 文档的 Python 库,它能够从网页中提取数据,并提供了一些简单的方法来浏览文档树、搜索特定元素以及修改文档的内容。在本文中,我们将介绍如何使用代理服务器和Beautiful Soup库来爬取亚马逊…

融资项目——vue之双向数据绑定

上一篇文章中使用的v-bind是单向绑定方法,即数据改变,网页相应的视图发生改变,但是网页视图发生改变其相关联的数据不会发生改变。但是双向数据绑定不同之处在于网页视图发生改变其相关联的数据也会发生改变。Vue可以使用v-model进行双向数据…

【SpringBoot快速入门】(1)SpringBoot的开发步骤、工程构建方法以及工程的快速启动详细讲解

目录 SpringBoot简介1 SpringBoot快速入门1.1 开发步骤1.1.1 创建新模块1.1.2 创建 Controller1.1.3 启动服务器1.1.4 进行测试 2 对比3 官网构建工程3.1 进入SpringBoot官网3.2 选择依赖3.3 生成工程 4 SpringBoot工程快速启动4.1 问题导入4.2 打包4.3 启动 之前我们已经学习的…

C++20形式的utf-8字符串转宽字符串,不依赖编译器编码形式

默认的char[]编码都是要看编译器编译选项的,你选了ANSI那它就是ANSI,你选了UTF8那它就是UTF8. 【注意:经典DevC只支持ANSI编码(痛苦);上图是小熊猫DevC,则有这个选项】 这一点对我的代码造成了…

DevOps系列文章 : 使用dpkg命令打deb包

创建一个打包的目录,类似rpmbuild,这里创建了目录deb_build mkdir deb_build目标 我有一个hello的二进制文件hello和源码hello.c, 准备安装到/opt/helloworld目录中 步骤 在deb_build目录创建一个文件夹用于存放我的安装文件 mkdir helloworld在he…

js中实现vue2-org-tree添加自定义拖拽功能

一. 主要思路 1.1通过绑定自定义的指令,获取需要拖动的父子元素, 1.2.添加鼠标按下事件onmousedown,计算出鼠标的相对位置odiv.offsetLeft与odiv.offsetTop, 1.3.鼠标移动事件onmousemove当鼠标移动时触发,移动的时…

前端面试题(计算机网络):options请求方法及使用场景

OPTIONS请求方法及使用场景 回答思路:什么是options请求-->options请求方法-->options使用场景什么是options请求?(浅入)扩展:常见的HTTP请求有什么?扩展:常见的HTTP请求的作用&#xff1…

ADS学习笔记(二)——更新中

八、中途容性负载的时延累加 1.原理简述 中途容性负载产生的第一位影响就是下冲噪声,第二位影响是远端信号的接收时间被延迟。电容器与传输线的组合就像一个RC滤波器,所以传输信号10%~90%上升边将增加,信…

Java-Secruity-2

可以先看这篇文章 Secruity-1👈 1、授权 1.1 权限管理 在日常使用的系统中都会涉及到权限相关的操作,管理员有管理员的操作,用户有用户的操作,不同的用户可以使用不同的功能,这需要使用到权限管理。 所以在写接口…

iOS中宿主APP与录屏扩展进程数据传递方式

背景 在iOS生态系统中,应用程序的功能不再局限于单一的宿主应用,而是可以通过扩展进程实现更丰富的用户体验和功能。其中一种引人注目的扩展是录屏功能,它使用户能够捕捉设备屏幕上的活动,无论是游戏过程、教育演示还是其他应用场…

μC/OS-III 里面的环形表

文章目录 1、时钟节拍任务2、定时器列表 μC/OS-III 里面两个地方用到了环形表,时钟节拍任务,定时器列表,通过排序后,效率是非常高的。 以下内容整理自 嵌入式实时操作系统uC/OS-Ⅲ 1、时钟节拍任务 2023/12/21 18:04:16 (1) 该…

【数论】约数

试除法求约数 时间复杂度 O(sqrt(n))。 核心思路是求到较小的约数时,将其对应的较大约数也可以直接求出来, 例如:a/bc,b是a的余数,c也是a的余数 ps:注意bc的情况,要注意去重 void solve() …

JavaGUI(但期末速成版)之事件监听和处理

点击返回标题->JavaGUI期末速成版-CSDN博客 前言 依旧先声明,本篇记录的JavaGUI编程都是十分精简的,内容只取常用的、套路的、应付期末考试的。 我先放两张ppt的原内容。。。 看完(我觉得你可能都没看完),摊牌了&a…

赴日IT培训课程 程序员新思路!

先说好,跟国内相比,日本IT并不发达。日本IT是依托着日本传统强势的制造业和政府机关发展的,所以开发的大多数软件也是面向这些的,由于日本人的严谨态度,各种文档的编写层出不穷,不像国内程序员每天没日没夜…

android 新版studio gradle 里面没有offline 勾选项

studio 右边 gradle 上面有个图标可以点击切换

【深度学习】注意力机制(七)Agent Attention

本文介绍Agent Attention注意力机制,Transformer中的Attention模块可以提取全局语义信息,但是计算量太大,Agent Attention是一种计算非常有效的Attention模块。 论文:Agent Attention: On the Integration of Softmax and Linear…

前端手动部署与自动化部署

连接服务器 先购买服务器 安装vscode插件 连接服务器 连接成功 手动部署 安装nginx 启动nginx systemctl start nginx systemctl status nginx systemctl enable nginx启动 检查状态 开机就启动nginx 开始手动部署 配置nginx 成功

【iuap学习】用友BIP|iuap平台相关资料

用友BIP|iuap平台:升级企业数智化底座 https://www.yonyou.com/iuap 上海第二曲线数字科技有限公司带您来了解下Paas是什么 https://baijiahao.baidu.com/s?id1775190753207512982&wfrspider&forpc 详细了解用友 iuap 的技术演进和规划 https://zhuan…

走过的2023:在挑战中领悟,在仿徨中成长

转眼间就到了2023年的最后一个月,回顾这短暂而又有意义的一年,可以用12个字总结:在挑战中领悟,在仿徨中成长。这篇文章我会从技术成长、职场生活、读书感悟和个人生活等几个方面,总结一下过去的这一年,梳理…

【LeetCode】225. 用队列实现栈(Queue接口 Deque类)

今日学习的文章链接和视频链接 leetcode题目地址:225. 用队列实现栈 代码随想录题解地址:代码随想录 题目简介 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、p…