处理器 | 架构 |
---|---|
ZYNQ 7000 | 双核ARM-Cortex A9 CPU |
ZYNQ UltraScale+ MPSoC | 四核ARM-Cortex A53 CPU、双核Cortex-R5 RPU、Mali-400 GPU(一个Geometry核,两个像素核)、PL逻辑以及视频编解码器Codec核 |
在之前的文章中,介绍了使用Xilinx的git 库上的通用Linux源码编译了一个支持AMP的Linux,运行的FreeRTOS,本文也可以按照上面自己编译一个Linux,也可以取个巧通过PetaLinux生成Linux。本文计时通过PetaLinux完成Linux系统的生成的。
需要注意的两点:
我们需要Linux支持AMP,就需要在配置petalinux-config -c kernel的时候添加amp的支持。
[*] Enable loadable module support --->
Device Drivers --->
Remoteproc drivers --->
[*] Support for Remote Processor subsystem
<*> ZynqMP_r5 remoteproc support
Rpmsg drivers --->
<*> RPMSG device interface
我们需要在设备树中,预留给RPU的RAM空间这里可以参考这里,因为这里仅仅开启了RPU0, 所以只用设置RPU0的部分。
注意:!!
需要注意的是APU以RPU不能同时访问同一个外设,此工程中RPU0访问的外设有UART0, IIC0,因为此工程使用的是黑金的ZU3EG,PS端仅仅接了uart0接口,所以APU端就通过ssh去访问系统,同时在设备树中禁止UART0、IIC0。
修改project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
如下
/include/ "system-conf.dtsi"
/ {
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
rproc_0_reserved: rproc@3ed00000 {
no-map;
reg = <0x0 0x3ed00000 0x0 0x1000000>;
};
};
power-domains {
pd_r5_0: pd_r5_0 {
#power-domain-cells = <0x0>;
pd-id = <0x7>;
};
pd_tcm_0_a: pd_tcm_0_a {
#power-domain-cells = <0x0>;
pd-id = <0xf>;
};
pd_tcm_0_b: pd_tcm_0_b {
#power-domain-cells = <0x0>;
pd-id = <0x10>;
};
};
amba {
/*您需要将固件内存指定为“mmio-sram”。*/
r5_0_tcm_a: tcm@ffe00000 {
compatible = "mmio-sram";
reg = <0 0xFFE00000 0x0 0x10000>;
pd-handle = <&pd_tcm_0_a>;
};
r5_0_tcm_b: tcm@ffe20000 {
compatible = "mmio-sram";
reg = <0 0xFFE20000 0x0 0x10000>;
pd-handle = <&pd_tcm_0_b>;
};
elf_ddr_0: ddr@3ed00000 {
compatible = "mmio-sram";
reg = <0 0x3ed00000 0x0 0x40000>;
};
test_r50: zynqmp_r5_rproc@0 {
compatible = "xlnx,zynqmp-r5-remoteproc-1.0";
reg = <0x0 0xff9a0100 0 0x100>, <0x0 0xff9a0000 0 0x100>;
reg-names = "rpu_base","rpu_glbl_base";
dma-ranges;
core_conf = "split0";
srams = <&r5_0_tcm_a &r5_0_tcm_b &elf_ddr_0>;
pd-handle = <&pd_r5_0>;
interrupt-parent = <&gic>;
interrupts = <0 29 4>;
} ;
};
};
&i2c1 {
clock-frequency = <400000>;
status = "disabled";
};
&uart0 {
status = "disabled";
};
&i2c0 {
/* clock-frequency = <400000>;*/
status = "disabled";
};
/* SD */
&sdhci1 {
disable-wp;
no-1-8-v;
};
/* USB */
&dwc3_0 {
status = "okay";
dr_mode = "host";
};
通过petalinux-config -build 后,我们将系统通过jtag下载到板子上,当然也可以根据需求使用SD卡启动,这个需要在config中设置root filesystem type 为SD卡,此工程使用默认的INITRAMFS
petalinux-boot --jtag --u-boot --fpga
关于ThreadX的系统移植部分,可以参考这里,与ZYNQ7000的套路一样,但是需要注意的是,需要在库如tx库、nxd库、fx库中都要开启浮点fpv的支持:
在Properities->Settings->C/C++ Build->Miscellaneous中添加 -mfloat-abi=hard -mfpu=vfpv3-d16
别的套路都相同了,这里不再做介绍。
这个工程中就访问了IIC上的温度传感器:参考黑金手册 ZYNQ MPSoC 开发平台 VITIS 应用教程第六章即可。
注意的是:在ld Available Memory Regions中,psu_r5_ddr_0_MEM_0的基地址和大小一定要与设备树中设置的一样:
启动好Linux后,我们在文件系统的\lib 下创建firmware文件夹,然后通过scp 将threadx.elf文件拷贝到\lib\firmware 文件夹。
通过ssh 执行:
echo threadx.elf> /sys/class/remoteproc/remoteproc0/firmware
echo start > /sys/class/remoteproc/remoteproc0/state
剩下的就是在串口中happy的查看温度信息了.
echo stop > /sys/class/remoteproc/remoteproc0/state
文章浏览阅读49次。Node.js WebSocket 是一种协议,用于在单个 TCP 连接上进行全双工通信。它使得服务器和客户端能够发送和接收消息,在浏览器和服务器之间建立双向通信。在 Node.js 中使用 WebSocket,可以使用第三方模块 ws。...
文章浏览阅读1k次。一.【设计目的】1. 熟悉开发工具(eclipse)的基本操作;2. 掌握应用程序的编写过程;3. 对于 Socket 编程建立初步的概念。二.【设计要求】1. 熟悉 Sock API 主要函数的使用;2. 掌握相应开发工具对 Socket API 的封装;3. 设计并实现一对一网络版小游戏,本次课程设计实现的是五子棋。三.【工作原理】实现环境语言:java,jdk 1.8编译器 eclipse使用Socket和Thread进行服务器和客户端的通信和同步。_eclipse设计小游戏五子棋目标
文章浏览阅读2.9w次,点赞112次,收藏210次。本文带大家了解Java实现多线程的四种方法以及实现多线程的重要注意事项和难点!_java多线程有几种实现方法
文章浏览阅读2.6w次。音频方面的知识,相对其他编程还是较为复杂的,特别是要搞清楚框架里具体使用的参数和方法,不然写起代码来非常迷茫.1:播放简短性质的音频,例如按键声音,等可以这样实现.一:引入框架:#import 二:先声明一个声音源IDSystemSoundID _bookSoundID;三:提供需要播放的音频地址进行声音源的注册. NSURL *bookSou_ios开发 如何发出不同频率的音频声波
文章浏览阅读1.3w次,点赞15次,收藏62次。1. 创建创建记录:user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}db.NewRecord(user) // => 主键为空返回`true`db.Create(&user)db.NewRecord(user) // => 创建`user`后返回`false`设置默认值:可以在gorm ..._gorm db.model
文章浏览阅读5.9k次。file_path = 'D:/MATLAB/bin/IMAGES/GreenChannels/_512_pixel/';% 图像文件夹路径img_path_list = dir(strcat(file_path,'*.tif'));%获取该文件夹中所有jpg格式的图像img_num = length(img_path_list);%获取图像总数量if img_num > 0 %有满足条件..._matla数据分块处理
文章浏览阅读376次。管理员登录系统后,可以对首页、个人中心、操作员管理、疫苗信息管理、疫苗预约管理、疫苗入库管理、疫苗出库管理、供应商管理、注射点管理、采购订单管理等功能进行相应的操作管理,如图5-2所示。疫苗预约管理,在疫苗预约管理页面可以对索引、疫苗名称、疫苗种类、批次号、预约时间、预约数量、预约地点、工号、姓名、审核回复、审核状态、审核等内容进行详情和删除等操作,如图5-5所示。疫苗出库管理,在疫苗出库管理页面可以对索引、疫苗名称、疫苗种类、批次号、数量、出库时间、备注等内容进行详情,修改和删除等操作,如图5-7所示。_采购业务实体关系图表
文章浏览阅读73次。java计算机组成原理教学网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署。springboot基于B_S架构的疫情包联信息管理系统的设计与实现。springcloud基于微服务架构的设备管理系统的设计与实现。JSP计算机C语言学习网站的设计与实现sqlserver。ssm基于SSM框架的菲特尼斯健身管理系统的设计与实现。ssm基于Vue.js的网上书城管理系统的设计与实现。ssm基于ssm+vue的高校个性化选课推荐。ssn基于SSM宠物店管理系统的设计与实现。
文章浏览阅读533次。本文详细介绍了uiautomator2框架中的所有方法及其使用方式,我们可以使用uiautomator2轻松完成Android手机自动化测试。使用指令pip install --pre uiautomator2安装uiautomator2,使用指令pip install --pre --upgrade weditor==0.6.4安装WEditor。uiautomator2中的方法可以分为设备类方法、UI类方法、基础类方法。_open_identify
文章浏览阅读398次。Linux 2.6.19.x 内核编译配置选项简介作者:金步国版权声明本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。_hardware error]: power, interrupts, etc. ext. error code: 2, link error
文章浏览阅读5.7k次,点赞6次,收藏42次。平时写 latex 都依赖 在线编辑器, 但这个网站在一些 ddl 时会偶尔崩溃,影响体验,因此本文尝试在 mac 环境中 用 vscode 写 latex。_mac vscode latex
文章浏览阅读121次。前言采用 SQLite 数据库来存储数据。SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些。注意:写入数据库,字符串可以采用 char 方式,而从数据库中取出 char 类型,当 char 类型有表示中文字符时,会出现乱码。这是因为数据库默认使用 ASCII 编码方式。所以要想正确从数据库中取出中文,需要用 NSString 来接收从数据库取出的字符串。s..._ocbase数据库