linux系统从pci.ids文件获取硬件设备详细厂商信息
机器采样:
[root@ht24 hwdata]# cat /etc/redhat-release ; uname -r
CentOS Linux release 7.9.2009 (Core)
3.10.0-1160.42.2.el7.x86_64
lspci 查询pci设备信息,这些PCI设备名字文件保存在哪里呢?
实际linux系统从
/usr/share/hwdata/pci.ids或/usr/share/misc/pci.ids
文件中可以获取硬件设备详细厂商信息
关于lspci
显示Linux系统的pci设备最简单的方法就是使用lspci命令
安装pciutils包(centos在最小化安装时不会自带该包,需要自己下载安装)
https://www.linuxfromscratch.org/blfs/view/svn/general/pciutils.html
pciutils包的源码github地址为: https://github.com/pciutils/pciutils
从该项目的README文件可以知道,其主要提供三个命令:lspci、setpci和update-pciids。
update-pciids命令会从网上更新pci.ids文件,该文件包含着pci设备的vendor id和 device id 与厂商名称、型号名称的对应关系,
一旦更改该文件那么lspcishow出来的东西就会发生变化。
不同Linux发行版本的pci.ids文件的位置有所不同,比如centos一般在/usr/share/hwdata/pci.ids,而Debian一般在/usr/share/misc/pci.ids,
lspci命令的安装路径一般在centos下的/usr/sbin/lspci,而在Debian下一般为/use/bin/lspci,
update-pciids一般在/usr/sbin/update-pciids,这些路径如果是手动编译安装pciutils则可以自行定制,关于如何编译安装可参考pciutils-3.6.2。
同样,不同发行版本的pciutils也有差异,比如centos的update-pciids和Debian的 update-pciids是有区别的,最重要的区别在于其pci.ids更新的源不同
http://pci-ids.ucw.cz/
https://github.com/pciutils/pciids
同发行版本的pciutils也有差异,比如centos的update-pciids和Debian的 update-pciids是有区别的,最重要的区别在于其pci.ids更新的源不同
在Debian中:
#!/bin/sh
#URL="http://pci-ids.ucw.cz/pci.ids"
URL="http://pciids.sourceforge.net/v2.2/pci.ids"
FILE=/usr/share/misc/pci.ids
在centos中:
#!/bin/sh
[ "$1" = "-q" ] && quiet=true || quiet=false
set -e
SRC="http://pci-ids.ucw.cz/v2.2/pci.ids"
DEST=/usr/share/hwdata/pci.ids
我们可以直接访问 http://pci-ids.ucw.cz/pci.ids 如果想更新该文件可以查看
https://linux.101hacks.com/unix/update-pciids/
我们进入/usr/share/hwdata目录看下
[root@ht24 hwdata]# ll
total 7884
-rw-r--r-- 1 root root 1778721 Oct 1 2020 iab.txt
-rw-r--r-- 1 root root 4296346 Oct 1 2020 oui.txt //OUI是组织唯一标识符的缩写。网卡的生产厂家列表
OUI/MA-L Organization
company_id Organization
Address 00-22-72 (hex) American Micro-Fuel Device Corp.
002272 (base 16) American Micro-Fuel Device Corp.
2181 Buchanan Loop
Ferndale WA 98248
US 00-D0-EF (hex) IGT
00D0EF (base 16) IGT
9295 PROTOTYPE DRIVE
RENO NV 89511
US .........其他省略 -rw-r--r-- 1 root root 1220928 Oct 1 2020 pci.ids
#
# List of PCI ID's
#
# Version: 2020.06.24
# Date: 2020-06-24 03:15:01
#
# Maintained by Albert Pool, Martin Mares, and other volunteers from
# the PCI ID Project at https://pci-ids.ucw.cz/.
#
# New data are always welcome, especially if they are accurate. If you have
# anything to contribute, please follow the instructions at the web site.
#
# This file can be distributed under either the GNU General Public License
# (version 2 or higher) or the 3-clause BSD License.
#
# The database is a compilation of factual data, and as such the copyright
# only covers the aggregation and formatting. The copyright is held by
# Martin Mares and Albert Pool.
# # Vendors, devices and subsystems. Please keep sorted. # Syntax:
# vendor vendor_name
# device device_name <-- single tab
# subvendor subdevice subsystem_name <-- two tabs 0001 SafeNet (wrong ID)
0010 Allied Telesis, Inc (Wrong ID)
# This is a relabelled RTL-8139
8139 AT-2500TX V3 Ethernet
0014 Loongson Technology LLC
7a00 Hyper Transport Bridge Controller
7a02 APB (Advanced Peripheral Bus) Controller
7a03 Gigabit Ethernet Controller
7a04 OTG USB Controller
7a05 Vivante GPU (Graphics Processing Unit)
7a06 DC (Display Controller)
7a07 HDA (High Definition Audio) Controller
7a08 SATA AHCI Controller
7a09 PCI-to-PCI Bridge
7a0b SPI Controller
7a0c LPC Controller
7a0f DMA (Direct Memory Access) Controller
7a14 EHCI USB Controller
7a15 Vivante GPU (Graphics Processing Unit)
7a19 PCI-to-PCI Bridge
7a24 OHCI USB Controller
7a29 PCI-to-PCI Bridge ...................其他省略 -rw-r--r-- 1 root root 55055 Oct 1 2020 pnp.ids //即插即用设备列表
-rw-r--r-- 1 root root 2162 Oct 1 2020 sdio.ids //安全数字输入输出
-rw-r--r-- 1 root root 707614 Oct 1 2020 usb.ids //全球usb厂商列表
在Linux的源码中也有一个名为include/linux/pci_ids.h
的头文件,该文件的内容定义了各个pci设备vendor_id和device_id.
E:\linux内核\linux-2.6.38.5\linux-2.6.38.5\include\linux\pci_ids.h
man lspci
名称
lspci 列出所有 pci 设备 staging 模块
lspci[选项] 描述
lspci 工具显示有关系统中的 pci 总线和设备连接的. 缺省情况下,它会在设备列表中. 如果您正在 windows 中的 pci 设备报告错误或 lspci 本身,请包括输出"lspci vvx"甚至更好的"lspci vvxxx"(但是,查看下面可能的信 ?). 输出的某些部分.特别是在高度 verbose 模式,也许只对经验丰富的 pci 黑客 intelligibleexact 字段时,请查阅有关 pci 规范或 /usr/include/linux/pci.h 包含文件的定义. pci 配置空间的某些部分的访问被限制到许多操作系统上的根,因此, lspci 可用的功能与普通用户是有限的.但是, lspci 次其最佳,以尽可能多地显示可用,并将所有其他信息文本. 选项
基本的显示模式 m
dump 的 pci 设备的向后兼容的机器可读取表单中的数据.查看下面的细节.
毫米
dump 的 pci 设备轻松分析脚本在一个机器可读取表单中的数据.查看下面的细节.
t
显示包含所有总线,它们之间的桥梁,设备和连接的树,如图.
显示选项 v
verbose 显示详细信息和所有的设备.
vv
非常的繁琐和显示有关细节.此级别包括适当的一切内容很有用.
vvv
甚至显示一切我们和更详细的分析.即使它看起来不感兴趣的(例如,内存的区域).
k
显示内核驱动处理每个设备和内核模块能够处理它.打开v在正常模式下时,默认的输出.(目前仅在 linux 上带有 2.6 内核或更新 .)
x
显示十六进制转储标准部件的配置空间(64个字节或 128 字节 cardbus 桥).
xxx
显示十六进制 dump 整个 pci 配置空间.它仅作为几根 pci 设备当您尝试读取配置空间的某些部分崩溃(该行为可能不违反 pci 标准,但它至少非常stupid).但是,这样的设备都极少,所以您应该深奥的担心.
xxxx
显示十六进制转储扩展(4096字节)pci配置空间 pci x 2.0 和 pci express 总线.
b
总线以人为本的视图.显示卡的所有看到的 irq 号码和地址在 pci 总线上的内核代码.
D
总显示 pci 域的数字.缺省情况下, lspci 消除机器上,只有域0.
选项来控制解决 id 的名称 n
代码为数字而非寻找的 pci id 列表中显示 pci 供应商和设备.
nn
显示 pci 供应商和设备代码充当编号和名称.
q
如果 dns 查询成功,结果被缓存到~/ .pciidscache 和它在后续运行,即使是可识别的q没有给出任何有关.只与小心,以避免重载数据库服务器内的自动化脚本,请使用此开关.
同问,但本地缓存被复位.
Q
查询本地的条目被识别的中央数据库中.如果您怀疑所显示的条目是不对的.
选择设备选项之一: s[[[[<域>]:]<总线>]:][<插槽>][.[]]
仅显示设备在指定的域(如果您的机器具有若干主机桥梁.他们可以共享一个公共总线编号或空间它们都使用 pci 地址域的自己的;域的编号从0到 ffff), 总线(0到 ff), 槽(0到1f)和函数(0到7).每个组件的设备地址可以省略或为"*",这意味着"任何值".所有数字都是十六进制的例如,"0 :0"表示在总线上的所有设备."0"表示任何总线上所有设备的函数0 ,"-"在所有总线和设备的选择第三函数0".4"第四条函数中的每个设备.
d[<供应商>]:[<设备>]
仅显示与指定的设备供应商和设备 id .既是十六进制,并给出可能省略或给定 id 的"*",这意味着"任何值".
其他选项 i<文件>
使用<文件>作为 list instead of /usr/share/hwdata/pci.ids. pci id .
p<文件>
使用<文件>作为 map 的 pci id 由内核模块处理.缺省情况下,使用 lspci /lib/modules/kernel_version/modules.pcimap. 仅以使用最新的 linux 系统有足够的模块工具.
M
所有 pci 设备的总线映射模式后者将执行彻底的扫描,然后调用包括配置桥后面的那些 ,etc .此选项会产生有意义的结果只有一个直接的硬件的访问模式,这通常需要 root 特权.请注意,仅扫描 pci 总线 mapper 的0. 版本
lspci :应使用此选项单独使用.
pci 访问选项 pci 公用事业的 pci / pci 设备(看到pcilib(7)有关细节).可以使用以下选项来配置其行为: A<方法>
这个库支持各种方法来访问 pci 硬件.缺省情况下,它的使用方法.但可以使用此选项将替代此决策.有关可用方法的列表及其说明.
O=<值>
库的行为是由若干命名的参数.此选项允许将任意长度的值.使用o帮助的列表参数及其默认值的列表.
h1
使用直接通过 intel 硬件访问配置机制2.(这是一个简写为 intel conf1 .)
h3
使用直接通过 intel 硬件访问配置机制2.(这是一个简写为 intel conf2 .) F<文件>
访问真实的硬件.读取列表中的设备和它们的配置寄存器的值从给定的文件先前产生的运行 lspci 的x为用户提供的 bug 报告的分析,这是非常有用的因为可以显示的硬件配置中的任何方式而 disturbing 用户请求有关储.
G
增大调试级别的库.
机器读取输出
(m , vm ,vmm)本节中所述的lspci的所有其它格式在版本之间可能更改. 所有数字都始终显示十六进制.如果您想要处理的名称,请添加n开关的数值 id . 简单格式(m) 在简单格式.每个设备在单独一行.它适合于传递给 shell 脚本的参数格式.即 ,whitespaces 分隔的值.如果有必要,引号和转义.其中一些参数传递:插槽,类,供应商名称、设备名称、子系统供应商名称和子系统名称(为空,如果设备没有最后两个子系统);其余参数是选项如下: rrev
修订版号. pprogif
编程接口.
的相对顺序传递参数和选项的.在以后的版本,则可添加新选项但它们将始终具有单个参数未由任何空格隔开的选项,如果无法识别,这样他们可以很容易地忽略.
详细的格式(vmm) verbose 输出空白行分隔的记录序列."对的值.在标记和值之间通过单个 tab 字符.存的记录行中的一个记录是按任何特定的顺序.标记的大小写敏感.
定义了下列标记: 插槽
在设备所在的插槽([domain:]bus:device.function)此标记将始终首先在一个记录.
类
类的名称.
供应商
供应商的名称.
设备
设备的名称. svendor
该子系统供应商名称(optional).
sdevice
子系统的名称(optional).
physlot
在设备所在的物理插槽(optional, linux 只).
修订版
修订版号(optional).
progif
编程接口(optional).
driver
内核当前处理设备驱动程序(optional, linux 只).
模块
kernel module 报告它能够处理设备(optional, linux 只). 新的标记分组,也可以将在未来版本,因此您应该忽略任何标记您无法识别.
向后兼容模式(vm) 在此模式下, lspci 可以尝试完美兼容旧版本.它几乎相同的常规模式.但是设备标记是用于在插槽和设备名,因此,它在单个记录中发生两次请避免使用此格式的任何新代码.
文件
/usr/share/hwdata/pci.ids 所有的 pci id 的列表.(供应商、设备、类和子类的).维护一个 http://pciids.sourceforge.net/ ,使用 pciids 工具来下载最新版本的更新.
/usr/share/hwdata/pci.ids.gz
如果使用压缩的支持,这个文件编译的 lspci pci.ids. 之前
~/ .pciidscache
所有 id 在缓存 dns 查询模式在此文件中找到.
bugs
有时, lspci 无法对配置寄存器完全解码.此错误发生时没有足够的文档的作者可用的.在这种情况下,它至少打印 标记对信号有潜在的有关的东西说.如果您知道细节,补丁当然欢迎. 仅由 linux_sysfs 后端访问当前支持的扩展空间, 参见
setpci(8),更新 pciids(8), pcilib(7) 作者
The PCI Utilities are maintained by Martin Mares < mj@ucw.cz > . 引用
dstat (1), ctl 中引? (8), lshw (1), lsusb (8), 过程 (5), usbview (8)
linux系统从pci.ids文件获取硬件设备详细厂商信息的更多相关文章
- 在Linux系统中如何把文件拷贝到U盘
Linux下把所有的都当成文件处理,如果在linux系统下需要拷贝文件,哪么你需要先把U盘挂载到系统中的某一个位置,然后再使用cp命令完成拷贝. 工具/原料 Linux操作系统一台 U盘一枚 方法 ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
- Linux系统下查看某文件修改的时间戳
Linux系统下查看某文件修改的时间戳查看文件时间戳命令:stat awk.txt File: `awk.txt' Size: 20 Blocks: 8 I ...
- Linux 系统必须掌握的文件_【all】
0.Linux 系统文件的详解 1.Linux 系统的网络配置文件 2.Linux 系统的DNS配置文件 3.Linux 系统的IP与域名解析文件[局域网的DNS] 4.Linux 系统的主机别名文件 ...
- <linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件>
1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o2.linux 系统c语言生成.so文件,----->gcc -sha ...
- 脚本_修改 Linux 系统的最大打开文件数量
#!bin/bash#作者:liusingbon#功能:修改 Linux 系统的最大打开文件数量#追加两行配置参数到文件/etc/security/limits.conf的末尾,修改最大打开文件数量为 ...
- spark实验(一)--linux系统常见命令及其文件互传(2)
2.使用 Linux 系统的常用命令 启动 Linux 虚拟机,进入 Linux 系统,通过查阅相关 Linux 书籍和网络资料,或者参考 本教程官网的“实验指南”的“Linux 系统常用命令”,完成 ...
- Linux系统根目录下各文件夹介绍
参考自:[1]Linux 系统根目录下各个文件夹的作用 https://www.cnblogs.com/jiangfeilong/p/10538795.html[2]了解Linux根目录"/ ...
- Linux系统下运行.sh文件
在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个vip666.sh文件 #chmod +x *.sh的文件名 #./*.sh的文件名 第一种(这种办法需要用chmod使得文件具备 ...
随机推荐
- LGP6276题解
众所周知,排列是一个置换,一个置换是一车环. 步数就是这些环长的 \(lcm\). 如果你去思考直接 DP,会发现很困难,根本设不出来状态.于是考虑正难则反:每个质数幂 \(p^k\) 对答案的贡献. ...
- CF1327F题解
首先第一步,位运算拆位.变为一个区间的 \(And\) 为 \(0\) 或 \(1\). 如果 \(And\) 为 \(1\),那么所有数都需要为 \(1\),否则为 \(0\). 我们把所有可能为 ...
- map, reduce和filter(函数式编程)
# map可以用于对可遍历结构的每个元素执行同样的操作,批量操作: map(lambda x: x**2, [1, 2, 3, 4]) # [1, 4, 9, 16] map(lambda x, y: ...
- Django-Multitenant,分布式多租户数据库项目实战(Python/Django+Postgres+Citus)
Python/Django 支持分布式多租户数据库,如 Postgres+Citus. 通过将租户上下文添加到您的查询来实现轻松横向扩展,使数据库(例如 Citus)能够有效地将查询路由到正确的数据库 ...
- kafka 第一次小整理(草稿篇)————整理一下自己的认知
前言 简单整理一些自己使用kafka的一些感受. 正文 一切都要回到真实的世界上, 计算机世界只是真实事件的一个缩影. 计算机世界有一个重要的东西,那就是数据库. 数据库记录着真实世界发生了什么,准确 ...
- Java基础—String构造方法
Java基础--String构造方法 public String(): 创建一个空表字符串对象,不包含任何内容 public String(char[]chs): 根据字符数组的内容,来创建字符串对象 ...
- spring——通过注解显式的完成自动装配
构建bean文件: public class People { private String name = "小明"; } 编写配置类: @Configuration @Impor ...
- Apache HTTPD 未知后缀解析漏洞
环境搭建 https://blog.csdn.net/qq_36374896/article/details/84102101 该环境版本: PHP 7.x 最新版 Apache HTTPD 2.4. ...
- CF1500D Tiles for Bathroom (递推+大讨论)
题目大意:给你一个n*n的矩阵,现在问对于每个k\le n,求出所有k*k的子矩阵中,元素种类数不超过q的矩阵个数,n\le 1500, q\le 10 先考虑最暴力的做法: 对于每个格子,求出以它为 ...
- 【vue】中英文切换(使用 vue-i18n )
一.准备工作 1.vue-i18n 1.仓库地址 2.兼容性:支持 Vue.js 2.x 以上版本 1-1.安装依赖vue-i18n (c)npm install vue-i18n 1-2.使用 在 ...