Nesse tópico será necessário a habilidade de visualizar e configurar sistemas de hardware fundamentais. Isso pode ser feito de duas formas com comandos específicos e vendo arquivos no sistema de arquivos especial.

  • Feramentas e utilitários para listar diversas de informações de hardware (lsusb, lspci.)
  • Feramentas e utilitários para manipular dispositivos USB
  • Entendimento conceitual de sysfs, udev, dbus

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

  • Feramentas e utilitários para manipular dispositivos USB
  • Entendimento conceitual de sysfs, udev, dbus

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

  • Feramentas e utilitários para manipular dispositivos USB
  • Entendimento conceitual de sysfs, udev, dbus

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

  • Feramentas e utilitários para manipular dispositivos USB
  • Entendimento conceitual de sysfs, udev, dbus

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

  • Feramentas e utilitários para manipular dispositivos USB
  • Entendimento conceitual de sysfs, udev, dbus

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

  • Feramentas e utilitários para manipular dispositivos USB
  • Entendimento conceitual de sysfs, udev, dbus

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

  • Feramentas e utilitários para manipular dispositivos USB
  • Entendimento conceitual de sysfs, udev, dbus

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta

/sys/

Faz parte da partição virtual pois não guarda de fato arquivos e sim informações dinâmicas.Esse é um diretorio que é mais focado em guardar informações de dispositivos de hardware.

O /sys/ é montado utilizando um tipo de filesystem chamado de sysfs. O comando df exibe o sistema de arquivos sysfs:

df -t sysfs -a
Sist.fichs     1K-blocos  Ocup Livres Uso% Montado em
sysfs                  0     0      0    - /sys

Veja abaixo o conteúdo do diretório:

├── block
│   ├── loop0 -> ../devices/virtual/block/loop0
│   ├── loop1 -> ../devices/virtual/block/loop1
│   ├── loop2 -> ../devices/virtual/block/loop2
│   ├── loop3 -> ../devices/virtual/block/loop3
│   ├── loop4 -> ../devices/virtual/block/loop4
│   ├── loop5 -> ../devices/virtual/block/loop5
│   ├── loop6 -> ../devices/virtual/block/loop6
│   ├── loop7 -> ../devices/virtual/block/loop7
│   └── sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
├── bus
│   ├── acpi
│   ├── clockevents
│   ├── clocksource
│   ├── container
│   ├── cpu
│   ├── edac
│   ├── event_source
│   ├── gpio
│   ├── hdaudio

/proc/

Guarda informações sobre processos ativos no sistema e recursos de hardware. Nesse diretório ficam arquivos que são cobrados na LPI 101 como o /proc/interrups, /proc/dma, /proc/ioports e o /proc/modules. Esse diretório é montado utilizando um sistema de arquivos chamado procfs.

Até a versão 2.4 do kernel linux, o diretório /proc era a única forma de acessar detalhes do kernel e configurações do sistema. Entretanto, os desenvolvedores do kernel não gostavam do crescimento descontrolado de informações dentro do /proc, mais especificamente as informações que não tinham nada a ver com processos (o intuito original do diretório /proc). Por essa razão, os desenvolvedores do kernel decidiram mover a médio e longo prazo esses aspectos(informações) do /proc que não tinham nada a ver com gerenciamento de processos para um novo sistema de arquivo virtual, o sysfs.

Fonte: tuxcademy.org

Abaixo conteúdo do diretório:

├── acpi
├── asound
├── buddyinfo
├── bus
├── cgroups
├── cmdline
├── consoles
├── cpuinfo
├── crypto
├── devices
├── diskstats
├── dma
├── driver
├── execdomains
├── fb
├── filesystems
├── fs
├── interrupts
├── iomem
├── ioports
├── irq
├── kallsyms
├── kcore
├── keys
├── key-users
├── kmsg

/proc/ioports

Esse arquivo contém informações sobre endereços de memória utilizados pela CPU para se comunicar com dispositivos de hardware. Abaixo o conteúdo do arquivo /proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
00f0-00f0 : PNP0C04:00
02f8-02ff : serial
03f8-03ff : serial
0400-043f : pnp 00:02
0440-045f : pnp 00:02
0460-047f : pnp 00:02
0580-05ff : pnp 00:02
0580-0583 : ACPI PM1a_EVT_BLK
0584-0587 : ACPI PM1a_CNT_BLK
0588-058b : ACPI PM_TMR
05a0-05af : ACPI GPE0_BLK
05b0-05b3 : iTCO_wdt.0.auto
05b0-05b3 : iTCO_wdt
05d0-05d0 : ACPI PM2_CNT_BLK
05e0-05ff : iTCO_wdt.0.auto
05e0-05ff : pnp 00:02
05e0-05ff : iTCO_wdt

/proc/interrupts

IRQ, ou Interrups Requests, são canais de comunicação que são utilizados pelos dispositivos para enviar comandos para a CPU. Esses comandos ou sinais são enviados a CPU e ela tem que parar de fazer o que estiver fazendo a atender a essas requisições. Os canais de número menor tem maior prioridade que os demais.

Veja a tabela abaixo com informações básicas sobre o IRQ:

 IRQ 0  - Timmer do sistema (relógio)
 IRQ 1  - Teclado
 IRQ 2  - Cascateador de IRQ
 IRQ 3  - Portal Serial 2
 IRQ 4  - Portal Serial 1
 IRQ 5  - Livre
 IRQ 6  - Drive de Disquetes
 IRQ 7  - Porta Paralela
 IRQ 8  - Relogio da CMOS
 IRQ 9  - Placa de Video
 IRQ 10 - Livre
 IRQ 11 - Controlador USB
 IRQ 12 - Porta PS/2
 IRQ 13 - Coprocessador Aritmético
 IRQ 14 - IDE Primária
 IRQ 15 - IDE Secundária

Executando o comando cat /proc/interrups temos o output abaixo:

         CPU0       CPU1       CPU2       CPU3       
  0:         16          0          0          0  IR-IO-APIC   2-edge      timer
  1:          2       1543      15908       1133  IR-IO-APIC   1-edge      i8042
  7:          0          0          0          0  IR-IO-APIC   7-fasteoi   INT3432:00, INT3433:00
  8:          1          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:        104        115       1280         83  IR-IO-APIC   9-fasteoi   acpi
 12:         18       8604     177407      10087  IR-IO-APIC  12-edge      i8042
 40:          0          0          0          0  DMAR-MSI   0-edge      dmar0
 41:          0          0          0          0  DMAR-MSI   1-edge      dmar1
 42:        147        280      23940        358  IR-PCI-MSI 327680-edge      xhci_hcd
 43:       8302       2062      59673       2578  IR-PCI-MSI 512000-edge      ahci[0000:00:1f.2]
 44:          0          0          0          0  IR-PCI-MSI 1048576-edge      enp2s0
 45:        542         79     128084     144606  IR-PCI-MSI 32768-edge      i915
 46:          9          5          0          0  IR-PCI-MSI 360448-edge      mei_me
 47:        195      62775        136         33  IR-PCI-MSI 524288-edge      ath10k_pci
 48:        333        241         10         67  IR-PCI-MSI 442368-edge      snd_hda_intel:card1
 49:         60         66         55          2  IR-PCI-MSI 49152-edge      snd_hda_intel:card0
NMI:         79         93         91         88   Non-maskable interrupts
LOC:     220605     232216     218771     215687   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         79         93         91         88   Performance monitoring interrupts
IWI:          0          1          1          0   IRQ work interrupts
RTR:          1          0          0          0   APIC ICR read retries

Os números nas colunas CPUn exibe o número de vezes que uma requisição é enviada para aquele canal. Podemos fazer um teste e após realizar a digitação de algum texto no teclado e verificar que o número de requisições aumentou no canal 1.

cat /proc/interrupts | egrep "^  1:"
  1:        135       2448      27391       2109  IR-IO-APIC   1-edge      i8042

/proc/dma

DMA significa Direct Memory Access, ou seja, acesso direto a memória, esse arquivo contém endereços de mémoria utilizado pelo hardware na qual não precisam do intermédio da CPU para acessa-los. Isso permite uma comunicação mais dinâmica uma vez que um interédiario foi removido.

/proc/meninfo

Exibe informações de memória. É com as informações desse arquivo que o comando free trabalha.

/proc/cpuinfo

Exibe informações de processador

/proc/modules

Esse arquivo contem informações sobre os modulos utilizados pelo Linux. É esse arquivo que é lido pelo comando lsmod.

Abaixo iremos realizar um cat no arquivo /proc/modules

cat /proc/modules"
quota_v2 16384 2 - Live 0x0000000000000000
quota_tree 20480 1 quota_v2, Live 0x0000000000000000
parport_pc 32768 0 - Live 0x0000000000000000
ppdev 20480 0 - Live 0x0000000000000000
lp 20480 0 - Live 0x0000000000000000
parport 49152 3 parport_pc,ppdev,lp, Live 0x0000000000000000
autofs4 40960 2 - Live 0x0000000000000000
hid_generic 16384 0 - Live 0x0000000000000000
usbhid 49152 0 - Live 0x0000000000000000
hid 118784 2 hid_generic,usbhid, Live 0x0000000000000000
i915 1830912 85 - Live 0x0000000000000000
i2c_algo_bit 16384 1 i915, Live 0x0000000000000000
drm_kms_helper 167936 1 i915, Live 0x0000000

Podemos observar acima nomes de modulos carregados pelo sistema. Mas o comando lsmod disponibiliza essas mesmas informações de forma mais legível.

/dev/

Esse diretório faz referências a dispositivos do sistema inclusive de armazenamento.

udev

É o processo de nome udev que monta esses dispositivos que ficam exibidos nesse diretório.

dbus

Tem duas funções:

  • Realiza a comunicação entre processos
  • Informa aos processos a situação de dispositivos de hardware

lsmod

Lista os modulos que estão sendo utilizados pelo sistema. Existe uma coluna que informa se o módulo é utilizado por outros módulos e o número de utilizações.

  lsmod
Module                  Size  Used by
psmouse               139264  0
uas                    24576  0
usb_storage            69632  1 uas
rfcomm                 77824  14
ccm                    20480  2
pci_stub               16384  1
vboxpci                24576  0
bnep                   20480  2
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               471040  3 vboxnetadp,vboxnetflt,vboxpci
joydev                 20480  0
btusb                  45056  0
input_leds             16384  0
btrtl                  16384  1 btusb
dell_wmi               16384  0
i2c_designware_platform    16384  0
dell_wmi_aio           16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  2 dell_wmi,dell_wmi_aio
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0

lspci

Lista os dispositivos de hardware que estão no barramento PCI do computador.

  lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.3 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #4 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

No lado esquerdo do output vemos os IDS dos dispositivos e do lado direito uma breve descrição sobre os mesmo. Para ver mais detalhes sobre os dispositivos utilizamos a opção -v, para exibir as informações de forma verbosa usamos -vv, para exibir mais informações ainda com -vvv.

  lspci -v
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Host Bridge -OPI
        Flags: bus master, fast devsel, latency 0
        Capabilities:
        Kernel driver in use: bdw_uncore

00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: 
        Kernel driver in use: i915
        Kernel modules: i915

00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Audio Controller
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at f731c000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: 
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities:
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

Para ver mais informações apenas de um dispositivo específico utilizamos a opção -s seguido do ID do dispositivo (o s seria de seleção)

  lspci -s00:04.0 -v 
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Camarillo Device (rev 09)
        Subsystem: Samsung Electronics Co Ltd Broadwell-U Processor Thermal Subsystem
        Flags: fast devsel, IRQ 16
        Memory at f7310000 (64-bit, non-prefetchable) [size=32K]
        Capabilities: 
        Kernel driver in use: proc_thermal
        Kernel modules: processor_thermal_device

lsusb

Lista os dispositivos de hardware que estão no barramento USB do computador. Semelhante ao comando lspci esse comando com a opção -v exibe uma saída mais verbosa e também com a opção -s exibe as informações apenas de um dispositivo ** passando o número de BUS e DEVICE**

Listando todos os dispositivos no barramento USB:

  lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 2232:1063 Silicon Motion 
Bus 001 Device 003: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 002: ID 1ea7:0064  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando um dispositivo espefico, utilizando -s bus:device

lsusb -s001:002
Bus 001 Device 002: ID 1ea7:0064

Listagem verbosa dos dispositivos:

lsusb -v
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 Unused
      bDeviceProtocol         3 
      bMaxPacketSize0         9
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0003 3.0 root hub
      bcdDevice            4.13
      iManufacturer           3 
      iProduct                2 
      iSerial                 1 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           31
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower                0mA
        Interface Descriptor:
    Couldn't open device, some information will be missing
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass         9 Hub
    Couldn't open device, some information will be missing

É importante frizar que os módulos estão localizados no diretório /lib/modules/.

##modinfo

Segundo man o comando modinfo tem a seguinte descrição:

Exibir informação sobre modulos do Kernel do Linux

Sendo assim o modinfo exibe informações detalhadas a respeito de um módulo

Abaixo vamos utilizar o modinfo para exibir informações a respeito do módulo

  modinfo joydev
filename:       /lib/modules/4.13.0-41-generic/kernel/drivers/input/joydev.ko
license:        GPL
description:    Joystick device interfaces
author:         Vojtech Pavlik <vojtech@ucw.cz>
srcversion:     E0E4A2F5EAE529EF007ECC6
alias:          input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*
alias:          input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*
depends:        
intree:         Y
name:           joydev
vermagic:       4.13.0-41-generic SMP mod_unload 

Podemos ainda pegar informação apenas de um campo especifico desse modulo utilizando o parâmetro -F

modinfo -F license joydev
GPL

##rmmod

Comando utilizado para remover um módulo. Ignorando as dependencias.

  sudo rmmod psmouse

Se executarmos o lsmod veremos que o psmouse não pararece mais na listagem:

  lsmod | grep psmouse

##insmod

Comando para instalar o modulo, ignorando as dependências. Observe que para remover um módulo com rmmod passamos como parâmetro apenas o nome do módulo, já com o insmod passamos o caminho para o arquivo.

  sudo insmod /lib/modules/4.10.0-38-generic/kernel/drivers/input/mouse/psmouse.ko

modprobe

Carrega um módulo no sistema. Com o parâmetro -r ele remove um modulo. O diferencial desse comando e que ele carrega ou descarrega automaticamente as dependêcias do módulo definido no comando. E nele você passa tanto para remover quanto para carregar apenas o nome do modulo não o arquivo.

Com o parametro -s qualquer tipo de erro ao adicionar ou remover um modulo é enviado para o syslog (gerenciador de logs do Linux).

Identificar e Configurar o Hardware

IDE

falta

PATA

falta

SATA

falta

SCSI

falta