FPGA设计-使用 lspci 和 setpci 调试xilinx的PCIe 问题

目录

简介

lspci

lspci-TV

lspci-vvv

注意事项

lspci -vs

lspci -vvvs

设置pci

识别setpci中的寄存器

setpci -s 00:01.0 d0.b=42


简介

lspci 和 setpci 命令在 Linux 发行版中本身可用。该命令具有各种级别的输出,并提供非常有用的时间点查看 PCI 总线上训练的不同组件的功能和状态。 

大多数这些功能都是 PCI-Express 基本规范所需的配置空间寄存器的反映。与大多数命令一样,可以通过在 Linux 中运行“lspci --help”或“man lspci”来找到使用说明。

lspci

默认情况下,lspci 命令将显示所有设备信息,如下所示。

lspci-TV

此命令以树形格式显示 PCI 设备,并给出根端口 BDF(总线、设备、功能)编号。

在上面的日志中,Xilinx 设备连接到总线号“00”、设备号“01”和功能号“1”。

lspci-vvv

这是显示所有内容的最详细命令。要运行此命令,需要 root 权限。

下面的日志仅显示与 Xilinx PCIe 设备相关的部分。

注意事项

• 链路能力寄存器和链路状态寄存器均显示Gen3x8。有时,由于链接问题,它可能会下降。训练好的下行链路状态反映在链路状态寄存器中:

 可纠正错误状态寄存器显示设置的非致命错误。在引导期间,主机也会探测未配置的功能。由于设计是针对一种功能进行配置的,因此其他功能的探测将被报告为不受支持的请求。此不受支持的请求被报告为建议性非致命错误。如果在启动过程中设置了 Non-Fatal Error、Unsupported Request 和 Correctable Error,则可以忽略。可以通过对相应寄存器中的相应位进行配置写入来清除它们。

• 用户必须监视不可纠正错误状态寄存器中的错误。如果该寄存器报告错误,则必须对其进行调查并解决。

 PCI Express 功能从“80”开始。

lspci -vs <BDF>

此命令为所选设备提供详细输出,如下所示:

lspci -vvvs <BDF>

这是相同的命令,但输出更详细,如下所示:

lspci -nvmms <BDF>

此命令将 PCI 设备供应商 ID 和设备 ID 显示为数字。

设置pci

[root@localhost xilinx]# setpci --dumpregs
cap pos w 名称
00 W VENDOR_ID
02 W DEVICE_ID
04 W 命令
06 W STATUS
08 B REVISION
09 B CLASS_PROG
0a W CLASS_DEVICE
0c B CACHE_LINE_SIZE
0d B LATENCY_TIMER
0e B HEADER_TYPE
0f B BIST
10 L BASE_ADDRESS_0
14 L BASE_ADDRESS_1
18 L BASE_ADDRESS_2
1c L
BASE_ADDRESS_3 20 L
BASE_ADDRESS_4 24 L BASE_ADDRESS_5
28 L CARDBUS_CIS
2c L SUBSYSTEM_VENDOR_ID
2e W SUBSYSTEM_ID
30 L ROM_ADDRESS
3c B INTERRUPT_LINE
3d B INTERRUPT_PIN
3e B MIN_GNT
3f B MAX_LAT
18 B PRIMARY_BUS
19 B SECONDARY_BUS
1a B SUBORDINATE_BUS
1b B SEC_LATENCY_TIMER
1c B IO_BASE
1d B IO_LIMIT
1e W SEC_STATUS
20 W MEMORY_BASE
22 W MEMORY_LIMIT
24 W PREF_MEMORY_BASE
26 W PREF_MEMORY_LIMIT
28 L PREF_BASE_UPPER32
2c L PREF_LIMIT_UPPER32
30 W IO_BASE_UPPER16
32 W IO_LIMIT_UPPER16
38 L BRIDGE_ROM_ADDRESS
3e W BRIDGE_CONTROL
10 L CB_CARDBUS_BASE
14 W CB_CAPABILITIES
16 W CB_SEC_STATUS
18 B CB_BUS_NUMBER
19 B CB_CARDBUS_NUMBER
1a B CB_SUBORDINATE_BUS
1b B CB_CARDBUS_LATENCY
1c L CB_MEMORY_BASE_0
20 L CB_MEMORY_LIMIT_0
24 L CB_MEMORY_BASE_1
28 L CB_MEMORY_LIMIT_1
2c W CB_IO_BASE_0
2e W CB_IO_BASE_0_HI 30 W
CB_IO_LIMIT_0 32 W CB_IO_LIMIT_0_HI 34 W CB_IO_BASE_1 36 W CB_IO_BASE_1_HI 38 W CB_IO_LIMIT_1 3a W CB_IO_LIMIT_1_HI 40 W CB_SUBSYSTEM_VENDOR_ID 42 W CB_SUBSYSTEM_ID 44 L CB_LEGACY_MODE_BASE 01 00 - CAP_PM 02 00 - CAP_AGP 03 00 - CAP_VPD 04 00 - CAP_SLOTID 05 00 - CAP_MSI 06 00 - CAP_CHSWP 07 00 - CAP_PCIX 08 00 - CAP_HT 09 00 - CAP_VNDR 0a 00 - CAP_DBG 0b 00 - CAP_CCRC 0c 00 - CAP_HOTPLUG 0d 00 - CAP_SSVID 0e 00 - CAP_AGP3 0f 00 - CAP_SECURE
10 00 - CAP_EXP
11 00 - CAP_MSIX
12 00 - CAP_SATA
13 00 - CAP_AF
0001 00 - ECAP_AER
0002 00 - ECAP_VC
0003 00 - ECAP_DSN
0004 00 - ECAP_PB
0005 00 - ECAP_RCLINK
0006 00 - ECAP_RCILINK
0007 00 - ECAP_RCECOLL
0008 00 - ECAP_MFVC
000a 00 - ECAP_RBCB
000b 00 - ECAP_VNDR
000d 00 - ECAP_ACS
000e 00 - ECAP_ARI
000f 00 - ECAP_ATS
0010 00 - ECAP_SRIOV

识别setpci中的寄存器

以下是识别 setpci 命令中使用的寄存器的各种方法。

  • 使用十六进制地址
  • 提供注册名称
  • 对于属于 PCI 功能一部分的寄存器,可以使用功能名称对第一个寄存器进行寻址。在 --dumpregs 输出中。检查以“CAP_”或“ECAP_”开头的名称。后面可以跟 +offset 以向地址添加偏移量(十六进制数字)。这使得更容易对作为所设置的相应能力寄存器的一部分的寄存器进行寻址。
  • 宽度说明符(b、.w 或 .l)用于选择要读取或写入的字节数(1、2 或 4)。如果通过名称引用寄存器并且寄存器的宽度已知,则可以删除说明符。
  • 所有寄存器名称和宽度说明符都不区分大小写。

示例:

命令

  • 它指向命令寄存器中的值。如果将其替换为 4.w,它将指向相同的位置。

命令.l

  • 这指向命令和状态寄存器的值。

供应商_ID+1.b

  • 它指向供应商 ID 寄存器的高字节。

CAP_PM+2.w

  • 这对应于电源管理能力的第二个字。

ECAP108.l

  • 它指向 ID 为 0x108 的扩展功能的第一个 32 位字。

setpci –s 24:00.0 04.w=6

  • 为了使 MSI 中断工作,必须在 PCIe 配置中设置总线主控启用位。上述命令可用于设置命令寄存器中的“总线主控启用”位。 “24:00.0”是本例中的 BDF 号码。对于不同的设备,它会有所不同,并且还取决于系统。待寻址设备的正确BDF请参见对应的lspci日志。
  • 值 6 意味着我们正在设置内存启用位和总线主控启用位
  • setpci –s 24:00.0 4a.w=1

  • 还必须在 PCIe 配置空间中启用 MSI 寄存器,MSI 中断才能工作。在 UltraScale+ 器件中,它位于偏移量 0x48(也在 lspci 日志中显示为“功能:[48]”)。为此,请发出 PCIe 配置写入,将位 16(MSI 控制寄存器位 0)设置为 1;上面的命令就是这样做的

setpci -s 00:01.0 d0.b=42

  • 上述命令写入链路控制 2 寄存器以将速度设置为 Gen2。
  • 这里的值“2”表示 Gen2,另一个位是“时隙时钟”,它已启用,因此未更改。发出上述命令后,如果执行lspci,则会显示寄存器中的速度值已更改为Gen2。不过,这只是它再次进行链接训练时训练到的速度。
  • 要将链路速度更改为 Gen2,必须重新训练链路。这可以通过执行如下所示的命令来完成:
    • setpci -s 00:01.0 b0.b=62

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+node+mysql8.0,详细步骤及报错解决方案

1.下载需要安装的插件 下载express npm install express下载cors&#xff0c;用于处理接口跨域问题 npm install cors下载mysql npm install mysql 2.配置服务器 可以在vue项目的src同级创建server文件夹&#xff08;这里的位置可随意选择&#xff09; 然后依次创建&#…

并发修改导致MVCC脏写问题

并发修改导致MVCC脏写问题 一、概要 1.1 业务场景 数据库表结构设计&#xff1a; 一个主档数据&#xff0c;通过一个字段&#xff0c;逗号分隔的方式去关联其他明细信息的id。 如主档数据A&#xff0c;有3条明细数据与A关联&#xff0c;其id分别是1,2,3&#xff0c;那么其存…

SSE(Server-Sent Events)主动推送消息

说明 使用Java开发web应用&#xff0c;大多数时候我们提供的接口返回数据都是一次性完整返回。有些时候&#xff0c;我们也需要提供流式接口持续写出数据&#xff0c;以下提供一种简单的方式。 SSE&#xff08;Server-Sent Events&#xff09; SSE 是一种允许服务器单向发送事…

Java四大内部类之局部内部类、匿名内部类

目录 一、局部内部类 二、匿名内部类 基于接口的匿名内部类 基于类的匿名内部类 三、匿名内部类的实践 类的五大成员&#xff1a;属性、方法、构造器、代码块、内部类 内部类的分类 定义在外部类局部位置上&#xff08;比如说方法内&#xff09;&#xff1a; 局部内部类&…

请求go web后端接口 java安卓端播放视频

前端代码 添加gradle依赖 implementation com.squareup.retrofit2:retrofit:2.9.0 implementation com.squareup.retrofit2:converter-gson:2.9.0 添加访问网络权限 <uses-permission android:name"android.permission.INTERNET" />允许http 请求请求 andro…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

作者&#xff1a;羿莉 背景 对企业数据进行敏感数据扫描和保护可以提升企业或组织的数据安全。一方面敏感数据可能包括个人身份信息、财务记录、医疗记录等&#xff0c;定期扫描这些数据可以防止未经授权的访问和泄露。 另一方面&#xff0c;许多国家和地区都有关于数据保护的…

CSS学习记录14

CSS不透明度 opacity属性指定元素的不透明度/透明度。opacity属性的取值范围为0.0 ~ 1.0。 值越低&#xff0c;越透明&#xff1a; img {opacity: 0.5; } opacity属性通常与:hover选择器一同使用&#xff0c;这样就可以在鼠标悬停时更改不透明度&#xff1a; img {opacity: 0…

【YashanDB知识库】如何处理yasql输入交互模式下单行字符总量超过限制4000字节

现象 在yasql执行sql语句后报错&#xff1a;YASQL-00021 input line overflow (>4000 byte at line 4) 原因 yasql在交互模式模式下单行字符总量限制4000字节&#xff0c;超出该限制即报错。 交互式模式下&#xff0c;yasql会显示一个提示符&#xff0c;通常是 SQL>…

为何ZLG致远电子要推出LGA嵌入式核心板?

LGA嵌入式核心板究竟有什么好&#xff1f;能让ZLG致远电子陆续推出了5个系列12个型号的LGA嵌入式核心板。 到目前为止&#xff0c;ZLG致远电子一共推出了M1106/M1107、M1126、M6Y2C、 A6Y2C、MR6450等5个系列&#xff0c;共12个型号的LGA形态的嵌入式核心板&#xff0c;涵盖了A…

C++小白实习日记——Pollnet,Efvi,UDP,数据类型转换(下)

内容太多了&#xff0c;这篇记录UDP接收端 一&#xff0c;UDP接收端接收数据 有了pollnet这个开源项目的支持&#xff0c;接收端的步骤为&#xff1a;1&#xff09;初始化硬编码的参数&#xff1a;接口&#xff0c;IP和端口 2&#xff09;创建接收文件.csv 3&#xff09;读…

【ROS2】坐标TF入门

1、简介 1)定义: TF(TransForm)是用于坐标系管理的工具,它提供了快速、高效的坐标变换和时间同步功能。 2)坐标系 坐标系:在机器人系统中,存在多个坐标系,如基坐标系(Base Frame)、世界坐标系(World Frame)、工具坐标系、工件坐标系等。这些坐标系之间的关系在机…

剑指Offer 03比特位计数

只是记录 题目链接 题目链接 自己想出来的 第一种解法 思路简述 遍历[0,n]之间的数字&#xff0c;对于每一个数字按照二进制的方式展开&#xff0c;判断最低位置是否为1&#xff0c;若为1则1&#xff0c;反之不加&#xff0c;直到该数字等于0就停止。 public static int[] …

某j 全局控制输入框不能输入表情符

在FormItem.vue文件中的function handleRules()添加两处表情正则校验&#xff0c;代码如下 效果&#xff1a; function handleRules(): ValidationRule[] {const { rules: defRules [], component, rulesMessageJoinLabel, label, dynamicRules, required } props.schema;if…

java中File类

1、介绍 File类定义了一些与平台无关的方法来操作文件&#xff0c;可以通过调用File类中的方法&#xff0c;实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息&#xff0c;如文件所在的目录、文件长度、文件读写权限等。数据流可以将数据写入到文…

Linux高性能服务器编程 | 读书笔记 | 10. 高性能I/O框架库Libevent

10. 高性能I/O框架库Libevent Linux服务器程序必须处理三类事件&#xff08;I/O、信号和定时事件&#xff09;&#xff0c;在处理这三类事件时需要考虑以下问题&#xff1a; **统一事件源。**统一处理这三类事件既能使代码简单易懂&#xff0c;又能避免一些潜在的逻辑错误。实…

Javaweb web后端maven介绍作用安装

自动导入到这个项目 src是源代码 main主程序&#xff0c;核心代码 java是Java源代码 resources是项目配置文件 test测试相关的 maven概述 介绍 依赖在本地仓库查找&#xff0c;如果本地仓库有&#xff0c;用本地仓库的依赖&#xff0c;本地没有&#xff0c;连接中央仓库&…

wazuh-modules-sca-scan

sca模块主函数wm_sca_main -> wm_sca_start 检查policy文件中的每一个项目wm_sca_check_policy static int wm_sca_check_policy(const cJSON * const policy, const cJSON * const checks, OSHash *global_check_list) {if(!policy) {return 1;}const cJSON * const id c…

基于单片机的智能窗帘(论文+源码)

1.系统设计 本课题智能窗帘系统的设计主要包括STM32单片机主控模块&#xff0c;光照检测模块&#xff0c;窗帘控制模块&#xff0c;键盘控制模块&#xff0c;显示模块和时钟模块等几个部分。总体设计框图如图2.1所示&#xff0c;其可以实现对当前光照强度的实时检测&#xff0…

Fastdfs V6.12.1集群部署(arm/x86均可用)

文章目录 一、 Fastdfs 介绍二、部署 信息三、步骤tracker/storage 机器的 compose 内容storage 机器的 composetracker 与 storage 启动目录层级与配置文件测试测试集群扩容与缩减注意事项 一、 Fastdfs 介绍 FastDFS 是一款高性能的分布式文件系统&#xff0c;特别适合用于存…

零基础开始学习鸿蒙开发-基础页面的设计

目录 1.样例图 2.逐项分析 2.1 头顶布局分析&#xff1a;首先我们要把第一行的图标绘制出来&#xff0c;一个左一个右&#xff0c;很明显&#xff0c;需要放在一个Row容器中&#xff0c;具体代码如下&#xff1a; 2.2 和头像同一行的布局&#xff0c;需要注意的是&#xff0c…