• 新上传的测试程序
  • 等kenrel的部分 完成测试没问题, 可以分享一下 框架图 (long long time)
  • gtthub https://github.com/HongDaYuGithub/fpga_arm_driver.git

邮箱: hongdayu.mars@gmail.com 有问题可以相互讨论

#include <cstdio>
#include "zynq7035.h"
#include <string>
#include "ftp.h"
#include <vector>const static std::string Use = "UserSpace Dma Test \n\n""-u [ftp romte login name] \n""-p [ftp romte login password]\n""-rf [ftp romte get filename]\n""-dma_size [dma test mem calloc size\n]""-dma_addr [dma test mem phy addr\n]""-dma_mode [axi dma mode\n]\n""axi dma mode:\n""[DIRECT_DMA_MODE 0x1]\n""[SG_DMA_MODE 0x2]\n""[RO_MODE] 0x4\n""[WO_MODE] 0x8\n""if you want all please use 0xFF \n";// 这是测试代码所以这部分代码可以共享一下
// kernel 的部分,和 实际的业务代码, 就不好分享了,(虽然的kernel 的部分 还没有做)
// RW  测试模式下恐有些问题,不建议 0xFF
// 使用命令行的时候建议使用 bash 脚本 综合测试,之所以没有配置文件感觉太麻烦
// 直接从ftp 获取数据源进行测试, 会分享到 github 中 遵循 MIT 协议
// 根据 read 和 write 的模式 页可以进行设置void args_parser(std::vector<std::string> args,Ftp& ftp_use,uint32_t& dma_addr,uint32_t& dma_size,uint8_t& _dma_mode_mask){ //// 命令行的解析函数,// 正常的命令行解析函数for(int i  = 0 ; i < args.size() ; i++){if(args[i] == std::string("-u")){ftp_use.login_name = args[++i];}else if(args[i] == std::string("-p")){ftp_use.login_password = args[++i];}else if(args[i] == std::string("-rf")){ftp_use.filename = args[++i];}else if(args[i] == std::string("-ra")){ftp_use.ftp_addr = args[++i];}else if(args[i] == std::string("-dma_size")){dma_size = (uint32_t)std::stoul(args[++i],nullptr,16);}else if(args[i] == std::string("-dma_addr")){dma_addr = (uint32_t)std::stoul(args[++i],nullptr,16);}else if(args[i] == std::string("-dma_mode")){_dma_mode_mask = (uint8_t)std::stoul(args[++i],nullptr,16);}}if(dma_size == 0 || dma_addr == 0 || \ftp_use.login_name.size() == 0  || \ftp_use.login_password.size() == 0 || ftp_use.filename.size() == 0 || \ftp_use.ftp_addr.size() == 0 || _dma_mode_mask == 0){printf("%s",Use.c_str());exit(1);}
}int main(int argc,char* argv[]){ // 如果失败只能重启使用std::vector<std::string> args;for(int i = 1 ; i < argc ; i++){args.push_back(std::string(argv[i]));}uint32_t  dma_addr,dma_size;uint8_t dma_mode;Ftp _ftp;args_parser(args,_ftp,dma_addr,dma_size,dma_mode); //获取dma的一个物理地址,在脚本中计算好,传入主程序解析使用char *buffer = (char*)calloc(sizeof(char)*2,dma_size); //开辟一段连续的内存空间_ftp.ftp_get(buffer,dma_size); //ftp 获取传输进来的 buffer, 这个buffer 为 dma 映射的区域Zynq7035 fpctr(COMMON_FPGA_BASEADDR,1024); //Fpga 的通用配置函数,无法同时测试收发Fpga* fpga_rw = &fpctr;uint32_t version;fpga_rw->read(0x0,version);printf("fpga version is %#x\n",version);fpctr.init_zynq7035(dma_mode);// 目前 硬件 用了 两种 不同的方案 一个 dma engine 用来 read 另一个 dma engine 用来 write// 只是用来测试的,所以无伤大雅if(dma_mode&RO_MODE){if(dma_mode&DIRECT_DMA_MODE){fpctr.read2slave(std::vector<uint32_t>());}else if(dma_mode&SG_DMA_MODE){printf("SG DMA READ MODE NONE \n");}}if(dma_mode&WO_MODE){if(dma_mode&DIRECT_DMA_MODE){printf("SAMPLE DMA WRITE MODE NONE \n");}else if(dma_mode&SG_DMA_MODE){fpctr.dmawrite_sg(buffer,dma_size);}}return 0;
}

问题一 : 在用户空间 无法连续使用大空间 往里面填写数据, 导致篡改了内核的某些进程的数据,导致内核直接挂死, 连续小内存的使用,没有任何的大问题, 但是无法满足业务要求,今天在测试一天如果,无法解决,直接在内核 做测试用例,同时创建业务代码

问题二: 上行的用户空间的测试用例没有任何问题,可能,测试了只有几个可能性,只有几个内存页的使用,其实也是小内存的使用,不影响大内存的使用

Xilinx Axi Dma Userspace模式下 寄存器 +MMAP 测试程序相关推荐

  1. 处理器不同模式下寄存器

    1.1.1   ARM处理器不同模式下寄存器 CPU的模式不同,在其对应模式下可以使用的寄存器也不相同,如表3-2所示: 表3-2 ARM处理器模式下寄存器 寄存器类别 寄存器在汇编中的名称 各模式下 ...

  2. axi dma direct 模式 总结

    STUCT XAxiDma 这些都是 github Xilinx 官方库中的源码,sample dma 的主要流程代码 DMA 控制器 mem addr 发送到fifo 设备, fifo 通过寻址 取 ...

  3. Xilinx axi dma driver 驱动构建 (二)

    在xilinx axi_dma 驱动 中大部分都是初始化,和分配的通道的 功能 xilinx dma 的初始化驱动 完全可以采用 寄存器的方式代替; 就拿我们的业务例子来说, 是可以的功能单一简单 主 ...

  4. xilinx axi dma 深入开发(一)

    以下为官方 axidma-proxy 源码 /*** Copyright (C) 2021 Xilinx, Inc** Licensed under the Apache License, Versi ...

  5. xilinx axi dma linux 快速搭建框架

    kernel axi dma 驱动 也是更具数据手册来的, 先把业务简单跑起来,然后在做到内核里,熟悉 dma engine 框架 xilinx 驱动的 整个驱动框架,都是基于 platform bu ...

  6. AXI DMA总结、内核axidmatest.c测试程序分析、SG mode

    AXI DMA 概述: XILINX提供的AXI DMA支持Scatter/Gather mode和Direct Register mode 数据位宽支持32,64,128,256,512,1024b ...

  7. xilinx sdk在Debug模式下根据地址在内存里观察值

    写个简单赋值语句测试一下,进入Debug模式,鼠标靠在变量上会显示内存地址 在memory下monitors旁+号新建观察,把地址输进去就可以看见放在内存里的值了

  8. ZYNQ学习之路11.AXI DMA

    一. AXI DMA简介 AXI DMA IP核提供了AXI4内存之间或AXI4-Stream IP之间的内存直接访问,可选为分散收集工作模式,初始化,状态和管理寄存器等通过AXI4-Lite 从机几 ...

  9. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

最新文章

  1. 外观模式 - 设计模式学习
  2. 大佬告诉你JavaScript面试题大全之基础面试题(附答案)
  3. 贪吃蛇一直显示正在连接服务器,贪吃蛇大作战进不去怎么办 解决方法
  4. linux如何在shell中自动生成1到100的数组
  5. mysql创建账号并赋予权限
  6. Project Pacific的第一次接触(转)
  7. 嵌入式操作系统内核原理和开发(系统中断仿真)
  8. 关于wkhtmltopdf生成pdf空白
  9. 团队作业8----第二次项目冲刺(Beta阶段) 第二天
  10. C语言malloc与calloc区别
  11. 聊一聊如何把SSL证书安装到小鸟云服务器上
  12. mysql database alias_mysql小结——基础篇
  13. MySQL数据库的索引、事务和存储引擎
  14. 2020年拼多多校招面试题及答案-最全最新-持续更新中
  15. python绘制网络拓扑图_python绘制网络拓扑_网络拓扑的python表示
  16. Android利用Socket与硬件通信之智能家居APP
  17. pillow进行图像处理
  18. PaperFree-论文查重
  19. 【MTK】 关于电信使用VoLTE异常
  20. c语言看门狗指令pic,PIC指令介绍

热门文章

  1. [HAOI2009]毛毛虫
  2. jQuery中的closest()和parents()的差别
  3. CCF201612-3 权限查询(100分)
  4. 创建自己的CA机构 - openssl cert 双向认证
  5. Swift实战-豆瓣电台(六)视图跳转,传参及回跳
  6. python django 的启动脚本
  7. 【译】Android系统简介—— Activity
  8. 【C】——如何用线程进行参数的传递
  9. 反编译华为U8825D“framework-res.apk”出现的错误提示(1)
  10. SWIG,C#沟通C++的桥梁