使用 mmap 访问 PCI-e 内存空间

2024-04-07

我在 Freescale MPC8308 处理器(基于 PowerPC 架构)上使用 PCI-e 端口,在尝试使用它时遇到一些问题。端点 PCI-e 设备的内存空间等于 256 MB。我可以使用“pciutils”包轻松读取和写入端点设备的配置空间。

在配置寄存器中写入正确的值并获得访问内存空间的权限后;我尝试使用 C 中的“mmap()”函数访问内存空间,并使用位于以下位置的文件描述符:

“/sys/devices/pci0000:00/0000:00:00.0/resource0”

这正好是 256 MB(等于端点设备的内存空间),所以看来我正在使用正确的文件描述符路径。在这里您可以使用“mmap()”找到我的代码,如中所述https://github.com/billfarrow/pciem https://github.com/billfarrow/pcimem:

https://github.com/billfarrow/pcimem/blob/master/pcimem.c https://github.com/billfarrow/pcimem/blob/master/pcimem.c

但不幸的是,当我尝试使用“mmap()”函数的返回地址来使用内存空间时;我无法正确读取端点设备的只读寄存器。另外,当我读取大于“0x7FFFFFC”的地址时,MPC8308 会重新启动。 考虑到上述情况,我是否错过了初始化 PCI-e 接口的任何步骤?我应该更改 Linux 内核映像或 U-Boot 代码中的任何内容吗?将 PowerPC PCI-e 与 mmap() 一起使用有什么不同吗?你有任何示例代码可以帮助我读取 PCI-e 内存空间吗?

Thanks


mmap() 是一种从用户空间访问 PCIe 设备的非常有用但随意的方法。

我注意到您将 0 作为第一个参数传递给 mmap。在将 FPGA 卡插入 x86 计算机的情况下,我调用 lspci 以获取 PCIe 插槽中卡的物理地址。然后我使用该物理地址作为 mmap 的第一个参数。我知道您正在设备的配置空间中写入 BAR,但也许可以使用 lspci 进行仔细检查。

$ sudo lspci -s 02:00 -v
02:00.0 Memory controller: Xilinx Corporation Device 8028
    Subsystem: Xilinx Corporation Device 0007
    Flags: bus master, fast devsel, latency 0, IRQ 11
    Memory at f7e00000 (32-bit, non-prefetchable) [size=1M]
    Capabilities: [80] Power Management version 3
    Capabilities: [90] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [c0] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 mmap 访问 PCI-e 内存空间 的相关文章

随机推荐

  • jQuery UI 仅在特殊区域删除元素

    我对 jQuery UI 的拖放有疑问 我创建动态的新元素 并将其放置在屏幕上的四个区域之一 这些元素是可拖动的 我可以将它们放置在整个屏幕上 但我希望这些元素只能放置在三个区域之一 我在这里创建了一个完整的工作示例 http jsbin
  • 如何在 Java 中格式化数字?

    如何在 Java 中格式化数字 什么是 最佳实践 在格式化之前我需要对数字进行四舍五入吗 32 302342342342343 gt 32 30 7323 gt 0 73 etc From 这个线程 http bytes com forum
  • RHEL w/Tkinter & Python3 - 更改活动名称“Tk”

    我正在尝试为 Tkinter 应用程序设置 Activity 不确定正确的术语 请参阅屏幕截图 名称 我不是 Linux 专家 新手 甚至不是初学者 但是关于对话框的系统将我的测试机器列为 Fedora 30 窗口管理器是 Gnome 代码
  • C#中如何检查组合框中的项目是否被选中?

    我有一个组合框 必须在其中显示数据库中的日期 用户必须从组合框中选择一个日期才能进一步进行 但我不知道如何让用户意识到首先从组合框中选择该项目才能进一步进行 如果用户没有从组合中选择日期 应该遵循什么流程才能收到消息 if string I
  • WPF ToggleButton 不正确的呈现行为

    这是怎么回事 如何解决 按我的切换按钮 现在看起来就像立即按下 选中 同时 MyToggleButton Checked 处理程序禁用 MyToggleButton 现在按非切换按钮 启用 我们看到什么 MyToggleButton 看起来
  • 对于具有默认分配器的标准容器,std::container::size_type 是否保证为 size_t?

    Like std string
  • TFS2018 是否仍支持 ISubscriber?

    截至 TFS 2017 Plugins 文件夹中有一个名为 Microsoft TeamFoundation Framework Server 的库 它包含 ISubscriber 接口 可以覆盖该接口以附加挂钩并添加事件行为 例如构建完成
  • Laravel 用户登录时如何设置会话变量

    发票应用程序开发正在使用 Laravel 进行 我为每个用户存储日期和金额格式settings table 当用户登录自己的帐户时如何设置Session多变的 请提出任何建议 我正在使用 Laravel 5 3 当然 文档告诉我们如何存储会
  • 未使用参数 ngrams

    我使用 Quanteda 进行文本分析 我使用这个命令 corp df2 lt tokens df text remove punct TRUE remove numbers TRUE remove symbols TRUE gt toke
  • XCode 4.4 iOS 5.1 模拟器问题

    我将我的 mac book 更新为 mountain lion 并将 Xcode 更新为 4 4 版本 在之前的版本中 我关闭 iOS 模拟器没有任何问题 并且 Xcode 自动停止构建过程 但现在如果我关闭 iOS 模拟器 Xcode 中
  • Scala:SeqT monad 转换器?

    如果我们有这样的两个函数 def findUserById id Long Future Option User def findAddressByUser user User Future Option Address 然后我们就可以使用
  • “关闭”某物是什么意思?

    我试图理解闭包 但从字面上看every我能找到的闭包定义使用了相同的神秘而模糊的短语 结束 什么是closure 哦 这是一个函数结束另一个功能 但我找不到 结束 的定义 有人能解释一下 A 事物 关闭 B 事物意味着什么吗 闭包是由代码指
  • 如何获取ECS集群的所有日志

    是否有一些 AWS 命令 get 可以从 ECS 集群的所有服务 任务中获取日志 就像是 aws ecs logs cluster dev or aws ecs describe clusters cluster dev logs 例如 必
  • 每周运行一次 php 脚本

    每个星期一我都需要清空 MYSQL 数据库的几个字段 首先 我考虑使用 cron 作业 但我的 Web 托管提供商 fatcow com 既不支持 SSH 也不支持通过命令行访问共享服务器 我还考虑过检查 date 以查看是否是星期一并执行
  • 从不规则时间序列创建规则 15 分钟时间序列

    我的 csv 文件中有一个不规则的时间序列 包含 DateTime 和 RainfallValue C SampleData csv DateTime RainInches 1 6 2000 11 59 0 1 6 2000 23 59 0
  • 树 /f cmd 修改日期。 Windows Powershell

    我需要创建一个 tree驱动器的文件夹 子文件夹和修改日期的列表 tree f命令效果很好 但我需要添加修改日期 我怎样才能做到这一点 它不会那么漂亮 但你可以使用 Recurse使用 Get ChildItem 选项来查找所有这些 此外
  • 是否可以使用 python-shell 包在 Node JS 中安装 python 包?

    我刚刚知道我们可以使用下面的 npm 包在 Node JS 中运行 Python 脚本 蟒蛇外壳 https www npmjs com package python shell 是否可以使用相同的库安装 python 包 就像是pip i
  • 自定义组件上的 OverlayTrigger 不起作用

    我试图在自定义组件 按钮 悬停时显示弹出窗口 class MyComponent extends React PureComponent
  • 如何避免页脚上的手风琴重叠

    我是 jQuery 新手 我正在使用手风琴 当我单击手风琴时 它会重叠在页脚上 我怎样才能避免它 下面是页脚的代码
  • 使用 mmap 访问 PCI-e 内存空间

    我在 Freescale MPC8308 处理器 基于 PowerPC 架构 上使用 PCI e 端口 在尝试使用它时遇到一些问题 端点 PCI e 设备的内存空间等于 256 MB 我可以使用 pciutils 包轻松读取和写入端点设备的