Skip to main content

201.1 Componentes do Kernel


O kernel é o núcleo de um sistema operacional, responsável por fazer a ponte entre o hardware e o software. Ele gerencia recursos como CPU, memória e dispositivos de entrada/saída, controlando a execução de processos, alocação de memória, comunicação entre dispositivos e garantindo que os programas tenham acesso seguro aos recursos do sistema. Já o Linux é composto pelo Kernel e aplicações. Existem dois tipos de Kernel, o Monolítico e o Micro-Kernel.


O kernel monolítico é um tipo de núcleo onde todos os serviços essenciais do sistema, como drivers, gerenciamento de memória e sistemas de arquivos, rodam no espaço do kernel, formando um único bloco integrado. O Linux utiliza um kernel monolítico modular, permitindo que partes do sistema (como drivers) sejam carregadas dinamicamente, mas mantendo o núcleo monolítico.


Já o microkernel é um núcleo minimalista, que executa apenas funções básicas, como comunicação entre processos e gerenciamento de hardware. Outras funcionalidades, como drivers e sistemas de arquivos, rodam em espaço de usuário, como subprocessos separados. Isso oferece maior estabilidade e segurança, mas tende a ser menos eficiente devido à maior comunicação entre processos.


Kernel


Para baixar um Kernel, podemos baixar visitando o site oficial, a versão oficial do Kernel seguem algumas características que devemos entender. Vamos analisar a imagem abaixo:

6515616316518589

Mainline é uma versão que irá se tornar a versão estável, mas ainda não é.
Stable é a versão estável do momento.
EOL (End Of Life) é a versão que deixará de ser estável.
LongTerm são versões antigas que ainda são mantidas.


A versão do kernel pode ser entendida como V.R.I, onde:

  • V representa a versão principal do kernel;
  • R indica o release (lançamento principal) dentro dessa versão;
  • I é o número de incremento, que aumenta sempre que um patch de correção é lançado.

Por exemplo, na versão 5.14.7:

  • 5 é a versão principal do kernel;
  • 14 é o 14º lançamento dentro da versão 5;
  • 7 indica que já foram aplicados 7 patches de correção desde o lançamento do kernel 5.14.

Isso significa que estamos na versão 5 do kernel, com o 14º lançamento e 7 correções aplicadas.



Arquivos e Localização


Sempre que um Kernel é compilado/instalado, o código e as fonte (cabeçalho/headers) do kernel ficam em /usr/src/, no caso da compilação, você pode colocar em outro lugar, mas é bom manter nesse diretório. Já o Kernel em sí fica em /boot.

# Listando o código fonte do headers do Kernel:
$ ls /usr/src/
linux-headers-5.4.0-42 linux-headers-5.4.0-42-generic linux-headers-5.4.0-66
linux-headers-5.4.0-66-generic linux-headers-5.4.0-86 linux-headers-5.4.0-86-generic

# Listando os Kernels que temos instalado:
$ ls -l /boot/vmlinuz*
lrwxrwxrwx 1 root root 24 Sep 23 21:11 /boot/vmlinuz -> vmlinuz-5.4.0-86-generic
-rw------- 1 root root 11662080 Jul 10 2020 /boot/vmlinuz-5.4.0-42-generic
-rw------- 1 root root 11690752 Jan 27 2021 /boot/vmlinuz-5.4.0-66-generic
-rw------- 1 root root 11776256 Sep 17 18:51 /boot/vmlinuz-5.4.0-86-generic
lrwxrwxrwx 1 root root 24 Sep 23 21:11 /boot/vmlinuz.old -> vmlinuz-5.4.0-66-generic

Os cabeçalhos do kernel são arquivos de código em C que contêm definições de estruturas, funções e macros usadas pelo kernel do Linux. Eles são essenciais para compilar qualquer código que precise se comunicar diretamente com o kernel, como módulos do kernel, drivers de dispositivos e até alguns programas de espaço de usuário que fazem chamadas ao kernel. Esses cabeçalhos fornecem a interface necessária para garantir que o código externo possa interagir corretamente com o kernel, utilizando as APIs e estruturas que ele oferece.


Sempre que baixamos um novo Kernel ele vem agrupado com tar e compactado com xz.



bzImage ou zImage


A imagem do Kernel poderia ser de dois tipos, zImage ou bzImage, coloquei como poderia porque zImage não se utiliza mais por causa de seus limitações principalmente no tamanho do arquivo final. Tanto bzImage quanto zImage só tem relação com o tamanho do Kernel, isso não diz respeito a algoritmo de compactação.

# Vendo o tipo de arquivo do Kernel:
$ sudo file /boot/vmlinuz-$(uname -r)
/boot/vmlinuz-5.4.0-86-generic: Linux kernel x86 boot executable bzImage, version 5.4.0-86-generic (buildd@lgw01-amd64-041) \#97-Ubuntu SMP Fri Sep 17 19:19:40 UTC 2021, RO-rootFS, swap_dev 0xB, Normal VGA

Para ver os módulos que nosso Kernel possui a nível de arquivo e ver quais Kernel temos, podemos olhar em /lib/modules/:

# Listando os Kernels:
$ sudo ls /lib/modules
5.4.0-42-generic 5.4.0-66-generic 5.4.0-86-generic

# Vendo os Kernels por outro caminho:
$ sudo ls /boot/vmlinuz-*
/boot/vmlinuz-5.4.0-42-generic /boot/vmlinuz-5.4.0-66-generic /boot/vmlinuz-5.4.0-86-generic

# Listando os módulos do nosso Kernel:
$ sudo ls -l /lib/modules/$(uname -r)
total 5828
lrwxrwxrwx 1 root root 39 Sep 17 18:35 build -> /usr/src/linux-headers-5.4.0-86-generic
drwxr-xr-x 2 root root 4096 Sep 17 18:35 initrd
drwxr-xr-x 17 root root 4096 Sep 23 21:08 kernel
-rw-r--r-- 1 root root 1398916 Sep 23 21:11 modules.alias
-rw-r--r-- 1 root root 1375306 Sep 23 21:11 modules.alias.bin
-rw-r--r-- 1 root root 8105 Sep 17 18:35 modules.builtin
-rw-r--r-- 1 root root 25015 Sep 23 21:11 modules.builtin.alias.bin
-rw-r--r-- 1 root root 10257 Sep 23 21:11 modules.builtin.bin
-rw-r--r-- 1 root root 63546 Sep 17 18:35 modules.builtin.modinfo
-rw-r--r-- 1 root root 610290 Sep 23 21:11 modules.dep
-rw-r--r-- 1 root root 853209 Sep 23 21:11 modules.dep.bin
-rw-r--r-- 1 root root 330 Sep 23 21:11 modules.devname
-rw-r--r-- 1 root root 220079 Sep 17 18:35 modules.order
-rw-r--r-- 1 root root 895 Sep 23 21:11 modules.softdep
-rw-r--r-- 1 root root 614713 Sep 23 21:11 modules.symbols
-rw-r--r-- 1 root root 747828 Sep 23 21:11 modules.symbols.bin
drwxr-xr-x 3 root root 4096 Sep 23 21:08 vdso


zImage


Tinha limitação de 512KB de tamanho e era iniciada na memória baixa do S.O chamada low memory.



bzImage (big zImage)


É a evolução da zImage, não possui limitação de tamanho, é iniciada na memória alta do S.O, chamada high memory.