图像采集处理之DDR内存分配
来源:互联网 发布:找客户的app软件 编辑:程序博客网 时间:2024/06/10 11:24
由于这是设计之后的一些资料整理和总结,有时候没有兼顾设计流程,知识点总结的顺序可能没有按照最初的设计顺序,这只是为了方便自己以后翻阅,还请不喜勿喷!
本设计中是用HLS加速的方法来对获取的视频进行算法处理,所以这过程中就必然会设计到PS与PL的数据交互,Xilinx Zynq中提供了专用于视频/图像等流数据传输的IP模块----VDMA,这种专用于视频传输的DMA和内存之间进行数据交互,大大降低了双Cortex-A9的数据处理压力。
Z-Turn Board上的DDRIII上有1GB大小的内存空间,由于本设计中会在ARM核上跑Linux OS,所以首先对DDR进行分块,一部分用于Linux OS的运行,一部分用于和VDMA之间进行数据交互,我是这样分配的---前512MB用于运行Linux OS,后256MB用于VDMA和DDRIII之间进行数据交互,还有Reserved 256MB for xylonfb driver。用于Linux OS文件系统使用不是ramdisk,而是SD卡 EXT4格式的文件系统。
接下来,首先修改u-boot中的DDRIII分配:进入u-boot/......./include/configs,打开zynq_zturn.h gedit zynq_zturn.h
在上图中#define PHYS_SDRAM_1_SIZE可以看出总的DDRIII内存大小是1GB,现在将用于运行Linux OS的DDRIII物理空间大小定义成512MB-------->
#define PHYS_SDRAM_1_SIZE (512 * 1024 * 1024)
修改设备树里面关于DDRIII的配置
进入内核中找到dts ....//Kernel/linux-xlnx/arch/arm/boot/dts# gedit zynq-zturn.dts
将上图中memory修改成如下配置:
memory {
device_type = "memory";
reg = <0x0 0x20000000>;
};
修改启动参数:
bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk mem=512M rootfstype=ext4 rootwait devtmpfs.mount=0";
用SD卡启动系统后,接下来可以用top命令监视内存、cpu的情况。
由于在Linux OS中操作内存时用的不是DDR的实际物理地址,而是映射后的用户空间的地址,这个地址可能超过DDR物理地址空间的范围。VDMA和DDR进行数据交互的时候使用的又是实际的物理地址,所以这其间不能简单的使用内存分配函数来进行处理,而是涉及到物理地址和映射地址(虚拟地址)之间的转换的事情,这个在后续章节阐述。
- 图像采集处理之DDR内存分配
- 图像采集处理之Vivado设计
- 关于图像采集卡采集到图像到内存后怎样用Opencv进行图像处理
- K700之图像内存处理
- Eclipse处理图像,内存分配不够的问题
- DDR内存
- 内存分配失败处理
- 内存处理与分配
- Zedboard & Zynq 图像采集 视频开发 (三) AXI4总线读写DDR
- Zedboard & Zynq 图像采集 视频开发 (三) AXI4总线读写DDR .
- Halcon学习之图像采集
- HLS图像处理系列——在ZEDBoard搭建DDR图像处理通路
- 图像采集及处理多线程编程
- 图像处理---内存法
- 内存分配之堆栈
- 裸板之 DDR(双倍速率内存)
- 内存分配失败的处理
- C++内存分配异常处理
- linux常用基本命令之十六 mount unmount
- JVM垃圾回收(GC)原理
- 如何在面试中发现优秀程序员
- 小K对链表的一点理解
- 1
- 图像采集处理之DDR内存分配
- iOS-IM From XMPP.1 初识XMPP
- Java---MD5Util加密
- 基于annotation的hibernate主键生成策略(转)
- Django笔记 Django REST Framework实现Web API 1
- Java enum的用法详解
- AngularJS带给你一个简单完善的Demo
- whuoj1574 第K小数
- CocoaPods安装和使用--(版本依赖写的特别的清楚。。大于和小于等版本号的写法)