What is lspci in linux

What is lspci in linux

Команда lspci позволяет задействовать одноименную утилиту, предназначенную для вывода информации о PCI-шинах и подключенных к ним устройствах. Она поддерживает все разновидности PCI-шин: классическую шину PCI (Peripheral Component Interconnect), ее серверный вариант PCI-X и ее современный вариант PCIe (PCI-Express). Обычно к данной шине подключаются такие устройства, как графические, звуковые и сетевые карты, Wi-Fi и Bluetooth-адаптеры, SSD-накопители, а также множество других устройств. Она реализована как в настольных компьютерах, так и в ноутбуках и некоторых встраиваемых системах. Каждое из устройств имеет пару 16-битных идентификаторов: идентификатор производителя (Vendor ID) и идентификатор устройства (Device ID), которые следует использовать для идентификации устройств и поиска драйверов в случае их отсутствия в ядре ОС, а также несколько дополнительных идентификаторов, устанавливаемых производителем. В составе дистрибутивов Linux имеется файл базы данных устройств, содержащий названия устройств с известными идентификаторами. Данная команда крайне полезна для идентификации и диагностики устройств компьютера. Она выводит результаты в формате списка, который может фильтроваться с помощью утилиты grep.

Базовый синтаксис команды выглядит следующим образом:

Утилита может вызываться как без параметров, так и с ними. Наиболее полезными параметрами являются параметры -m и -mm, предназначенные для вывода установленных производителем идентификаторов устройств, параметр -t, предназначенный для вывода информации в древовидном формате, параметр -v для вывода подробной информации об устройствах, параметр -n для вывода идентификаторов устройств, а также параметры -s и -d для вывода информации об устройствах в заданных слотах и с заданными идентификаторами соотвественно.

Примеры использования

Вывод списка PCI-устройств

Для вывода списка PCI-устройств достаточно использовать утилиту без каких-либо параметров. Прав суперпользователя для ее работы не требуется.

$ lspci
00:00.0 Host bridge: Intel Corporation 4 Series Chipset DRAM Controller (rev 03)
00:01.0 PCI bridge: Intel Corporation 4 Series Chipset PCI Express Root Port (rev 03)
00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 2 (rev 01)
00:1c.2 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 3 (rev 01)
00:1d.0 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #1 (rev 01)
00:1d.1 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #2 (rev 01)
00:1d.2 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #3 (rev 01)
00:1d.3 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #4 (rev 01)
00:1d.7 USB controller: Intel Corporation NM10/ICH7 Family USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
00:1f.3 SMBus: Intel Corporation NM10/ICH7 Family SMBus Controller (rev 01)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Oland [Radeon HD 8570 / R7 240/340 / Radeon 520 OEM]
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]
03:00.0 Ethernet controller: Qualcomm Atheros AR8131 Gigabit Ethernet (rev c0)
05:00.0 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 61)
05:00.1 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 61)
05:00.2 USB controller: VIA Technologies, Inc. USB 2.0 (rev 63)
05:01.0 Multimedia video controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
05:01.2 Multimedia controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05)

Читайте также:  Remove linux with windows

Вывод достаточно объемный, но имеет строго регламентированную структуру. По сути, параметры устройств разделены пробелами. Возьмем последнюю строку в качестве примера:

  • PCI-слот: 05:01.0
  • Класс устройства: Multimedia controller
  • Производитель: Conexant Systems, Inc.
  • Название устройства: CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port]
  • Ревизия устройства: rev 05

Несложно убедиться, что все строки имеют схожий формат. При этом в списке отражена информация как о вставленных в PCI-слоты, так и встроенных в материнскую плату устройствах.

Вывод подробной информации о PCI-устройствах

Для того, чтобы вывести подробную информацию о PCI-устройствах, следует использовать комбинацию параметров -v и -mm:

$ lspci -v -mm

Slot: 01:00.0
Class: VGA compatible controller
Vendor: Advanced Micro Devices, Inc. [AMD/ATI]
Device: Oland [Radeon HD 8570 / R7 240/340 / Radeon 520 OEM]
SVendor: Bitland(ShenZhen) Information Technology Co., Ltd.
SDevice: Oland [Radeon HD 8570 / R7 240/340 / Radeon 520 OEM]

Slot: 01:00.1
Class: Audio device
Vendor: Advanced Micro Devices, Inc. [AMD/ATI]
Device: Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]
SVendor: Bitland(ShenZhen) Information Technology Co., Ltd.
SDevice: Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]

Slot: 05:01.0
Class: Multimedia video controller
Vendor: Conexant Systems, Inc.
Device: CX23880/1/2/3 PCI Video and Audio Decoder
SVendor: Unknown vendor 8920
SDevice: CX23880/1/2/3 PCI Video and Audio Decoder
Rev: 05

Slot: 05:01.2
Class: Multimedia controller
Vendor: Conexant Systems, Inc.
Device: CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port]
SVendor: Unknown vendor 8920
SDevice: CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port]
Rev: 05

Вывод сокращен, но несложно заметить, что дополнительно выводится информация об идентификаторах устройства, заданных непосредственным производителем.

Вывод числовых идентификаторов PCI-устройств

Для вывода числовых идентификаторов PCI-устройств предназначен параметр -n.

$ lspci -n
00:00.0 0600: 8086:2e30 (rev 03)
00:01.0 0604: 8086:2e31 (rev 03)
00:1b.0 0403: 8086:27d8 (rev 01)
00:1c.0 0604: 8086:27d0 (rev 01)
00:1c.1 0604: 8086:27d2 (rev 01)
00:1c.2 0604: 8086:27d4 (rev 01)
00:1d.0 0c03: 8086:27c8 (rev 01)
00:1d.1 0c03: 8086:27c9 (rev 01)
00:1d.2 0c03: 8086:27ca (rev 01)
00:1d.3 0c03: 8086:27cb (rev 01)
00:1d.7 0c03: 8086:27cc (rev 01)
00:1e.0 0604: 8086:244e (rev e1)
00:1f.0 0601: 8086:27b8 (rev 01)
00:1f.1 0101: 8086:27df (rev 01)
00:1f.2 0101: 8086:27c0 (rev 01)
00:1f.3 0c05: 8086:27da (rev 01)
01:00.0 0300: 1002:6611
01:00.1 0403: 1002:aab0
03:00.0 0200: 1969:1063 (rev c0)
05:00.0 0c03: 1106:3038 (rev 61)
05:00.1 0c03: 1106:3038 (rev 61)
05:00.2 0c03: 1106:3104 (rev 63)
05:01.0 0400: 14f1:8800 (rev 05)
05:01.2 0480: 14f1:8802 (rev 05)

Читайте также:  Skip grant tables linux

Едва ли данный режим работы утилиты понадобится большинству пользователей.

Вывод информации о заданных PCI-слотах и устройствах

Для того, чтобы вывести информацию о заданном PCI-слоте и устройствах в нем достаточно использовать параметр -s и передать утилите идентификатор интересующего слота:

$ lspci -s 05:01
05:01.0 Multimedia video controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
05:01.2 Multimedia controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05)

Что касается информации об устройствах, то совместно с параметром -d может использоваться как идентификатор производителя:

$ lspci -d 14f1:
05:01.0 Multimedia video controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
05:01.2 Multimedia controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05)

Так и идентификатор устройства:

$ lspci -d :8800
05:01.0 Multimedia video controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)

Не стоит забывать о двоеточии, которое указывает на используемый идентификатор: идентификатор производителя должен иметь двоеточие в конце, идентификатор устройства — в начале.

Источник

About lspci Command on Linux

lspci command is a utility on linux systems used to find out information about the PCI busses and devices connected to the PCI subsystem. You can understand the meaning of the command by considering the word lspci in two parts. The first part ls, is the standard utility used on linux for listing information about the files in the filesystem. Pci is the second part of the command, so you can see naturally the command lspci will list information about PCI subsystem the same way that ls will list information about the file system.

In this article we will explain the basics of PCI, PCIe and the lspci command to display information on your system.

What is PCI?

PCI, or Peripheral Component Interconnect is an interface to add additional hardware components to a computer system. PCIe or PCI Express is the updated standard that is used today. For example let’s say you want to add a Ethernet card to your computer so that it can access the internet and exchange data. Well the card needs a protocol to communicate with the rest of the internal system, PCI can be the standard interface used to add this card to your system. You still need a driver for this card in order for the kernel to use it, however PCI is the slot, and bus and interface that will be used to add the hardware into the system with a standard interface. Creation of a PCI linux driver will follow some standard interfaces you can see documentation for creating a PCI linux driver here. You can see from the struct below the standard methods that must be implemented. Methods such as probe, remove, suspend, resume, etc.

struct pci_driver {
struct list_head node ;
const char * name ;
const struct pci_device_id * id_table ;
int ( * probe ) ( struct pci_dev * dev , const struct pci_device_id * id ) ;
void ( * remove ) ( struct pci_dev * dev ) ;
int ( * suspend ) ( struct pci_dev * dev , pm_message_t state ) ;
int ( * resume ) ( struct pci_dev * dev ) ;
void ( * shutdown ) ( struct pci_dev * dev ) ;
int ( * sriov_configure ) ( struct pci_dev * dev , int num_vfs ) ;
const struct pci_error_handlers * err_handler ;
const struct attribute_group ** groups ;
struct device_driver driver ;
struct pci_dynids dynids ;
} ;

Читайте также:  Linux mint julia 10

PCI Speeds and Uses

PCI 3.0 can run data up to 1GB/Sec per lane. Different devices can have more than one lane, so it’s possible that individual devices can have multi-gigabytes of data transfer rate. These numbers are always improving as new versions of the specification come out and new hardware comes out, so always check for the latest and fastest you can find. Types of components and gadgets that you can buy that plug into a PCI interface include: WIFI adapters, Bluetooth, NVME Solid State Storage cards, Graphics cards and more.

Exploring the lspci Command

I have created a Ubuntu 19.04 instance on Google cloud and will now run the lspci command and see what happens.

What you see is one line per device with a numerical code and a verbal description of the device. There are actually 5 fields displayed in this output per line: Slot, Class, Vendor, Device, and Revision.

So breaking down the first line what we have:

SLOT: 00:00.0
Class: Host bridge
Vendor: Intel Corporation
Device: 440FX – 82441FX PMC
Revision: 02

And looking at Slot 00:04.0 that is our Ethernet controller, which appears to be a virtual device as part of the virtual magic of Google’s cloud deployment.

To get more detailed, verbose information about each PCI slot, run the following command:

This command will break down each line into its component fields and allow you to analyze each device with more descriptive labels.

You can also try the -v option for more verbose output

And use double v or tripple v for verby verbose output:

Or try the -mm option for script readable output format.

In order to see which kernel driver is being used for each device run -k option.

Many of my devices are using virtio-pci driver.

Lastly you can even see a hexadecimal dump of “the standard part of the configuration space” for each PCI device. You should be a real kernel hacker to figure out how to use that information. -x option is what gives you the dump output.

Conclusion

The lspci command is a standard Linux command that can be used to list information about the PCI connected devices on your system. This can be useful to know what hardware peripherals you have. Its also super useful for developers, device driver creators, low level system folks to query information about the devices, the drivers and the system. Enjoy using lspci.

About the author

Linux Wolfman

Linux Wolfman is interested in Operating Systems, File Systems, Databases and Analytics and always watching for new technologies and trends. Reach me by tweeting to @linuxhint and ask for the Wolfman.

Источник

Оцените статью
Adblock
detector