LPI-2: LPIC 201 - Tópico 201.1


LPI-2: LPIC 201 
Segue a descrição da lpi.org para esse tópico da prova.
http://www.lpi.org/our-certifications/exam-201-objectives
201.1 O kernel Linux

Peso 2

Descrição:  O candidato deverá ser capaz de utilizar os componentes do kernel que são necessários para um hardware específico, drivers de hardware, recursos do sistema e requisitos. Este objetivo inclui a implementação de diferentes tipos de imagens do kernel, identificando kernels estáveis ​​e de desenvolvimento e patches, assim como manusear módulos do kernel.
Principais Áreas de Conhecimento:
  • Documentação do Kernel 2.6.x
  • Documentação do Kernel 3.x
Termos e Utilidades:
  • / Usr / src / linux /
  • ZImage
  • / Usr / src / linux / Documentação /
  • BzImage

Fonte de estudos.

http://www.ibm.com/developerworks/br/library/l-linux-kernel/index.html?ca=drs-br-0606

Vamos falar um pouco do kernel.

Kernel Linux

O Linux na verdade é o kernel dos sistemas operacionais GNU/Linux, ele é responsável por tratar informações entre o hardware e as aplicações. Desenvolvido por Linus Torvald em 1990, o Linux tomou proporções mundiais rapidamente ao aderir o licenciamento GNU GPL, que ao mesmo tempo que o torna público e acessível por milhares de programadores o protege de ser usado comercialmente.

Criador do Linux, Torvalds.
Linus Torvalds



Breve Histórico dos Principais Releases do Kernel Linux
Breve Histórico dos Principais Releases do Kernel Linux
Fonte da Imagem: https://www.ibm.com/developerworks/br/library/l-linux-kernel/
Para entender melhor o assunto recomendo esse artigo:
https://www.vivaolinux.com.br/artigo/O-Kernel-Linux

Tipos de Kernel

O kernel do Linux é monolítico, existem também o micro-kernel e o kernel hibrido. No kernel monolítico todas funções nascem de um único processo, sendo mais rápido e fácil o desenvolvimento e o monitoramento de erros. No micro-kernel uma função pode ser controlada por um processo alheio a uma rotina primária. Os híbridos podem ter as duas características, basicamente ter um processo cuidando de tudo mas com exceções onde ele cria um processo a parte para tratar aquela entrada.

Um kernel monolítico pode carregar tudo que está copilado no kernel para subir na memória, o que seria terrível em algumas situações, isso não ocorre porquê o Linux é modular, significa que embora um processo único esteja cuidando dos demais, só vai para a memória aquilo que será usado pelo sistema operacional, por exemplo ao plugar uma dispositivo USB somente o módulo que contém as instruções e drivers para processar o dispositivo será levado para memória, o que confere ao Linux um uso de memória bem pequeno em comparação por exemplo ao Windows, que sobe quase todos os drivers na inicialização.

Padronização e nomenclatura do kernel

Basicamente a versão do Linux é separada por quatro itens:
Vejamos pelo exemplo abaixo:

3.16.0-4-amd64
A.B.C.D
A - Versão principal: Versão do kernel, muda apenas quando existem mudanças radicais, a exceção da versão 2 para 3 que foi realizado pela vigezimo ano de aniversario.
B - Número de revisão principal: Número da revisão. Até a versão 2.4 o número quando par era uma versão estável e quando ímpar um beta.
c - Número de revisão secundário: Versões antigas identificava correções de segurança, hoje indica adição de drivers e recursos.
D Correções Urgentes: Não aparece no exemplo acima e indica uma correção urgente de segurança que altere algum aspecto da revisão secundária.

Localização do Kernel no Sistema

A localização do kernel geralmente fica em /usr/src/ numa subpasta como por exemplo /usr/src/linux-2.6.32, é bom lembrar que podemos usar mais de um kernel e para isso deixamos um link simbolico para /usr/scr/linux, desta forma os aplicativos não terão problema de achar algum arquivo do kernel em execução.

Documentação Oficial

A documentação pode ser consultada em /usr/src/linux/Documentation, em destaque para kernel-parameters.txt que aponta os parâmetros possíveis de se habilitar.

Imagem

A imagem do kernel copilado fica em /usr/src/linux/arch/[arquitetura]/boot, tem tamanho variável e como formato padrão o zImagem (até 512Kb) e bzImagem (imagens maiores que 512Kb).

201.2 Compilando um kernel Linux
Peso 3

Na maioria das distribuições a copilação acontece ou vem pré-copiladas para acontecer durante a instalação, mas algumas vezes para buscar suporte ao hardware ou mesmo suportar um dado recurso ou otimizar outros é preciso realizar a copilação do kernel.

Podemos sintetizar a copilação em três etapas: Configuração, Copilação e por fim instalação.

Configuração

Com o objetivo de gerar o arquivo .config invocamos primeiramente o comando make no diretório do código-fonte, existem várias formas de se gerar o arquivo .config sendo a mais comum o método ncurses com o comando make menuconfig. Nada mais é que um menu para acessar todas as configurações. Existem ainda pelo menos duas interfeaces alternativas no ambiente gráfico X, o Qt e Gtk, mas que funcionam basicamente como a interface ncurses.

Pré-requisitos:
Ter o compilador da linguagem C e alguns acessórios.
No Debian #apt-get install build-essential, no Fedora com yum groupinstall "Development Tools".

Outra opções:
Para usar uma interface alternativa ao ncurses e orientada a perguntas e respostas temos o #make config e para aproveitar o .config pré-existente podemos chamar #make oldconfig para perguntar apenas por novos recursos.


Comandos:
make

make menuconfig
make config
make oldconfig
Arquivos:
.config

Importante:
Interface ncurses
Compilador C
Compilação

Caso não seja a primeira copilação de kernel podemos invocar o #make mrproper, para limpar as configurações da compilação anterior, isso evitar dependências desencontradas.