图像采集处理之DDR内存分配
2016-01-20 13:57
218 查看
由于这是设计之后的一些资料整理和总结,有时候没有兼顾设计流程,知识点总结的顺序可能没有按照最初的设计顺序,这只是为了方便自己以后翻阅,还请不喜勿喷!
本设计中是用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进行数据交互的时候使用的又是实际的物理地址,所以这其间不能简单的使用内存分配函数来进行处理,而是涉及到物理地址和映射地址(虚拟地址)之间的转换的事情,这个在后续章节阐述。
本设计中是用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进行数据交互的时候使用的又是实际的物理地址,所以这其间不能简单的使用内存分配函数来进行处理,而是涉及到物理地址和映射地址(虚拟地址)之间的转换的事情,这个在后续章节阐述。
相关文章推荐
- CocoaPods版本升级
- Data Model(数据模型)
- 1
- Windows实现基于TCP的网络应用程序
- JVM垃圾回收(GC)原理
- 数据结构--图的理解:深度优先和广度优先遍历及其 Java 实现
- 如何在面试中发现优秀程序员
- 修改Ubuntu服务器用户名
- linux常用基本命令之十六 mount unmount
- 泛型算法(十六)之移动语义算法
- 赚钱的事与值钱的事
- 程序员保持健康的7个秘诀
- HIbernate报should be mapped with insert="false" update="false“错
- Linux学习笔记:mysqldump
- 关于android 中控件位置动态设置的问题
- Ubuntu增加sudo权限用户
- bzoj2127: happiness
- spring mvc 支持options方法
- 关于PreparedStatement.addBatch()方法
- ssm+easyui(框架的搭建)