Linux驱动程序DMA传输到PC作为主机的PCIe卡

2024-01-06

我正在开发一个 DMA 例程,将数据从 PC 传输到 PCIe 卡上的 FPGA。我阅读了 DMA-API.txt 和 LDD3 ch。 15 详细信息。但是,我不知道如何从 PC 到 PCIe 卡上的一致 iomem 块进行 DMA 传输。 LDD3 中 PCI 的爸爸样本映射一个缓冲区,然后告诉卡进行 DMA 传输,但我需要 PC 来执行此操作。

我已经发现的:

  1. 请求总线主控

    pci_set_master(pdev);
    
  2. 设置 DMA 掩码

    if (dma_set_mask(&(pdev->dev), DMA_BIT_MASK(32))) {
        dev_err(&pdev->dev,"No suitable DMA available.\n");
        goto cleanup;
    }
    
  3. 请求 DMA 通道

    if (request_dma(dmachannel, DRIVER_NAME)) {
        dev_err(&pdev->dev,"Could not reserve DMA channel %d.\n", dmachannel);
        goto cleanup;
    }
    
  4. 映射缓冲区以进行 DMA 传输

    dma_handle = pci_map_single(pci_dev, buffer, count, DMA_TO_DEVICE);
    

问题:

我必须做什么才能让PC执行 DMA 传输而不是卡?

感谢您的帮助!


首先感谢您的回复。也许我应该更准确地提出我的问题:

  1. 根据我的理解,PC 必须有 DMA 控制器。如何访问此 DMA 控制器以开始传输到 PCIe 卡中的内存映射 IO 区域?
  2. 我们的规范要求 PC 的 DMA 控制器启动传输。但是,我只能找到设备执行 DMA 作业的示例(DMA_mapping.txt、LDD3 ch.15)。是否有一个原因,为什么没有人使用 PC 的 DMA 控制器(尽管它仍然有 DMA 通道)?请求对我们的项目进行规格变更会更好吗?

谢谢你的耐心。


查找 DMA_mapping.txt。其中有很长的一部分告诉您如何设置方向(“DMA 方向”,第 408 行)。

EDIT

好吧,既然你编辑了你的问题......你的规范是错误的。你could设置系统 DMA 控制器,但这毫无意义,因为它太慢了,正如我在评论中所说的那样。读这个线程 http://www.pcisig.com/reflector/msg01281.html.

您必须更改 FPGA 以支持总线主控。我以此为生 - 如果您想分包,请在线外联系我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux驱动程序DMA传输到PC作为主机的PCIe卡 的相关文章

  • simple_read_from_buffer/simple_write_to_buffer 与 copy_to_user/copy_from_user

    我最近编写了一个实现这些功能的模块 两者有什么区别 据我了解 copy user功能更加安全 如果我错了 请纠正我 此外 将这两个功能混合在一个程序中是不是一个坏主意 例如 我用过simple read from buffer在我的杂项开发
  • ARM Linux 如何模拟 PTE 的脏位、访问位和文件位?

    As per pgtable 2 level h https git kernel org cgit linux kernel git torvalds linux git tree arch arm include asm pgtable
  • 如何通过设备树配置 uio_dmem_genirq 驱动程序

    The uio dmem genirq https git kernel org pub scm linux kernel git stable linux stable git tree drivers uio uio dmem geni
  • 开放固件设备树概述/参考手册

    我正在尝试为嵌入式 PowerPC 板设置驱动程序 今天执行此操作的正确方法是使用 OpenFirmware 设备树数据结构 dtb 文件 从 dts 文件编译 创建树非常简单 但是如何让我的设备驱动程序找到它的节点和其中的数据 我还没有找
  • tcp_max_syn_backlog 和 somaxconn 有什么区别?

    我一直在阅读一些关于 Linux 上的 TCP 实现的文章 我很困惑 它们之间有什么区别net ipv4 tcp max syn backlog and net core somaxconn和backlog作为参数传递给listen 系统调
  • 如何杀死内核模块中的等待队列?

    我是内核模块的新手 使用等待队列 我阻塞线程 直到缓冲区有数据 使用hrtimer 我定期唤醒队列 现在 问题是即使在我删除内核模块之后 我也可以看到该进程 thread1 仍在运行 我认为问题在于等待队列永远等待并且进程在这里被阻塞 请帮
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储
  • syn队列和accept队列的混淆

    在阅读TCP源码时 我发现一个困惑的事情 我知道 TCP 在 3 次握手中有两个队列 第一个队列存储服务器收到的连接SYN并发回ACK SYN 我们称之为同步队列 第二个队列存储3WHS成功并建立连接的连接 我们称之为接受队列 但在阅读代码
  • Linux 内核线程没有地址空间

    为什么Linux内核线程没有地址空间 对于任何要执行的任务 它都应该有一个内存区域 对吗 内核线程的文本和数据去了哪里 内核线程确实有一个地址空间 只是他们都有同一个 这并不妨碍它们各自拥有不同的堆栈 文本和数据放置在内核地址空间 由所有线
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • 使用Linux虚拟鼠标驱动

    我正在尝试实施一个虚拟鼠标驱动程序根据基本 Linux 设备驱动程序书 有一个用户空间应用程序 它生成坐标以及内核模块 See 虚拟鼠标驱动程序和用户空间应用程序代码 http www embeddedlinux org cn Essent
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • 从内核空间中的块设备读取

    我正在编写一个内核模块 需要从现有的块设备执行读取 dev 东西 有谁知道有任何其他模块可以执行这些操作 我可以用作参考吗 欢迎任何指点 Linux 2 6 30 如果你真的绝对必须那么使用filp open filp close vfs
  • 大会,你好世界问题

    我正在 Linux 上学习 asm noobuntu 10 04 我得到了以下代码 http asm sourceforge net intro hello html http asm sourceforge net intro hello
  • Linux内核页表更新

    在linux x86 中分页 每个进程都有它自己的页面目录 页表遍历从 CR3 指向的页目录开始 每个进程共享内核页目录内容 假设三个句子是正确的 假设某个进程进入内核 模式并更新他的内核页目录内容 地址映射 访问 权利等 问题 由于内核地
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 同步 I/O 是否会使线程繁忙?

    假设我正在同步 I O 套接字上执行 I O 该套接字已准备好read or write手术 这意味着调用线程不会在操作上被阻塞 无论非阻塞 SOCK NONBLOCK 套接字的阻塞性质 但以下事情我不清楚 实际转移何时发生 当套接字标记为
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short

随机推荐

  • 单击 UIWebView 中的按钮时打开 ViewController swift

    我有一个具有 UIWebView 的应用程序 并且 Webview 包含简单的Button 这是我的 WebViewController import UIKit class testViewController UIViewControl
  • Java - 如何解密 Chrome cookie?

    我正在尝试从 Chrome 浏览器中提取 cookie 我找到了这个帖子读取和插入 Chrome Cookie Java https stackoverflow com questions 33629474 reading and inse
  • 如何在 python 中制作网格?

    这是我的代码 width int input How wide height int input How high grid row bak for i in range width row append bak for i in rang
  • 使用 asp.net 身份在身份服务器 4 中实现角色

    我正在开发一个 asp net MVC 应用程序 使用身份服务器 4 作为令牌服务 我也有一个 api 其中有一些安全资源 我想为 api 实现角色 授权 我想确保只有具有有效角色的授权资源才能访问 api 端点 否则会收到 401 未经授
  • Hive 面试问题中的分区

    1 如果分区列没有数据 那么当你查询它时 你会得到什么错误 2 如果某些行没有分区列 这些行将如何处理 会不会有数据丢失 3 为什么需要对数字列进行分桶 我们也可以使用字符串列吗 流程是什么 您将根据什么选择分桶塔 4 内表详细信息也会存储
  • 如何在通知视图中制作将内容视图向下推的幻灯片动画

    我在屏幕上有两个视图 一个位于屏幕顶部 一个位于屏幕正下方 我需要绿色视图滑出顶部 并使蓝色视图占据整个屏幕 这就是我想做的 问题是 当动画完成时 蓝色视图只是 跳 起来 我希望它随着绿色视图的消失而减轻 我该怎么做 Slide in an
  • 单元测试 - 我应该如何测试这种设计?

    在我的应用程序中 我们的设计有 2 层 API 和操作 1 运营实现代码的 真实 逻辑 例如 验证用户身份 检索图书信息 通知用户他的图书已被查看 相同的操作可能被许多 API 使用 2 APIs由用户执行 接收参数 然后根据API的逻辑执
  • 服务器 500:太多待处理的安全对话

    我有一个相当简单的 WCF Web 服务 使用 Net 3 5 托管在 IIS Express 最终成为完整的 IIS 中 服务方式还蛮有趣的 ServiceContract public class MySvc OperationCont
  • 错误:org.openqa.selenium.ScriptTimeoutException:脚本超时

    我正在使用 selenium webdriver 和 Java 7 10 次我的脚本因错误而失败 org openqa selenium ScriptTimeoutException 脚本超时 我尝试了很多选择 增加等待时间 尝试了方法 j
  • 类型转换的通用方法

    我正在尝试编写通用方法来转换类型 我想写一些类似的东西Cast To
  • Actor 模型:为什么 Erlang/OTP 很特别?你能用另一种语言吗?

    我一直在研究学习 Erlang OTP 因此 一直在阅读 好吧 略读 有关 Actor 模型的内容 据我了解 参与者模型只是一组函数 在 Erlang OTP 中称为 进程 的轻量级线程中运行 它们仅通过消息传递 在 C 或任何其他语言中实
  • NVD3.js multiChart x 轴标签与线对齐,但不与条形对齐

    我正在使用 NVD3 jsmultiChart在图表中显示多条线和条形图 一切工作正常 但 x 轴标签仅与线点对齐 而不与条形对齐 我想正确地将标签直接对齐在条形下方 但我明白了 我用红线标记了标签应该在的位置 I made jsFiddl
  • 如何构造 Typescript 库代码以生成可由 Typescript 应用程序使用的 d.ts 文件?

    我正在构建一个 Typescript 库 捆绑到单个 js 文件中 和一个使用该库捆绑的 js 文件和 d ts 文件的 Typescript 客户端应用程序 我想使用 TS 模块而不是 TS 命名空间 除非这些目标使这不可能 在库的代码中
  • javascript - document.write 错误?

    考虑剧本 Some body content 这工作正常 单词 TEST 被添加到 但当 使用 则正文内容将完全替换为单词 TEST 即删除旧的正文内容 仅添加单词 TEST 仅当以下情况时才会发
  • 您更喜欢哪个接口:T[]、IEnumerable、IList 还是其他?

    好吧 我希望整个社区能够帮助我们解决已经持续了一段时间的工作场所辩论 这与定义接受或返回某种类型列表的接口有关 有几种方法可以做到这一点 public interface Foo Bar Bars get IEnumerable
  • 如何一次安装多个红宝石宝石?

    是否可以仅使用一个命令同时安装多个 gem The gem install命令接受许多参数 因此您可以gem install nokogiri bundler例如 一次拍摄 正如其他人所说 Bundler http gembundler c
  • python scipy stats 帕累托拟合:它是如何工作的

    帮助和在线文档说函数 scipy stats pareto fit 将要拟合的数据集作为变量 以及可选的 b 指数 loc scale 结果以三元组形式出现 指数 loc 标度 从相同的分布生成数据应该导致拟合找到用于生成数据的参数 例如
  • Ra-在 Grails 应用程序中对更改后的用户进行身份验证

    我想立即在我的 Grails 应用程序中传播用户更改 用户角色的更改 我正在使用 Spring Security 插件 我发现了这个 springSecurityService reauthenticate userName 但这适用于当前
  • 在 dll 接口中使用共享指针

    我的 dll 中有一个抽象类 class IBase protected virtual IBase 0 public virtual void f 0 我想要得到IBase在我的 exe 文件中加载 dll 第一种方法是创建以下函数 IB
  • Linux驱动程序DMA传输到PC作为主机的PCIe卡

    我正在开发一个 DMA 例程 将数据从 PC 传输到 PCIe 卡上的 FPGA 我阅读了 DMA API txt 和 LDD3 ch 15 详细信息 但是 我不知道如何从 PC 到 PCIe 卡上的一致 iomem 块进行 DMA 传输