Neste artigo, explicaremos os fundamentos do PCI, PCIe e o comando lspci para exibir informações em seu sistema.
O que é PCI?
PCI, ou Peripheral Component Interconnect, é uma interface para adicionar componentes de hardware adicionais a um sistema de computador. PCIe ou PCI Express é o padrão atualizado que é usado hoje. Por exemplo, digamos que você deseja adicionar uma placa Ethernet ao seu computador para que ele possa acessar a internet e trocar dados. Bem, a placa precisa de um protocolo para se comunicar com o resto do sistema interno, PCI pode ser a interface padrão usada para adicionar esta placa ao seu sistema. Você ainda precisa de um driver para esta placa para que o kernel a use, no entanto PCI é o slot, o barramento e a interface que serão usados para adicionar o hardware ao sistema com uma interface padrão. A criação de um driver linux PCI seguirá algumas interfaces padrão, você pode ver a documentação para a criação de um Driver linux PCI aqui. Você pode ver na estrutura abaixo os métodos padrão que devem ser implementados. Métodos como sonda, remover, suspender, retomar, etc.
struct pci_drivernó struct list_head;
const char * name;
const struct pci_device_id * id_table;
int (* teste) (struct pci_dev * dev, const struct pci_device_id * id);
void (* remover) (struct pci_dev * dev);
int (* suspender) (struct pci_dev * dev, pm_message_t state);
int (* currículo) (struct pci_dev * dev);
void (* desligamento) (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 ** grupos;
driver struct device_driver;
struct pci_dynids dynids;
;
Usos e velocidades PCI
PCI 3.0 pode executar dados até 1 GB / segundo por pista. Dispositivos diferentes podem ter mais de uma pista, então é possível que dispositivos individuais possam ter vários gigabytes de taxa de transferência de dados. Esses números estão sempre melhorando à medida que novas versões das especificações são lançadas e novos hardwares são lançados, portanto, verifique sempre as versões mais recentes e mais rápidas. Os tipos de componentes e dispositivos que você pode comprar e que se conectam a uma interface PCI incluem: adaptadores WIFI, Bluetooth, placas de armazenamento de estado sólido NVME, placas gráficas e muito mais.
Explorando o Comando lspci
Eu criei um Ubuntu 19.04 instância na nuvem do Google e agora irá executar o lspci comandar e ver o que acontece.
O que você vê é uma linha por dispositivo com um código numérico e uma descrição verbal do dispositivo. Na verdade, existem 5 campos exibidos nesta saída por linha: Slot, Classe, Fornecedor, Dispositivo e Revisão.
Então, quebrando a primeira linha o que temos:
SLOT: 00:00.0
Aula: Ponte hospedeira
Fornecedor: Intel Corporation
Dispositivo: 440FX - 82441FX PMC
Revisão: 02
E olhando para o Slot 00:04.0 que é o nosso controlador Ethernet, que parece ser um dispositivo virtual como parte da magia virtual da implantação da nuvem do Google.
Para obter informações mais detalhadas e detalhadas sobre cada slot PCI, execute o seguinte comando:
# lspci -vmm
Este comando dividirá cada linha em seus campos de componentes e permitirá que você analise cada dispositivo com rótulos mais descritivos.
Você também pode tentar a opção -v para uma saída mais detalhada
# lspci -v
E use v duplo ou v triplo para saída verbosa verby:
# lspci -vvv
Ou tente a opção -mm para formato de saída legível por script.
# lspci -mm
Para ver qual driver do kernel está sendo usado para cada dispositivo, execute a opção -k.
Muitos dos meus dispositivos estão usando o driver virtio-pci.
Por último, você pode até ver um despejo hexadecimal da "parte padrão do espaço de configuração" para cada dispositivo PCI. Você deve ser um verdadeiro hacker do kernel para descobrir como usar essa informação. -A opção x é o que lhe dá a saída de despejo.
# lspci -x
Conclusão
O comando lspci é um comando padrão do Linux que pode ser usado para listar informações sobre os dispositivos PCI conectados em seu sistema. Isso pode ser útil para saber quais periféricos de hardware você tem. Também é muito útil para desenvolvedores, criadores de driver de dispositivo, pessoal de sistema de baixo nível para consultar informações sobre os dispositivos, os drivers e o sistema. Aproveite o lspci.