当前位置: 首页 > news >正文

【PCIe 总线及设备入门学习专栏 5.3.2 -- PCIe 枚举与 PCIe PHY firmware 的区别与联系】

文章目录

  • Overview
    • PCIe 枚举与PCIe PHY固件的区别与联系
      • 1. PCIe 枚举
      • 2. PCIe PHY固件
      • 3. 区别
      • 4. 联系
    • 举例说明
      • 实例场景 1:服务器启动 PCIe 网卡的过程
      • 实例场景 2:PCIe 热插拔设备的调试

Overview

本文将详细介绍 PCIe 枚举与 PCIe PHY firmware 的区别与联系。

PCIe 枚举与PCIe PHY固件的区别与联系

1. PCIe 枚举

定义
PCIe(Peripheral Component Interconnect Express)枚举是指操作系统或固件对 PCIe 总线上的设备进行探测、识别并为其分配资源(如地址空间、中断号)的过程。它是确保 PCIe 设备能够正确注册和参与系统运行的关键步骤。核心功能

  • 设备发现 :从根端口开始递归地扫描总线,检测是否有下挂设备(如端点设备或桥接设备)。

  • 配置空间访问 :读取设备的配置空间(Configuration Space),确定设备的类型、功能、厂商 ID 和设备 ID 等。

  • 资源分配 :为设备分配必要的内存空间、I/O 空间和中断线。

  • 驱动加载 :根据设备 ID 匹配合适的驱动程序,使设备被上层系统使用。

涉及角色

  • 固件(如 BIOS/UEFI):完成初步的设备枚举和资源分配,为操作系统启动提供基本配置。

  • 操作系统内核:完成详细的设备发现与驱动加载。

2. PCIe PHY固件

定义
PCIe PHY 固件是负责控制和管理物理层(PHY)设备的嵌入式代码。它位于 PCIe 栈的最底层,直接控制 PCIe 的电气信号传输,包括链路的建立、调试和状态监控。核心功能

  • 链路初始化 :执行链路训练(Link Training)和链路状态(Link State)的管理,确保根端口与设备端点之间的通信稳定。

  • 信号完整性优化 :控制 PCIe PHY 中的模拟和数字逻辑,优化信号完整性参数,如均衡器调节、预加重等。

  • 低功耗管理 :支持 PCIe 的低功耗模式(如 L0s、L1 和 L2)和相关的状态转换。

  • 错误监测与恢复 :监控链路错误,执行错误恢复操作。

涉及角色

  • 固件开发者:编写 PHY 固件并烧录到 PHY 相关硬件。

  • 硬件(PHY 层逻辑):处理 PCIe 的物理信号发射与接收。

3. 区别

项目PCIe 枚举PCIe PHY固件
层次软件层,与操作系统和驱动交互硬件层,与物理传输逻辑交互
核心目标发现设备并进行资源分配确保链路建立并优化信号传输
执行位置系统固件、OS 驱动、内核代码集成在 PCIe PHY 的硬件中
关注点总线地址分配、配置和设备初始化信号传输质量、链路稳定性和功耗

4. 联系

  • 紧密耦合PCIe 枚举依赖于物理链路的正常工作,因此需要 PHY 固件的配合确保链路可用。链路训练失败或物理层信号异常会直接影响枚举过程。

  • 协同运行 :PHY 固件初始化链路并将状态上报给上层(例如 BIOS/UEFI 或 OS)。上层依据 PHY 的状态决定是否尝试枚举设备。

  • 调试关联性 :PCIe 枚举失败时,调试通常需要结合物理层状态(如链路训练日志)以确定问题是逻辑层配置错误还是硬件/信号问题。

举例说明

实例场景 1:服务器启动 PCIe 网卡的过程

  1. PHY 固件阶段
  • PHY 固件在系统启动时激活。

  • 通过 PCIe 链路训练(Link Training)确定链路的宽度和速度(如 x8、Gen4)。

  • 调整信号均衡参数以优化信号质量。

  • 确认链路训练成功后通知上层软件。

  1. PCIe 枚举阶段
  • BIOS 扫描 PCIe 总线,并通过读取配置空间识别到插入的网卡设备。

  • 为网卡分配地址空间(MMIO 和 I/O)。

  • 操作系统内核加载网卡驱动,注册网卡接口到系统。

  1. 如果在这一过程中链路训练失败(例如信号质量过低),网卡可能无法被正确枚举,导致系统无法识别到设备。

实例场景 2:PCIe 热插拔设备的调试

  1. 用户插入一个 NVMe SSD(PCIe Gen4):
  • PHY 固件检测到新设备插入并开始链路训练。

  • 由于插入的设备支持不同的链路速度,PHY 固件协商降级到 Gen3。

  1. BIOS 或操作系统检测到链路建立,发起 PCIe 枚举。
  • 枚举过程读取 NVMe SSD 的设备 ID 和配置空间信息。

  • 操作系统根据设备 ID 加载 NVMe 驱动程序。

  1. 如果信号质量问题导致链路频繁断开,操作系统会报设备不可用,而调试时则需要查看 PHY 固件的链路状态日志。

总结
PCIe 枚举和 PCIe PHY 固件分别负责设备资源分配和物理链路建立,两者在功能和层次上不同但协作紧密。在实际应用中,PHY 固件为枚举提供物理基础,枚举是设备正常运行的关键逻辑步骤。

相关文章:

【PCIe 总线及设备入门学习专栏 5.3.2 -- PCIe 枚举与 PCIe PHY firmware 的区别与联系】

文章目录 OverviewPCIe 枚举与PCIe PHY固件的区别与联系1. PCIe 枚举2. PCIe PHY固件3. 区别4. 联系 举例说明实例场景 1:服务器启动 PCIe 网卡的过程实例场景 2:PCIe 热插拔设备的调试 Overview 本文将详细介绍 PCIe 枚举与 PCIe PHY firmware 的区别与…...

电动汽车超级充电设备与车辆之间的通讯协议对27930-2015国标的修改记录

左侧为团体标准 右侧为国标 1.CHM SPN 2600 数据修改为 团标数据: 0x534331 ,国标数据:0x000101 2.BRM SPN 2565 数据修改为 团标数据: 0x53…...

案例分析一

张某(10多年IT工作经验)应聘一家国企单位,面试官(技术副主管)面试时问了些无关痛痒的问题,谈到薪资时强调我权限范围内的数额就那么多,再多就需要走申请流程进行操作了。 没几天入职后&#xf…...

2.5G PoE交换机 TL-SE2109P 简单开箱评测,8个2.5G电口+1个10G光口(SFP+)

TPLINK(普联)的万兆上联的2.5G网管交换机TL-SE2109P简单开箱测评。8个PoE 2.5G电口,1个万兆SFP上联口。 2.5G交换机 TL-SE2420 简单开箱评测,16个2.5G电口4个10G光口(SFP):https://blog.zeruns.com/archives/837.html…...

mysql存电话号码应该用int还是string类型

在MySQL中,存储电话号码一般建议使用**STRING 类型**(通常是 VARCHAR),而不是 INT 类型,原因如下: 1. 电话号码不是数字用于计算的值 电话号码本质上是一个标识符,不需要进行数学运算。如果用…...

解决本地运行MR程序访问权限问题

文章目录 1. 提出问题2. 解决问题2.1 临时解决方案2.2 永久解决方案 3. 小结 1. 提出问题 运行DeduplicateIPsDriver类,抛出如下异常: 该错误信息表明在尝试运行 DeduplicateIPsDriver 类时,遇到了 HDFS(Hadoop 分布式文件系统&a…...

Codeforces Round 997 (Div. 2) A~C

今天的封面是水母猫猫和佩佩,原图在这里,记得关注画师夏狩大大 至此,天鹅完成了连续四场比赛在四个不同比赛上四次分的壮举!(ABC388,CodeChef169,牛客月赛109,CF997) 这场…...

3. Go函数概念

在 Go 语言中,函数被称为一等公民(First-Class Citizens),意味着函数可以像其他数据类型(如整数、字符串、结构体等)一样作为变量传递、返回、赋值等。这使得 Go 在编程时具备了极大的灵活性。 1、函数概念…...

python-44-嵌入式数据库SQLite和DuckDB

文章目录 1 SQLite1.1 世界上最流行的数据库1.1 SQLite简介1.2 插入语句1.3 查询数据1.4 更新数据1.5 删除数据2 DuckDB2.1 DuckDB简介2.2 DuckDB与Python结合使用2.2.1 创建表2.2.2 分析语句2.2.3 导出为parquet文件2.3 Windows中使用DuckDB3 参考附录1 SQLite Python的一个特…...

使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。

在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出,详见以下博客: Spring Boot Apache POI 实现 Exc()el 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并&#…...

R语言的并发编程

R语言的并发编程 引言 在现代计算中,如何有效地利用计算资源进行数据处理和分析已成为一个重要的研究方向。尤其在大数据时代,数据量的急剧增加让单线程处理方式显得力不从心。为了解决这一问题,各种编程语言都开展了并发编程的研究和应用。…...

音乐播放器实现:前端HTML,CSS,JavaScript综合大项目

音乐播放器实现:前端HTML,CSS,JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码(一)HTML代码(二)css代码 二、登录页面(一)HTML代码(二)css代码…...

PixArt--alpha笔记

PixArt-α 是华为发布的文生图模型。 训练策略分解:设计三个不同训练步骤,分别优化像素依赖、文本图像对齐和图像审美质量。高效T2I transformer:将 cross-attention融入 Diffusion Transformer (DiT)注入文本条件,简化计算密集的…...

内网渗透测试工具及渗透测试安全审计方法总结

1. 内网安全检查/渗透介绍 1.1 攻击思路 有2种思路: 攻击外网服务器,获取外网服务器的权限,接着利用入侵成功的外网服务器作为跳板,攻击内网其他服务器,最后获得敏感数据,并将数据传递到攻击者&#xff0…...

java工程学习步骤

1、安装idea,安装maven,mysql数据库 2、创建一个多maven的springboot的项目,可以正常启动以及可以访问web页面 3、引入日志使用slflogbck进行日志打印,同时封装统一的日志打印工具,idea安装maven analyzer工具&#…...

使用Flask和Pydantic实现参数验证

使用Flask和Pydantic实现参数验证 1 简介 Pydantic是一个用于数据验证和解析的 Python 库,版本2的性能有较大提升,很多框架使用Pydantic做数据校验。 # 官方参考文档 https://docs.pydantic.dev/latest/# Github地址 https://github.com/pydantic/pyd…...

LabVIEW 蔬菜精密播种监测系统

在当前蔬菜播种工作中,存在着诸多问题。一方面,播种精度难以达到现代农业的高标准要求,导致种子分布不均,影响作物的生长发育和最终产量;另一方面,对于小粒径种子,传统的监测手段难以实现有效监…...

统信UOS系统安装redis

1、yum引入redis yum install redis2、创建日志文件夹 mkdir -p /var/log/redis mkdir -p /var/lib/redis3、添加用户 useradd redis -s /usr/sbin/nologin4、文件夹赋权限 chown -R redis:root /var/log/redis chown redis:root /etc/redis.conf chown -R redis:root /var…...

课程如何抵御脑腐的冲击

课程需要引导学生逐步形成深度思考的能力,才有可能抵御‘Brain Rot’,否则都不会取得任何改善。 一步步失去的思维力,需要一步步引导恢复,类似康复训练。这是一个非常长期而艰辛但又十分有意义和有价值的工作。 这是一篇类似工作转…...

2.4 如何学习表示学习(Representation Learning)

如何学习表示学习(Representation Learning) 学习表示学习(Representation Learning)是理解和掌握机器学习、深度学习以及人工智能的关键一步。表示学习主要关注从原始数据中提取有效的特征或表示,使得模型能够高效处理和理解复杂的数据。以下是一些系统的方法,帮助你一…...

介绍下常用的前端框架及时优缺点

以下是一些常用的前端框架及其优缺点介绍: React • 优点 • 组件化架构:可构建可复用的UI组件,提高开发效率和组件可维护性。 • 虚拟DOM:高效更新页面,减少直接操作DOM的性能开销。 • 灵活性和可扩展性&#xf…...

Rust 猜数字游戏:从 0 到 1 的完整实现与深入解析

一、项目概述 1.1 为什么选择“猜数字”? “猜数字”是编程入门中非常经典的一个项目。它看似简单,却能很好地展示: 输入输出 (I/O):提示用户输入并读取内容。随机数:每次运行生成一个随机值,保证游戏的…...

使用C语言实现栈的插入、删除和排序操作

栈是一种后进先出(LIFO, Last In First Out)的数据结构,这意味着最后插入的元素最先被删除。在C语言中,我们可以通过数组或链表来实现栈。本文将使用数组来实现一个简单的栈,并提供插入(push)、删除(pop)以及排序(这里采用一种简单的排序方法,例如冒泡排序)的操作示…...

职场的三个阶段及其应对规划:以前端开发工程师为例

作为职场人士,特别是 IT 开发工程师,职业生涯的发展路径往往伴随着不同的挑战与机遇。一般而言,职场生涯可以划分为三个阶段:找工作阶段、有工作阶段以及职业转型阶段。每个阶段都有其特定的特征和应对策略,下面我将从…...

【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南

前言 随着自然语言处理(NLP)技术的快速发展,越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型(LLM),以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架,支持多种先…...

蓝桥杯训练—斐波那契数列

文章目录 一、题目二、解析三、代码 一、题目 求100以内的斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列 ,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入&…...

TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)

TensorFlow 作为深度学习框架,当然是为了帮助我们更便捷地构建神经网络。所以,本次实验将会了解如何使用 TensorFlow 来构建神经网络,并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…...

复健第二天之[MoeCTF 2022]baby_file

打开题目在线环境可以看到: 感觉要用伪协议去求,但是我们并不知道flag的位置,这里我选择用dirsearch去扫一下: 最像的应该就是flag.php了 于是就构建payload: **?filephp://filter/convert.base64-encode/resource…...

【QT用户登录与界面跳转】

【QT用户登录与界面跳转】 1.前言2. 项目设置3.设计登录界面3.1 login.pro参数3.2 界面设置3.2.1 登录界面3.2.2 串口主界面 4. 实现登录逻辑5.串口界面6.测试功能7.总结 1.前言 在Qt应用程序开发中,实现用户登录及界面跳转功能是构建交互式应用的重要步骤之一。下…...

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…...

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…...

豆包MarsCode:构造特定数组的逆序拼接

问题描述 思路分析 1. 数组的组成: 我们要根据 i 的不同值拼接出不同长度的子数组。对于每个 i 从 1 到 n,我们要把数字从 n 逆序到 i 拼接成一个子数组。 例如,当 i 1 时,拼接 [n, n-1, ..., 1]。当 i 2 时,拼接 …...

14-美妆数据分析

前言 美妆数据分析可以帮助企业更好地理解市场趋势、客户偏好和产品表现 import pandas as pd import numpy as np 一、数据清洗 data pd.read_csv(rC:\Users\B\Desktop\美妆数据.csv,encodinggbk) data.head()data.info()data data.drop_duplicates(inplaceFalse) data.r…...

新阿里云买服务器配置需手动配置80端口

新买阿里云服务器需手动配置80,端口才可以访问nginx CentOS系统 安装nginx 1. 安装 Nginx yum install nginx 2. 启动 Nginx 服务 systemctl start nginx 3. 修改默认网页 cd /usr/share/nginx/ echo "666" >index.html cat index.html 访问ngin最后…...

Mysql--实战篇--连接泄漏问题(什么是连接泄漏,未关闭SqlSession,长事务处理,连接池管理等)

1、什么是连接泄漏(Connection Leak)? 连接泄漏是指应用程序未能正确关闭数据库连接,导致连接池中的可用连接逐渐减少,最终耗尽所有连接。连接泄漏可能会导致新的请求无法获得连接,进而引发服务中断。 连…...

【ESP32】ESP-IDF开发 | WiFi开发 | AP模式 + 基站连接例程

1. 简介 前面一篇讲了WiFi的基站模式,演示了怎么编程连接AP,所以这一篇讲一讲AP模式,ESP32作AP,让其他的设备连接自己。 1.1 DHCP 这里需要补充一个知识点——DHCP服务器。当基站连接一个AP时,会被分配一个IP&#xf…...

Ubuntu升级Linux内核教程

本文作者CVE-柠檬i: CVE-柠檬i-CSDN博客 本文使用的方法是dpkg安装,目前版本为5.4.0-204,要升级成5.8.5版本 下载 下载网站:https://kernel.ubuntu.com/mainline/ 在该网站下载deb包,选择自己想要升级的版本,这里是5…...

关于AWS网络架构的思考

目录: AWS概述 EMR Serverless AWS VPC及其网络 关于AWS网络架构的思考 在AWS K8S中部署的业务,有不同的流量路径。 流量进入 客户端请求 普通的客户端流量流向从前到后是: 客户端公司网关(endpoint)业务的Endpoint ServiceLoad Balancers(监听80和…...

Pandas库的常用内容归纳

Pandas 是一个强大的 Python 数据分析库,提供了大量用于数据处理和分析的功能。以下是一些 Pandas 库中常用的功能: 数据创建和操作 Series 和 DataFrame:创建一维的 Series 和二维的 DataFrame 对象。数据导入:从 CSV、Excel、…...

【错误解决方案记录】spine3.8.75导出的数据使用unity-spine3.8插件解析失败报错的解决方案

报错信息 Exception: Unsupported skeleton data, please export with a newer version of Spine. Spine.SkeletonBinary.ReadSkeletonData (System.IO.Stream file) (at Assets/Spine/Runtime/spine-csharp/SkeletonBinary.cs:132) Spine.Unity.Editor.AssetUtility.AddRequi…...

Python与PyTorch的浅拷贝与深拷贝

1.Python赋值操作的原理 在python中,x something, 这样的赋值操作,准确的理解是:给存储something建立一个索引x (即存储地址), x通过访问something的存储内容,获得something的值。 在下面代码中&#xff…...

【unity进阶篇】弧度、角度和三角函数(Mathf),并实现类似蛇的运动

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…...

【分类】【损失函数】处理类别不平衡:CEFL 和 CEFL2 损失函数的实现与应用

引言 在深度学习中的分类问题中,类别不平衡问题是常见的挑战之一。尤其在面部表情分类任务中,不同表情类别的样本数量可能差异较大,比如“开心”表情的样本远远多于“生气”表情。面对这种情况,普通的交叉熵损失函数容易导致模型…...

支持selenium的chrome driver更新到132.0.6834.83

最近chrome释放新版本:132.0.6834.83 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only su…...

IO模型与NIO基础二

抽象基类之二 FilterInputStream FilterInputStream 的作用是用来“封装其它的输入流,并为它们提供额外的功能”。 它的常用的子类有BufferedInputStream和DataInputStream。 (1) BufferedInputStream的作用就是为“输入流提供缓冲功能,以及mark()和res…...

什么是FPGA开发?

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,是一种通过编程方式实现特定功能的集成电路。与传统的ASIC(专用集成电路)相比,FPGA具有灵活性高、开发周期短、成本相对较低等优势&am…...

寻找川味:成都九尺板鸭

寻找川味:成都九尺板鸭 在四川这片美食的天堂里,隐藏着无数令人垂涎的传统名吃。其中,成都九尺板鸭以其悠久的历史、独特的制作工艺和令人难以抗拒的美味,成为了许多食客心中不可错过的地道川味。 历史渊源 九尺板鸭,顾名思义,因主产于四川省成都市彭州市九尺镇而得名。早在5…...

Object常用的方法及开发中的使用场景

在前端开发中,Object 对象提供了许多常用的方法,这些方法帮助我们操作对象的属性和结构。以下是常用的 Object 方法及其功能简要说明: 对象常用的方法 1. 创建对象 Object.create(proto[, propertiesObject]) 创建一个具有指定原型对象和属性…...

ElasticSearch上

安装ElasticSearch Lucene:Java语言的搜索引擎类库,易扩展;高性能(基于倒排索引)Elasticsearch基于Lucene,支持分布式,可水平扩展;提供Restful接口,可被任何语言调用Ela…...

基于SpringCloud的广告系统设计与实现(二)

一、common公共模块 1.common的作用 通用的代码、配置不应该散落在各个业务模块中,不利于维护与更新 一个大的系统,响应对象需要统一外层格式 各种业务设计与实现,可能会抛出各种各样的异常,异常信息的收集也应该做到统一 2.统…...