201.3 Kernel em Tempo Real
Vamos ver comandos para conseguir informações sobre o Kernel que está em execução em uma máquina e os módulos do Kernel. Vamos ver como funciona o Udev e alguns comandos para trabalhar com o Hardware.
Uname
Veja sobre o uname
aqui.
Todas as informações mostradas pelo comando uname
são coletadas do /proc
, por exemplo, veja abaixo:
# Mostrando alguns arquivos que o 'uname' usa:
$ cat /proc/version
Linux version 5.14.8-001-maddogs (root@lpic2) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #2 SMP Mon Oct 11 17:37:40 UTC 2021
Sysctl
O comando sysctl
é usado para configurar parâmetros do Kernel em tempo real, tudo que for alterado só funcionará até o próximo reboot.
Vamos ver um pouco da sintaxe desse comando.
Existe um arquivo que determina qual a quantidade máxima de arquivos abertos que o sistema consegue lidar, ele fica localizado em /proc/sys/fs/file-max
.
# Listando conteúdo de '/proc/sys/fs/file-max':
$ cat /proc/sys/fs/file-max
9223372036854775807
Uma outra forma de ver isso é usando o comando sysctl
. Coloque em mente que esse comando só trabalha após o diretório /proc/sys/
, então para listar qualquer coisa dentro de algum diretório, devemos informar o diretório e o arquivo, ficando dir.file
ou dir1.dir2.file
e por ai vai, vejamos abaixo:
# Listando o conteúdo de '/proc/sys/fs/file-max':
$ sysctl fs.file-max
fs.file-max = 9223372036854775807
# Listando o conteúdo de '/proc/sys/fs/quota/drops':
$ sysctl fs.quota.drops
fs.quota.drops = 0
Opção | Descrição |
---|---|
-a | Mostra todos os parâmetros disponível em /proc/sys |
-w (file) | Altera um valor em tempo real. |
Agora vamos ver como alterar esses valores:
# Alterando o valor usando o 'echo':
\# echo "1000000000000000000" > /proc/sys/fs/file-max
# Usando o 'sysctl':
$ sudo sysctl -w fs.file-max=1000000000000000000
Para que isso não se perca ao reiniciar a máquina, podemos recompilar o Kernel informando os novos parâmetros (que seria muito complicado) ou podemos adicionar os parâmetros num arquivo, podemos usar o arquivo /etc/sysctl.conf
ou criando algum arquivo dentro de /etc/sysctl.d/
, ficando assim o conteúdo:
fs.file-max=1000000000000000000
Relembrando alguns comandos
Para relembrar esses comandos, veja abaixo:
LSDEV
Usado para ver informações do Hardware que está instalado. É necessário instalar o pacote procinfo
.
$ sudo lsdev
Device DMA IRQ I/O Ports
------------------------------------------------
0000:00:01.1 0170-0177 01f0-01f7 0376-0376 03f6-03f6 c100-c10f
0000:00:01.2 c0c0-c0df
0000:00:01.3 0600-063f 0700-070f
0000:00:03.0 c000-c07f
0000:00:04.0 c080-c0bf
0000:00:05.0 c0e0-c0ff
ACPI 0600-0603 0604-0605 0608-060b afe0-afe3
acpi 9
ata_piix 14 15 0170-0177 01f0-01f7 0376-0376 03f6-03f6 c100-c10f
cascade 4
dma 0080-008f
dma1 0000-001f
dma2 00c0-00df
fpu 00f0-00ff
fw_cfg_io 0510-051b
i8042 1 12
keyboard 0060-0060 0064-0064
PCI 0000-0cf7 0cf8-0cff 0d00-ffff
pic1 0020-0021
pic2 00a0-00a1
piix4_smbus 0700-0708
QEMU0002:00 0510-051b
rtc0 8 0070-0071
serial 03f8-03ff
timer 0
timer0 0040-0043
timer1 0050-0053
uhci_hcd c0c0-c0df
uhci_hcd:usb1 11
virtio0-config 24
virtio0-req.0 25
virtio2-config 26
virtio2-input.0 27
virtio2-output.0 28
Módulos
Para relembrar consulte aqui.
Relembre também o uso do depmod.
Com o modprobe
nós podemos configurar parâmetros no momento em que vamos subir um módulo, como se fosse parâmetros de um script.
# Desative o módulo 'r8169':
$ sudo moprobe -r r8169
# Ative o módulo 'r8169' com o parâmetro de 'debug' igual a 15:
$ sudo modprobe r8169 debug=15
Antigamente a configuração de parâmetros de módulos era feita no arquivo /etc/modules.conf
.
Esse método de configurar os parâmetros dos módulos foi atualizado, agora é feito no arquivo /etc/modprobe.d/
.
# Listando o conteúdo de '/etc/modprobe.d/':
$ sudo ls -l /etc/modprobe.d/
total 48
-rw-r--r-- 1 root root 154 Feb 16 2020 amd64-microcode-blacklist.conf
-rw-r--r-- 1 root root 325 Mar 12 2020 blacklist-ath_pci.conf
-rw-r--r-- 1 root root 1518 Mar 12 2020 blacklist.conf
-rw-r--r-- 1 root root 210 Mar 12 2020 blacklist-firewire.conf
-rw-r--r-- 1 root root 677 Mar 12 2020 blacklist-framebuffer.conf
-rw-r--r-- 1 root root 583 Mar 12 2020 blacklist-rare-network.conf
-rw-r--r-- 1 root root 127 Jan 22 2020 dkms.conf
-rw-r--r-- 1 root root 17 Mar 9 2021 floppy.conf
-rw-r--r-- 1 root root 154 Jun 10 2020 intel-microcode-blacklist.conf
-rw-r--r-- 1 root root 347 Mar 12 2020 iwlwifi.conf
-rw-r--r-- 1 root root 87 Mar 9 2021 local.conf
-rw-r--r-- 1 root root 379 Jan 23 2020 mdadm.conf
# Vamos ver o conteúdo de 'local.conf':
$ sudo cat /etc/modprobe.d/local.conf
# Local module settings
# Created by the Debian installer
options ipv6 disable_ipv6=1
Perceba que acima ele usa
option module-name parameters
, para configurar parâmetros aqui, devemos usar a cláusula option.
Para a prova é bom relembrar que nós podemos colocar módulos para que iniciem com o sistema, para isso eles podem ser inseridos dentro de /etc/modules
.
Podemos criar também um arquivo com esses módulos em /etc/modules-load.d/
.
Udev
Para relembrar consulte aqui.
Podemos colocar regras do udev em /etc/udev/udev.conf
, que normalmente está vázio, se atente a mensagem abaixo encontrada nesse arquivo.
udevd is also started in the initrd. When this file is modified you might also want to rebuild the initrd, so that it will include the modified configuration.
Se alterarmos qualquer coisa aqui dentro, devemos rodar o comando update-initramfs
para que seja refeito o initramfs
.
Outro lugar que podemos colocar regras de configuração fica em /etc/udev/rules.d/
e aqui só precisamos reiniciar udevadm
com o comando udevadm control --reload
.
No entando, como descrito no link mais acima, o sistema já possui regras prontas que ficam em /lib/udev/rules.d/
, não é recomendado adicionarmos regras nesse diretório.
As regras que ficam em
/etc/udev/*
tem prioridade sobre as regras que ficam em/lib/udev/rules.d/
.