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

Linux下lspci和setpci工具编译与使用全攻略(附常见问题解决)

Linux下lspci和setpci工具深度解析与实战指南1. PCI设备管理工具概述在Linux系统管理中PCI设备的管理与调试是系统管理员和嵌入式开发者经常需要面对的任务。作为PCI设备信息查询与配置的核心工具lspci和setpci在设备驱动开发、硬件兼容性测试、系统故障排查等场景中发挥着不可替代的作用。lspci主要用于列出系统中所有PCI设备及其详细信息包括设备ID、厂商ID、设备类别等关键信息。而setpci则提供了直接读写PCI设备配置空间的能力这对于底层硬件调试和特定功能启用至关重要。这两个工具通常作为pciutils软件包的一部分提供大多数Linux发行版已预装但在某些定制化场景下可能需要从源码编译安装。典型应用场景包括新硬件兼容性验证设备驱动开发过程中的硬件识别系统启动时PCI设备初始化问题排查高级PCI功能配置与调优2. 源码获取与编译安装2.1 获取最新源码pciutils的官方源码托管在以下地址http://mj.ucw.cz/download/linux/pci/建议始终使用最新稳定版本以获得最佳兼容性和功能支持。下载后解压源码包tar xvf pciutils-3.7.0.tar.gz cd pciutils-3.7.02.2 编译选项配置在开始编译前需要根据目标环境配置适当的编译选项。对于本地编译安装通常只需执行make sudo make install对于交叉编译环境需要修改Makefile中的CC和AR变量指定交叉编译工具链CC arm-linux-gnueabihf-gcc AR arm-linux-gnueabihf-ar常见编译问题解决问题现象可能原因解决方案make报错找不到zlib缺少zlib开发库安装zlib1g-dev包sudo apt-get install zlib1g-dev运行时提示共享库缺失动态链接库路径问题设置LD_LIBRARY_PATH或静态编译设备列表不完整内核PCI支持不完整确保内核配置启用了CONFIG_PCI和CONFIG_PCI_MMCONFIG提示生产环境中建议使用静态编译避免运行时依赖问题make STATIC13. lspci高级用法解析3.1 基础信息查询最简单的命令形式直接列出所有PCI设备lspci输出示例00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]常用参数组合-nn显示设备厂商和设备的数字代码-v显示详细信息-vv和-vvv显示更详细的信息-k显示处理设备的内核驱动-t以树状结构显示设备层次3.2 设备过滤与特定信息提取通过总线号、设备号等过滤特定设备lspci -s 00:1f.2提取设备资源分配信息lspci -v -s 00:1f.2 | grep -i memory设备类别代码参考类别代码设备类型0300显示控制器0200网络控制器0106SATA控制器0c03USB控制器0604PCI桥设备3.3 配置空间深度解析查看设备完整配置空间需要root权限sudo lspci -xxxx -s 00:1f.2输出示例00: 86 80 32 1f 07 00 10 02 00 01 06 01 00 80 00 00 10: f1 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 43 10 28 06 ...关键配置空间字段解析偏移0x00厂商ID和设备ID偏移0x04命令寄存器偏移0x06状态寄存器偏移0x3C中断线4. setpci实战应用4.1 基本读写操作读取命令寄存器偏移0x04sudo setpci -s 00:1f.2 04.L修改命令寄存器值启用内存空间和IO空间访问sudo setpci -s 00:1f.2 04.L0x0007常用寄存器操作参考操作命令示例说明读取字节04.B读取1字节读取字04.W读取2字节读取双字04.L读取4字节写入字节04.B0x10写入1字节屏蔽写入04.L^0x00000001只修改指定位4.2 高级调试技巧中断相关调试查看设备中断线配置sudo setpci -s 00:1f.2 3C.B电源管理调试读取电源管理能力结构sudo lspci -vvv -s 00:1f.2 | grep -A 10 Power Management修改电源状态sudo setpci -s 00:1f.2 CAP_PM4.W0x0008警告直接修改PCI配置空间可能造成系统不稳定建议在测试环境中谨慎操作并确保了解每个位的含义。5. 典型问题解决方案5.1 设备识别异常处理现象lspci显示设备但驱动未加载排查步骤确认设备ID与驱动匹配lspci -nn -s 00:1f.2 grep 8086:1f32 /lib/modules/$(uname -r)/modules.alias检查内核日志dmesg | grep 00:1f.2手动加载驱动sudo modprobe ahci5.2 权限问题解决问题普通用户无法访问PCI配置空间解决方案临时方案需要rootsudo chmod 666 /sys/bus/pci/devices/0000:00:1f.2/config永久方案创建udev规则etc/udev/rules.d/99-pci.rules内容SUBSYSTEMpci, ATTR{vendor}0x8086, ATTR{device}0x1f32, MODE06665.3 虚拟化环境特殊考量在KVM/QEMU虚拟化环境中PCI设备透传(passthrough)时需注意确认IOMMU分组dmesg | grep -i iommu lspci -vvv -s 00:1f.2 | grep -i iommu隔离设备echo 0000:00:1f.2 /sys/bus/pci/devices/0000:00:1f.2/driver/unbind echo 8086 1f32 /sys/bus/pci/drivers/vfio-pci/new_id6. 性能调优与监控6.1 PCIe链路状态监控查看PCIe链路速度和宽度lspci -vvv -s 01:00.0 | grep -i width预期输出LnkSta: Speed 8GT/s, Width x16, TrErr- Train- SlotClk DLActive- ...6.2 带宽利用率分析使用perf工具监控PCIe流量sudo perf stat -e uncore_imc_0/event0x04/ -a sleep 16.3 高级错误报告检查启用PCIe高级错误报告sudo setpci -s 01:00.0 CAP_AER0x08.L0x0000000f检查错误状态sudo lspci -vvv -s 01:00.0 | grep -A 10 AER在实际项目中我曾遇到一个案例某款NVMe SSD在特定主板上性能异常。通过lspci发现其运行在PCIe 2.0 x1模式而非设计规格的PCIe 3.0 x4。最终排查发现是主板BIOS中PCIe链路速度被错误配置修正后性能提升了8倍。

相关文章:

Linux下lspci和setpci工具编译与使用全攻略(附常见问题解决)

Linux下lspci和setpci工具深度解析与实战指南 1. PCI设备管理工具概述 在Linux系统管理中,PCI设备的管理与调试是系统管理员和嵌入式开发者经常需要面对的任务。作为PCI设备信息查询与配置的核心工具,lspci和setpci在设备驱动开发、硬件兼容性测试、系统…...

深入解析DBGridEh的合计与分组小计实现技巧

1. DBGridEh合计功能基础实现 DBGridEh作为Delphi开发中常用的数据网格控件,其合计功能是数据处理场景中的刚需。我第一次接触这个功能时,也被它简洁的实现方式惊艳到了。要让网格底部显示合计行,其实只需要两步操作: 首先打开Sum…...

Cobalt项目Web端源码开放情况解析:开源媒体下载工具的完整指南

Cobalt项目Web端源码开放情况解析:开源媒体下载工具的完整指南 【免费下载链接】cobalt save what you love 项目地址: https://gitcode.com/gh_mirrors/co/cobalt Cobalt是一个开源的媒体下载工具,专为那些想要轻松下载网络媒体内容而不被广告、…...

MIPS寄存器文件设计避坑指南:从零开始用Logisim实现4x32位寄存器组

MIPS寄存器文件设计避坑指南:从零开始用Logisim实现4x32位寄存器组 在计算机体系结构的学习中,理解寄存器文件的工作原理是掌握CPU设计的关键一步。MIPS架构作为经典的RISC指令集,其寄存器文件设计体现了精简指令集的核心理念。本文将带您从零…...

VSCode+ESP-IDF环境搭建避坑指南:解决pip版本导致的安装失败问题

VSCode与ESP-IDF开发环境配置全攻略:从零避坑到高效开发 作为一名长期使用ESP32系列芯片的开发者,我深知搭建一个稳定可靠的开发环境有多么重要。还记得第一次接触ESP-IDF时,光是环境配置就折腾了整整两天,其中pip版本问题是最常见…...

Dioxus应用日志系统:调试和监控的实用方案 [特殊字符]

Dioxus应用日志系统:调试和监控的实用方案 🚀 【免费下载链接】dioxus 该全栈图形用户界面(GUI)库可用于开发桌面、Web、移动设备以及更多平台上的应用程序。 项目地址: https://gitcode.com/GitHub_Trending/di/dioxus Di…...

Unsloth Studio:LLM微调UI

从原始数据集到微调大语言模型(LLM)的过渡传统上涉及大量基础设施开销,包括CUDA环境管理和高VRAM需求。以高性能训练库著称的Unsloth AI发布了Unsloth Studio来解决这些摩擦点。Studio是一个开源的本地无代码界面,旨在为软件工程师…...

科研小白福音:用LabVIEW和NI采集卡,5分钟搞定你的第一个电压信号采集系统

科研新手的第一套LabVIEW信号采集系统:从开箱到实战的极简指南 第一次走进实验室,导师递给我一块NI采集卡:"下周组会前把传感器信号采集好。"那一刻,面对陌生的硬件和从未接触过的LabVIEW界面,我盯着闪烁的U…...

当软件成本归零,什么会真正崩溃

大多数人对“软件归零”这个论点最大的误解是:他们以为这意味着应用更便宜。 不是的。这是关于整个成本结构的崩溃——这种成本结构目前塑造着企业如何形成、服务如何交付、财富如何分配。当构建软件的边际成本趋近于零,而且自主代理可以代表你操作这些…...

开源工具本地化部署指南:BCompare_Keygen安全激活与离线部署实施教程

开源工具本地化部署指南:BCompare_Keygen安全激活与离线部署实施教程 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在企业级文件对比与合并工作中,Beyond Compare 5作为…...

如何利用开源脚本实现八大网盘直链下载:完整技术指南

如何利用开源脚本实现八大网盘直链下载:完整技术指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改(改自6.1.4版本) ,自用,去推广&#…...

终极指南:Fiber分布式缓存实现方案——Redis Cluster与一致性哈希详解

终极指南:Fiber分布式缓存实现方案——Redis Cluster与一致性哈希详解 【免费下载链接】fiber ⚡️ Express inspired web framework written in Go 项目地址: https://gitcode.com/GitHub_Trending/fi/fiber 在现代Web应用开发中,高性能缓存是提…...

C#类型转换避坑指南:为什么你的Cast方法总抛InvalidCastException?

C#类型转换避坑指南&#xff1a;为什么你的Cast方法总抛InvalidCastException&#xff1f; 在C#开发中&#xff0c;类型转换是每个开发者都会遇到的常见操作。特别是使用LINQ的Cast<T>方法时&#xff0c;稍不注意就会遇到令人头疼的InvalidCastException异常。本文将深入…...

别再傻傻分不清了!华为交换机上那个‘Combo口’到底是干嘛的?手把手教你配置与避坑

华为交换机Combo接口全解析&#xff1a;从原理到实战的终极指南 第一次走进机房&#xff0c;面对华为交换机上那一排密密麻麻的接口&#xff0c;你是否曾被那个标着"Combo"的小字搞得一头雾水&#xff1f;这个看似普通的接口&#xff0c;其实是华为工程师们精心设计的…...

如何用Roo Code的语音功能提升编程效率:完整指南

如何用Roo Code的语音功能提升编程效率&#xff1a;完整指南 【免费下载链接】Roo-Code Roo Code (prev. Roo Cline) is a VS Code plugin that enhances coding with AI-powered automation, multi-model support, and experimental features 项目地址: https://gitcode.com…...

vcpkg 安装zlib 时VS语言包缺失导致的构建失败问题解析

1. 问题现象与初步排查 最近在Windows平台上用vcpkg安装zlib时&#xff0c;遇到了一个让人头疼的构建失败问题。错误日志里赫然显示着"BUILD_FAILED"的红色警告&#xff0c;仔细查看详细日志会发现更具体的报错信息&#xff1a;"unistd.h(5) : fatal error RC10…...

Lite-HRNet:轻量级高分辨率网络在遥感影像分割中的迁移实践与调优指南

1. Lite-HRNet迁移到遥感影像分割的挑战 第一次把Lite-HRNet从人体姿态估计搬到遥感影像分割时&#xff0c;我遇到了几个头疼的问题。最明显的就是训练时损失函数死活不下降&#xff0c;模型输出的分割结果全是噪声&#xff0c;根本提取不出任何有效特征。这让我意识到&#xf…...

Roo Code 终极团队协作指南:5个提升开发效率的AI项目管理技巧

Roo Code 终极团队协作指南&#xff1a;5个提升开发效率的AI项目管理技巧 【免费下载链接】Roo-Code Roo Code (prev. Roo Cline) is a VS Code plugin that enhances coding with AI-powered automation, multi-model support, and experimental features 项目地址: https:/…...

FreeRTOS信号量避坑指南:二值与计数信号量的5个关键差异点(附STM32测试案例)

FreeRTOS信号量深度解析&#xff1a;二值与计数信号量的实战差异与STM32优化策略 在嵌入式实时操作系统中&#xff0c;信号量作为任务间通信的核心机制&#xff0c;其正确使用直接关系到系统的稳定性和响应效率。对于使用STM32平台的中级开发者而言&#xff0c;深入理解二值信号…...

HMCL启动器资源包管理完全指南:从基础配置到高级应用

HMCL启动器资源包管理完全指南&#xff1a;从基础配置到高级应用 【免费下载链接】HMCL huanghongxun/HMCL: 是一个用于 Minecraft 的命令行启动器&#xff0c;可以用于启动和管理 Minecraft 游戏&#xff0c;支持多种 Minecraft 版本和游戏模式&#xff0c;可以用于开发 Minec…...

如何优雅地白嫖 Groq、Together、Fireworks 等海外加速推理服务

目前Groq、Together AI、Fireworks AI 这三家海外推理平台都已经大幅收紧了免费额度&#xff0c;不再是2024年那种“随便白嫖几百万token”的时代了。但仍然存在一些相对优雅、低成本、可持续的使用方式。 下面按“能白嫖多少 操作难度 可持续性”排序&#xff0c;给你目前最…...

MSPM0L1306开发四大高频问题与硬件级解决方案

1. MSPM0L1306开发常见问题深度解析与工程实践指南在基于TI MSPM0L1306微控制器的嵌入式开发实践中&#xff0c;工程师常遭遇一系列具有共性的构建、配置与调试障碍。这些问题虽不涉及核心算法或复杂外设驱动逻辑&#xff0c;却直接影响开发效率与项目进度。本文从工程落地角度…...

iOS微信红包效率工具终极指南:从技术原理到实战配置

iOS微信红包效率工具终极指南&#xff1a;从技术原理到实战配置 【免费下载链接】WeChatRedEnvelopesHelper iOS版微信抢红包插件,支持后台抢红包 项目地址: https://gitcode.com/gh_mirrors/we/WeChatRedEnvelopesHelper 在移动社交时代&#xff0c;微信红包已成为日常…...

RISC-V C驱动内存踩踏定位术:用objdump+readelf反向追踪.bss段越界,3分钟锁定未初始化全局变量

第一章&#xff1a;RISC-V C驱动内存踩踏定位术&#xff1a;用objdumpreadelf反向追踪.bss段越界&#xff0c;3分钟锁定未初始化全局变量 当RISC-V Linux内核模块在运行中触发Unable to handle kernel NULL pointer dereference或静默数据损坏时&#xff0c;一个常见却隐蔽的元…...

Depot和Warehouse混用?物流新手常犯的5个错误及解决方案

Depot与Warehouse的本质差异&#xff1a;物流从业者必须掌握的5个核心知识点 刚入行的物流新人经常会被各种专业术语搞得晕头转向&#xff0c;尤其是那些看起来相似但实际上天差地别的概念。就拿Depot和Warehouse来说&#xff0c;很多新人会想当然地认为它们都是"放东西的…...

FaceFusion快速部署:无需复杂配置,开箱即用的AI换脸工具

FaceFusion快速部署&#xff1a;无需复杂配置&#xff0c;开箱即用的AI换脸工具 1. 为什么选择FaceFusion&#xff1f; 在数字内容创作和视频编辑领域&#xff0c;AI换脸技术正变得越来越普及。但传统换脸工具往往需要复杂的安装过程和繁琐的配置步骤&#xff0c;让许多非技术…...

如何解决Emoji Mart表情数据缓存失效问题:保证内容新鲜度的终极指南

如何解决Emoji Mart表情数据缓存失效问题&#xff1a;保证内容新鲜度的终极指南 【免费下载链接】emoji-mart &#x1f3ea; One component to pick them all 项目地址: https://gitcode.com/gh_mirrors/em/emoji-mart Emoji Mart是一个强大的可定制化Web表情选择器组件…...

低轨卫星终端功耗优化仅剩72小时窗口期(星载Flash寿命倒计时+电池衰减曲线预警)

第一章&#xff1a;低轨卫星终端功耗优化的紧迫性与系统约束低轨卫星&#xff08;LEO&#xff09;星座正以前所未有的规模部署&#xff0c;Starlink、OneWeb、GW星座等项目已将数万颗卫星送入近地轨道。终端设备作为用户侧关键节点&#xff0c;其功耗表现直接决定续航能力、热管…...

终极Emoji Mart数据压缩指南:5个减少传输大小的关键技术方案

终极Emoji Mart数据压缩指南&#xff1a;5个减少传输大小的关键技术方案 【免费下载链接】emoji-mart &#x1f3ea; One component to pick them all 项目地址: https://gitcode.com/gh_mirrors/em/emoji-mart Emoji Mart表情数据压缩是现代前端开发中提升应用性能的关…...

终极指南:如何监控和优化Squirrel SQL生成器的查询性能 [特殊字符]

终极指南&#xff1a;如何监控和优化Squirrel SQL生成器的查询性能 &#x1f680; 【免费下载链接】squirrel Fluent SQL generation for golang 项目地址: https://gitcode.com/gh_mirrors/sq/squirrel Squirrel是一个用于Go语言的流畅SQL生成器&#xff0c;它通过可组…...