Vous êtes sur la page 1sur 12
Linux System Administration 456 – Compilação do Kernel www.4linux.com.br

Linux System Administration 456 – Compilação do Kernel

www.4linux.com.br

- 2

Sumário

Compilação do Kernel

3

1.1. Objetivos :

3

1.2. Como recompilar o kernel no Linux

4

1.3. GRUB 2

11

REFERÊNCIAS

BIBLIOGRÁFICAS

13

ANEXOS

15

Primeiro anexo

16

Tópico do Anexo

Índice de tabelas

16

Índice de Figuras

Compilação do Kernel - 3

Compilação do Kernel

1.1. Objetivos :

Entender como recompilar o kernel.

Compilação do Kernel - 4

1.2. Como recompilar o kernel no Linux

Distribuição foco: Debian 6.0 (Squeeze)do Kernel - 4 1.2. Como recompilar o kernel no Linux Obs: A única coisa que

o kernel no Linux Distribuição foco: Debian 6.0 (Squeeze) Obs: A única coisa que difere a
o kernel no Linux Distribuição foco: Debian 6.0 (Squeeze) Obs: A única coisa que difere a

Obs: A única coisa que difere a compilação do kernel no Debian de outras distribuições Linux A única coisa que difere a compilação do kernel no Debian de outras distribuições Linux é a forma como os pacotes necessários para a compilação como compilador, biblioteca ncurses etc são instalados.

No Debian, use o gerenciador de instalação de programas chamado aptitude. O centro pelo qual todas as distribuições são construídas é o kernel do Linux. Ele fica entre os programas de usuários e o hardware do sistema. É o kernel que fornece suporte aos hardwares, protocolos e alguns softwares.

O kernel genérico baseia-se na utilização de módulos, ou seja, o desenvolvedor compila um kernel básico e compila todo o resto em forma de módulo, de modo que todos os suportes adicionais são incluídos de forma modular.

Você vem usando seu Linux alegremente, cuidando da própria vida e então um belo dia você tenta fazer funcionar um pacote de software que simplesmente não quer cooperar. Ou usar um dispositivo que não tem o módulo desejado. E você obtém uma mensagem de erro! Daí você resolve procurar um entendido em Linux, e ele diz: “Ah, é só recompilar o kernel”

Daí você pensa: “An ran, por que eu simplesmente não desmonto e monto meu carro enquanto estou dirigindo?”. Relaxe , esse processo não é tão doloroso quanto parece ser.

Depois que você instala o Linux, o sistema vai rodar um kernel pré-compilado pelo fornecedor da distribuição (Debian, Red Hat, Slackware etc) . A sua distribuição não conhece o seu computador, então o kernel instalado é o mais genérico o possível. Ele pode vir pesado, pois nele vão ter coisas que talvez não vai ser usadas.

Compilação do Kernel - 5

E com isso, o kernel que a distro oferece acaba tendo uma performance menor do que deveria. Ou por não ter o recurso que você precise, ou ainda, por ter a mais. Então, é necessário compilar um kernel para ter uma melhora no desempenho;

Compile um kernel para adicionar suporte a novos dispositivos; Para aplicar patchs de correção; Ou ainda como diria Linus Torvalds: só por prazer mesmo!

Um kernel bem compilado conterá apenas um conjunto estritamente necessário ao funcionamento do servidor e não terá módulos externos e sim built-in. Deve-se conhecer muito bem o hardware quando começar a configurar o kernel manualmente.

Quando falamos que um módulo é built-in, significa que o mesmo já está incorporado no kernel do sistema; ou seja, assim que o kernel for iniciado, o dispositivo também será, caso a máquina o tenha.

Agora os módulos que não são built-in, ou seja, que não são carregados quando o sistema inicia, significa que o kernel suporta, mas o mesmo precisa ser levantado manualmente. Então, módulo é como lego, pode estar ali, mas para funcionar, você precisa montar, ou melhor carregar. Para descobrir a versão atual do seu kernel:

# uname -r

#

uname -r

 
Use o dvd do Debian e execute os seguintes comandos:

Use o dvd do Debian e execute os seguintes comandos:

 
# apt-cdrom add

# apt-cdrom add

# aptitude update

Compilação do Kernel - 6

Para conhecer mais sobre o seu hardware:

do Kernel - 6 Para conhecer mais sobre o seu hardware: # aptitude install pciutils usbutils

# aptitude install pciutils usbutils

# lspci

# lsusb

# cat /proc/cpuinfo

# cat /proc/meminfo

Você pode usar o comando lshw, mas para isso precisa instalá-lo:

pode usar o comando lshw, mas para isso precisa instalá-lo: # aptitude install lshw # lshw

# aptitude install lshw

# lshw

Pacotes que é preciso para compilar o kernel na distribuição Debian:

é preciso para compilar o kernel na distribuição Debian: # aptitude install build-essential # aptitude install

# aptitude install build-essential

# aptitude install libncurses5-dev

Veja a sequência da compilação. E necessário que tenha o mais importante, que é o código fonte do kernel, no http://www.kernel.org, sempre tem a versão mais nova do kernel lá. E quando você baixar o fonte do kernel, deve descompactá-lo em um diretório específico, o /usr/src.

descompactá-lo em um diretório específico, o /usr/src. # tar -xjvf linux-2.6.38.3.tar.bz2 -C /usr/src/ No qual o

# tar -xjvf linux-2.6.38.3.tar.bz2 -C /usr/src/

No qual o -C, é para descompactar o pacote em um diretório diferente do lugar onde se encontra. Depois que descompactar, entre no diretório onde está o kernel para começar a compilação.

diretório onde está o kernel para começar a compilação. # cd /usr/src/linux-2.6.38.3 # ln -s

# cd /usr/src/linux-2.6.38.3

# ln -s /usr/src/linux-2.6.38.3 /usr/src/linux

Compilação do Kernel - 7

Um passo extremamente importante antes de configurar o kernel é sempre adicionar uma EXTRAVERSION a fim de organizar uma eventual estrutura de módulos no /lib. Utilize o comando date para gerar uma string de extraversion:

o comando date para gerar uma string de extraversion: # date +”-%Y%m%dc1” Adicione essa string à

# date +”-%Y%m%dc1”

Adicione essa string à variável EXTRAVERSION na Makefile do kernel:

essa string à variável EXTRAVERSION na Makefile do kernel: # vi Makefile EXTRAVERSION = <string_gerada> Se

# vi Makefile

EXTRAVERSION = <string_gerada>

Se essa não for a primeira compilação desse kernel, é sempre recomendado realizar uma limpeza no diretório do fonte do kernel:

realizar uma limpeza no diretório do fonte do kernel: # make mrproper Aí, digite o comando

# make mrproper

Aí, digite o comando para configurar as opções que o kernel oferece:

o comando para configurar as opções que o kernel oferece: # make menuconfig Esse comando acima

# make menuconfig

Esse comando acima vai chamar a interface para a compilação com menus e opções para compilar. Ou seja, vai ser aí que vão escolher as opções lembre que, na dúvida de não saber para que serve uma determinada opção, deixe o padrão. O conteúdo gerado por ele é guardado em um arquivo oculto chamado config.

Você pode aproveitar o .config do kernel anterior e copiar para o diretório do kernel novo e executar o make menuconfig fazendo as alterações necessárias. Para ter boas orientações nessa etapa baixe a vídeo-aula do kernel no Netclass.

Depois que escolher as opções do que vai manter ou não. O próximo comando é:

kernel no Netclass. Depois que escolher as opções do que vai manter ou não. O próximo

# cat .config | more

Compilação do Kernel - 8

Onde esse comando vai permitir visualizar o arquivo de configuração gerado pelo comando make menuconfig que foi digitado anteriormente. Apenas curiosidade!

Aí, o próximo comando que vamos usar é:

curiosidade! Aí, o próximo comando que vamos usar é: # make clean Esse comando serve para

# make clean

Esse comando serve para limpar a casa. Ele remove os restos das compilações anteriores e módulos desnecessários. No kernel 2.4 era necessário esse passo:

desnecessários. No kernel 2.4 era necessário esse passo: # make dep Esse comando vai gerar as

# make dep

Esse comando vai gerar as dependências do novo kernel, ou seja, vai checar o que ele vai precisar para compilar e gerar a nova imagem do kernel.

Copie o .config gerado para esta versão de kernel para o /boot:

o .config gerado para esta versão de kernel para o /boot: cp /usr/src/linux/.config /boot/config-2.6.38.3 Digite o

cp /usr/src/linux/.config /boot/config-2.6.38.3

Digite o comando abaixo para compilar o kernel:

Digite o comando abaixo para compilar o kernel: # make bzImage (ou somente make, no kernel

# make bzImage (ou somente make, no kernel 2.6 basta)

Esse comando gera a imagem do kernel.

no kernel 2.6 basta) Esse comando gera a imagem do kernel. # make modules Onde esse

# make modules

Onde esse comando vai compilar os módulos que vão ser usados pelo novo kernel. Pode demorar até mais que o passo anterior se você tiver escolhido muitos módulos.

Compilação do Kernel - 9

Então, depois desse comando , o próximo comando que ira executar é:

desse comando , o próximo comando que ira executar é: # make modules_install Esse comando é

# make modules_install

Esse comando é para copiar os módulos compilados para seus respectivos diretórios em /lib/modules.

Depois desses passos, o kernel está compilado, e vai ser gerado um arquivo da

imagem (o bzImage) no diretório /usr/src/linux-2.6.38.3/arch/i386/boot/.

Então, é necessário copiar essa imagem para dentro do /boot para que possa escolher qual kernel será inicializado. Vamos chamá-la de kernel-2.6.38.3.

será inicializado. Vamos chamá-la de kernel-2.6.38.3. # cp /usr/src/linux-2.6.38.3/ arch/i386/boot/bzImage

# cp /usr/src/linux-2.6.38.3/arch/i386/boot/bzImage /boot/vmlinuz-2.6.38.3

Feitos os passos de compilação, você deve agora associar o arquivo de initrd (que é para inicializar os módulos) para o novo kernel. Esse arquivo é necessário porque ele vai ser inicializado pelo gerenciador de boot na memória antes do kernel iniciar.

Para isso, é preciso que instalar o pacote initramfs-tools.

Para isso, é preciso que instalar o pacote initramfs-tools. # aptitude install initramfs-tools E aí, é

# aptitude install initramfs-tools

E aí, é só construir o arquivo com o comando abaixo:

E aí, é só construir o arquivo com o comando abaixo: # mkinitramfs -o /boot/initrd-2.6.38.3 /lib/modules/2.6.38.3

# mkinitramfs -o /boot/initrd-2.6.38.3 /lib/modules/2.6.38.3

Onde: O -o é para indicar o arquivo de saída e o /lib/modules/2.6.38.3 indica o kernel que foi compilado.

Compilação do Kernel - 10

Com isso, já esta quase na reta final para testar o kernel. Então, adicione a nossa nova imagem no GRUB, que é o gerenciador de boot sem mexer na configuração atual. Pois assim, se der alguma pane será possível voltar o kernel anterior para testar tudo de novo.

Compilação do Kernel - 11

1.3. GRUB 2

Descubra qual o UUID da sua partição que está /boot:

# blkid

#

blkid

/dev/sda1:

UUID=" 6ba27eb3-c4ac-48b5-ade8-1ab06f1a1c93 "

 

TYPE="ext4"

# vim /etc/grub.d/40_custom

#

vim /etc/grub.d/40_custom

 

Acrescentar no arquivo:

menuentry “Debian Kernel Novo” { insmod ext2vim /etc/grub.d/40_custom   Acrescentar no arquivo:   set root=(hd0,1) # Partição que contém a imagem do

 

set root=(hd0,1) # Partição que contém a imagem do kernel e initrd

linux

/boot/vmlinuz-2.6.38.3 root=UUID=6ba27eb3-c4ac-48b5-ade8-

1ab06f1a1c93

 

initrd /boot/initrd.img-2.6.38.3

}

#

#

update-grub

chmod +x /etc/grub.d/40_custom/boot/initrd.img-2.6.38.3 } # # update-grub Outra opção mais simples: # update-grub2 Reinicie a

Outra opção mais simples:

# # update-grub chmod +x /etc/grub.d/40_custom Outra opção mais simples: # update-grub2 Reinicie a máquina.

# update-grub2

Reinicie a máquina.

Compilação do Kernel - 12

Veja se aparece a versão do kernel que você acabou de compilar:

Compilação do Kernel - 12 Veja se aparece a versão do kernel que você acabou de

# uname -r

2.6.38.3