Resumo dos comandos usados usados nesse artigo:
Comando | Descrição | Exemplo de Uso |
---|---|---|
lspci | Lista todos os dispositivos PCI presentes no sistema. | lspci -s 00:00.0 -v |
lsusb | Lista todos os dispositivos USB conectados ao sistema. | lsusb -v -d 1d6b:0002 |
lsmod | Lista todos os módulos do kernel atualmente carregados. | lsmod |
modprobe | Carrega um módulo do kernel ou remove um módulo carregado. | Carregar um módulo: modprobe <módulo> |
Remover um módulo: modprobe -r <módulo> | ||
modinfo | Mostra informações sobre um módulo específico do kernel. | modinfo <módulo> |
Bios UEFI
Ao ligarmos o computador temos o Firmware que é um tipo de software que vem pré-instalado e controla suas funções básicas. o Firmware está presente não somente em computadores, mas em milhares de outros dispositivos, como calculadora.
Firmware é uma Software embutido. Ele controla as operações mais fundamentais do aparelho, como inicialização, comunicação com outros dispositivos e gerenciamento de hardware.
Em computadores há utilitários de configuração para alterar as opções do firmware. O utilitário de configuração do sistema em computadores aparece quando pressionamos uma tecla específica ao ligar o computador. Essa tecla varia de fabricante para fabricante, mas geralmente é Del ou uma das teclas de função, como F2 ou F12 . A combinação de teclas a ser usada é frequentemente é exibida na tela inicial.
Podemos citar como utilitários de configuração:
- BIOS (Basic Input/Output System): é mais antigo e vem sendo substituído pelo UEFI.
- UEFI (Unified Extensible Firmware Interface)
Quando um hardware(peça) está com problema, ela não será detectada na BIOS(ou UEFI).
Mas, quando detectada na BIOS e não funciona adequadamente após iniciado o Sistema Linux, então o problema poderá ser configuração ou alguma porta de conexão física, de encaixe ou cabos.
Usar comandos para inspecionar os hardwares no Linux é importante.
Comandos para inspeção de hardware no Linux
Há dois comandos importantes: lspci e lsusb
- lspci: Mostra todos os dispositivos atualmente conectados ao barramento PCI (Peripheral Component Interconnect). Os dispositivos PCI podem ser um componente conectado à placa-mãe, como um controlador de disco, ou uma placa de expansão instalada em um slot PCI, como uma placa de vídeo externa.
- lsusb: Lista os dispositivos USB (Universal Serial Bus) atualmente conectados à máquina. Embora existam dispositivos USB para praticamente qualquer finalidade imaginável, a interface USB é amplamente usada para conectar dispositivos de entrada — teclados, dispositivos, mouses e mídias de armazenamento removíveis.
Módulos do Kernel Linux
Cada hardware(peça física) pode não ser totalmente identificado pelo PC. Uma das causas é a falta de um programa que chamamos de módulo; também são chamados de drivers em outros sistemas operacionais, como o Windows. Esse módulo pode fazer parte do kernel oficial do Linux ou ser adicionado separadamente.
Comandos para detalhes de dispositivos e seus módulos no kernel
Podemos usar lspci ou lsusb com sudo. Se não usar sudo juntamente com esses comandos o resultado poderá ser limitado.
LSPCI
elder@debian12:~$ sudo 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 82371AB/EB/MB PIIX4 IDE (rev 01) 00:02.0 VGA compatible controller: VMware SVGA II Adapter 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) 00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service 00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01) 00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB 00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) 00:08.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) 00:0b.0 USB controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller 00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)
O número decimal em cada linha é o endereço exclusivo do dispositivo PCI correspondente.
O comando lspci pode exibir mais detalhes sobre um dispositivo específico se seu endereço for fornecido com a opção -s acompanhado com -v. Abaixo, uso o identificador 00:02.0 do dispositivo:
elder@debian12:~$ sudo lspci -s 00:02.0 -v 00:02.0 VGA compatible controller: VMware SVGA II Adapter (prog-if 00 [VGA controller]) Subsystem: VMware SVGA II Adapter Flags: bus master, fast devsel, latency 64, IRQ 18 I/O ports at d010 [size=16] Memory at e0000000 (32-bit, prefetchable) [size=16M] Memory at f0000000 (32-bit, non-prefetchable) [size=2M] Expansion ROM at 000c0000 [virtual] [disabled] [size=128K] Kernel driver in use: vmwgfx Kernel modules: vmwgfx
Pode ser muito útil para fins de diagnóstico.
O módulo do kernel usado nesse dispositivo pode ser encontrado em “Kernel driver in use:” que nesse caso é vmwgfx.
Com o resultado acima sabemos que:
- O dispositivo foi identificado
- Um módulo do kernel correspondente foi carregado.
- O dispositivo deve estar pronto para uso.
LSUSB
O comando lsusb é semelhante a lspci, mas lista exclusivamente as informações relativas à USB. Todos os dispositivos conectados em portas USBs serão listados.
elder@debian12:~$ sudo lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Podemos pegar o número do Bus mais o do Device e usar a opção -s para sabermos qual dispositivo está usando o módulo. Exemplo, pegarei o Bus 001 mais seu respectivo Device 001,
elder@debian12:~$ sudo lsusb -s 001:001 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
a opção -v exibe uma saída mais detalhada. Irei resumir o resultado abaixo, pois são printadas na tela uma quantidade enorme de informações ao usarmos -v
elder@debian12:~$ sudo lsusb -v Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 9 Hub bDeviceSubClass 0 bDeviceProtocol 0 Full speed (or root) hub bMaxPacketSize0 64 idVendor 0x1d6b Linux Foundation idProduct 0x0002 2.0 root hub bcdDevice 6.01 iManufacturer 3 Linux 6.1.0-20-amd64 ehci_hcd iProduct 2 EHCI Host Controller iSerial 1 0000:00:0b.0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x0019 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xe0 Self Powered
Podemos usar -d para selecionado um dispositivo específico. Basta fornecer o ID com a opção -d:
elder@debian12:~$ sudo lsusb -v -d 1d6b:0002 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 9 Hub bDeviceSubClass 0 bDeviceProtocol 0 Full speed (or root) hub bMaxPacketSize0 64 idVendor 0x1d6b Linux Foundation idProduct 0x0002 2.0 root hub
Podemos usar -t para mostrar o resultado em formato de árvore:
elder@debian12:~$ sudo lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/12p, 12M |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/12p, 480M
Nem todo dispositivo USB possui um módulo/driver, mas quando há podemos ver o módulo listado após a palavra “Driver” acima, como em Driver=ohci-pci
O dispositivo Class identifica a categoria geral, como Wireless ou Mass Storage.
LSMOD, MODINFO, MODPROBE
Esses comandos são fornecidos pelo pacote kmod e servem como ferramentas para realizar tarefas comuns com os módulos, como inserir, remover, listar, verificar propriedades, resolver dependências e aliases.
- lsmod mostra todos os módulos carregados no momento. Ao rodar lsmod obtmos informções do respectivo módulo,
- Size: quantidade de memória.
- Used by: módulos que dependem desse módulo
elder@debian12:~$ sudo lsmod Module Size Used by tls 135168 0 ghash_clmulni_intel 16384 0 sha512_ssse3 49152 0 sha512_generic 16384 1 sha512_ssse3 sha256_ssse3 32768 0 sha1_ssse3 32768 0 binfmt_misc 24576 1 vmwgfx 380928 1 snd_intel8x0 49152 0 snd_ac97_codec 176128 1 snd_intel8x0 drm_ttm_helper 16384 1 vmwgfx ac97_bus 16384 1 snd_ac97_codec snd_pcm 159744 2 snd_intel8x0,snd_ac97_codec ttm 94208 2 vmwgfx,drm_ttm_helper aesni_intel 393216 0 snd_timer 49152 1 snd_pcm
Acima, o dispositivo de som(sound ou apenas snd) tem módulos que dependetem dele, como snd_pcm 159744 2 snd_intel8x0,snd_ac97_codec
- modprobe: O comando modprobe pode ser usado para carregar(ligar) e descarregar(desligar) módulos do kernel
- modprobe nome_modulo carrega um módulo no kernel
- modprobe -r nome_modulo descarrega um módulo do kernel, desde que esse não esteja em uso
elder@debian12:~$ sudo modprobe -r ac
elder@debian12:~$ sudo modprobe ac
- modinfo mostra uma descrição, o arquivo, o autor, a licença, a identificação, as dependências e os parâmetros disponíveis para o módulo consultado
- modinfo -p faz exibir todos os parâmetros disponíveis e ignore as outras informações:
elder@debian12:~$ sudo modinfo ac filename: /lib/modules/6.1.0-20-amd64/kernel/drivers/acpi/ac.ko license: GPL description: ACPI AC Adapter Driver author: Paul Diefenbaugh alias: acpi*:ACPI0003:* depends: retpoline: Y intree: Y name: ac vermagic: 6.1.0-20-amd64 SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Debian Secure Boot CA sig_key: 32:A0:28:7F:84:1A:03:6F:A3:93:C1:E0:65:C4:3A:E6:B2:42:26:43 sig_hashalgo: sha256 signature: 25:A5:30:89:0D:F8:A4:A7:05:EB:E4:D2:C3:D1:BF:AE:D8:A8:5B:6A: 0F:32:82:1C:B0:79:C4:2B:82:6D:E9:F1:7A:A8:11:C4:30:EA:EB:AA: C3:28:24:60:52:06:3F:81:D7:F4:5B:A0:1E:BE:A3:5F:21:7E:CB:9C: 19:3A:82:CB:F3:49:95:D0:0A:35:3B:D4:CF:79:5D:02:32:36:DF:1A: A9:A6:60:C1:BE:64:1D:0F:05:4B:13:E7:82:81:16:D1:44:90:AE:24: 0C:43:FE:94:EC:71:38:77:B9:6F:EF:7B:75:5C:FB:D3:25:5F:67:30: 59:FB:D3:12:7F:95:26:6A:48:F9:69:E2:32:5F:84:D8:E2:94:B4:C8: EF:EF:9A:AF:52:71:07:33:56:21:2C:3D:F8:CD:77:4E:99:48:60:75: 5E:51:D8:F8:20:B8:B0:B8:46:02:93:59:02:E2:48:39:4F:BB:E9:87: EA:9D:9A:5E:5C:CD:C4:FA:AC:70:B0:CA:74:33:3F:8F:BA:E5:4E:96: CF:EE:FE:D8:53:12:9F:9D:33:52:AF:A8:97:69:39:AC:0E:AE:33:A2: FD:80:1A:D8:EB:CF:FF:1D:A1:AB:57:2C:76:55:51:57:57:CA:E0:D2: ED:56:ED:E9:0B:DC:AA:90:31:41:AE:6A:63:FF:A4:D5
elder@debian12:~$ sudo modinfo -p snd max_user_ctl_alloc_size:Max allocation size for user controls (int) slots:Module names assigned to the slots. (array of charp) major:Major # for sound driver. (int) cards_limit:Count of auto-loadable soundcards. (int)
Acima são exibidos parâmetros que podem alterar o módulo/driver de som(snd)
Arquivos de informação e de dispositivo
Os comandos lsmod, lspci e lsusb leem as informações de arquivos armazenados dentro dos diretórios /proc e /sys. Esses comandos servem apenas como front-ends.
- proc pasta com arquivos de informações sobre processos em execução e recursos de hardware
- /proc/cpuinfo Lista informações detalhadas sobre a(s) CPU(s) encontradas pelo sistema operacional. Aqui estamos falando de detalhes do processador.
- /proc/interrupts Uma lista de números de interrupções por dispositivo de entrada e saída em cada CPU.
- /proc/ioports Lista as regiões de portas de Entrada/Saída registradas atualmente e em uso.
- /proc/dma Lista os canais registrados de DMA (acesso direto à memória) em uso.
- sys armazenar informações do dispositivo e dados do kernel relacionados ao hardware
- dev cada arquivo dentro desse diretório está associado a um dispositivos de armazenamento.
udev é o sistema que manipula dispositivos removíveis, cria os dispositivos correspondentes em /dev. O kernel do Linux captura o evento de detecção de hardware e o passa para o processo udev que por sua vez identifica o dispositivo e cria dinamicamente os arquivos correspondentes em /dev, usando regras predefinidas.
Em sistemas mais atuais, udev é responsável tanto pelos dispositivos já conectados(coldplug) durante a inicialização do sistema quanto pelos que inserimos(hotplug) com o sistema ligado.
/etc/udev/rules.d/ é usado pelo udev para pesquisa de regra correspondente aos novos dispositivos são detectados.
Dispositivos de armazenamento
Se acostume com o termo dispositivo de bloco, pois é assim que são chamados os dispositivos de armazenamentos no LInux. Esse termo é usado porque os dados que contêm são lidos em blocos de dados armazenados em buffer com diferentes tamanhos e posições.
A identificação de cada bloco depende do do tipo de dispositivo:
Tipo de Dispositivo | Nome do Dispositivo de Bloco | Notação |
---|---|---|
IDE (Integrated Drive Electronics) | /dev/hda , /dev/hdb , /dev/hdc , etc. | hdX (onde X é uma letra a, b, c, etc.) |
SATA (Serial ATA) | /dev/sda , /dev/sdb , /dev/sdc , etc. | sdX (onde X é uma letra a, b, c, etc.) |
SCSI (Small Computer System Interface) | /dev/sda , /dev/sdb , /dev/sdc , etc. | sdX (onde X é uma letra a, b, c, etc.) |
USB (Universal Serial Bus) Drives | /dev/sda , /dev/sdb , /dev/sdc , etc. | sdX (onde X é uma letra a, b, c, etc.) |
NVMe (Non-Volatile Memory Express) | /dev/nvme0n1 , /dev/nvme0n2 , etc. | nvme0nX (onde X é um número) |
MMC (MultiMediaCard) | /dev/mmcblk0 , /dev/mmcblk1 , etc. | mmcblkX (onde X é um número) |
RAID (Redundant Array of Independent Disks) | /dev/md0 , /dev/md1 , etc. | mdX (onde X é um número) |
A partir da versão 2.4 do kernel Linux em diante, a maioria dos dispositivos de armazenamento passou a ser identificada como dispositivos SCSI, independentemente do tipo de hardware, ou seja, os dispositivos de bloco IDE, SSD e USB são prefixados com sd.
Podemos ver uma diferença na identificação de cartões de memória (cartões SD) e dispositivos NVMe (SSD conectados ao barramento PCI Express). Para os cartões SD, os caminhos /dev/mmcblk0p1, /dev/mmcblk0p2. Os dispositivos NVMe recebem o prefixo nvme, como em /dev/nvme0n1p1 e /dev/nvme0n1p2.
Comment on “Linux LPI 101.1: Identificar e editar configurações de hardware”