UNIVERSIDADE FEDERAL DO CEARÁ CAMPUS QUIXADÁ CURSO DE REDES DE COMPUTADORES EDIGLEISON DA SILVA BARBOSA FRANCISCO DE ASSIS DA SILVA MATHEUS MEDEIROS DA CRUZ OTÁVIO SILVA PIRES PAULO TARSO JUNIOR TUTORIAL DE COMPILAÇÃO DO KERNEL LINUX QUIXADÁ 2012 Compilação do Kernel
Linux A compilação do Kernel é um passo um tanto quanto complexo e sério, que exige um bom conhecimento do hardware onde o Kernel será construído. Esta compilação traz uma série de benefícios, pois o Kernel que acompanha as distribuições é compilado para hardwares gerais e possivelmente trará suporte a dispositivos que você não possui. Serão necessários aproximadamente 300MB de espaço em disco disponíveis para copiar e descompactar o código fonte do Kernel e alguns pacotes de desenvolvimento como o gcc, cpp, binutils, gcc-i386-gnu, bin86, make, dpkg-dev, perl, kernel-package (os três últimos somente para a distribuição Debian). serão necessário privilégios de super usuário: $ su - 1 Primeiros passos # apt-get install wget tar bzip2 build-essential libncurses5-dev kernelpackage Primeiramente você deve conseguir a versão do kernel que mais se encaixe as suas necessidades, para descobrir qual versão você está usando use um dos comandos:
# uname -r # cat proc/version # dmesg grep Linux version Normalmente é recomendado baixar a versão estável mais atual, que no nosso caso é a 3.4.2. Você pode encontra-lá no site http://kernel.org/, que é organizado pela Linux Kernel Organization, baixá-lo diretamento no browser por HTTP, FTP ou atráves do comando: # wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.2.tar.bz2 Dica: Caso não queira manter o arquivo do kernel compactado após a compilação, mude para a pasta /tmp antes de baixar o arquivo. Com o arquivo no disco o próximo passo é descompactá-lo # tar -xjvf linux-3.4.2.tar.bz2 -C /usr/src O arquivo deve ser descompactado no diretório /usr/src pois este armazena o código-fonte do kernel com seus arquivos de cabeçalho. A descompactação cria automaticamente um diretório homónimo ao arquivo, o recomendável é renomeá-lo para linux-suaversão no nosso caso: linux-3.4.2 Entre no diretório do seu novo kernel. # cd /usr/src e logo em seguida criar um link simbólico para esse diretório # ln -s linux-3.4.2/ linux 2 Configuração Agora entra a parte mais complexa desse processo: a configuração. Aqui você deverá escolher quais módulos estarão presentes no seu kernel e como eles serão "acoplados". Existem três formas de se acoplar um módulo ao kernel: através da opção Y, ele estará acoplado diretamento, inflando o seu tamanho; com a opção M, ele será acoplado como um módulo do kernel (bom para drivers de som, vídeo e etc); ou N, onde o módulo não estará presente no kernel. Para que seja feita esta escolha, existem três interfaces disponíveis: config - Serão feitas perguntas e você irá respondendo qual ação tomar (como Y, M, N ou? - para uma ajuda); menuconfig - Seleção dos módulos via menu baseado em texto, radiolists e diálogo;
xconfig - Seleção dos módulos via menu no modo gráfico. É indicado que as compilações sejam feitas totalmente em modo texto para se economizar memória e evitar problemas, por isso sugiro que você use a opção menuconfig. Para acessar qualquer uma das opções, estando dentro do diretório do kernel, digite: # make <opção> ex.: # make menuconfig Você tem que selecionar as opções de acordo com seu hardware, seguem um explicação sobre cada um dos menus General Setup: Trata de características específicas de configuração do kernel Enable loadable module support: Habilita o uso de módulos pelo kernel. Processor type and features:- configurações relativas a processadores, como: o tipo do processador, a família, etc. Power management and ACPI options: Trata de recursos de gerenciamentos de energia; Bus options (PCI, PCMCIA, EISA, MCA, ISA): Opções de suporte aos barramentos; Executable file formats / Emulations: Formatos de arquivo executáveis e emuladores, como por exemplo o binário MISC, no caso que você tenha programas que precisam de interpretador como Java, Python,.Net ou emuladores DOS. Netwoking support: Habilita ferramenta de Rede, mesmo que sua máquina não esteja conectada a uma rede algumas aplicações podem exigir suporte à rede. Firmware Drivers: Possibilita a comunicação entre o sistema e firmwares de uma determinada empresa. File systems: As opções aqui dizem respeito ao sistema de arquivos que você usará e ao qual o seu kernel terá suporte. Device drivers: Aqui é onde serão habilitados os controladores de dispositivos dependendo da característica do hardware. Se quiser manter sua configuração atual guardada caso tenha algum problemas execute o comando abaixo: $ sudo make oldconfig 3 Compilação A partir de agora teremos duas opções: usar o kernel-package para criar um pacote que pode ser executado em qualquer outra distribuição baseada em Debian ou fazer o passo a passo manualmente. 3.1 Modo Manual (Qualquer distribuição) Iniciar a compilação do kernel através de um simples:
# make e então compilar os módulos: # make modules por ultimo instalar os modulos compilados: # make modules_install Você deve estar se perguntando: Mas o quê realmente são esse modulos? O kernel do Linux tem um design modular. No momento da inicialização, somente um kernel residente mínimo é carregado na memória. Depois disso, sempre que um usuário requisitar uma funcionalidade que não está presente no kernel residente, um módulo do kernel, por vezes referido como um driver, é dinamicamente carregado na memória. Pronto! agora que já compilamos e instalamos os módulos podemos finalmente instalar a nova versão do kernel # make install Isso irá instalar três arquivos no diretório /boot assim como modificará seu arquivo de configuração do grub. System.map-3.4.2 config-3.4.2 vmlinuz-3.4.2 initrd.img-3.4.2 # ls /boot Imagens initrd contém controladores de dispositivos que são necessários para carregar o resto do sistema operacional mais tarde. caso o instalação do kernel não tenho criado o diretório initrd.img-3.4.2 diretamente é seguro criá-lo: # mkinitrd -o initrd.img-3.4.2 3.4.2 ou # sudo update-initramfs -u -k 3.4.2 para atualizar. Caso na dê certo:
# sudo update-initramfs -c -k 3.4.2 para criá-lo. Por precaução crie o arquivo: # vim /boot/grub/menu.lst Cole o texto: title root kernel initrd savedefault boot Debian GNU/Linux, kernel 2.6.25 Default (hd0,0) /boot/vmlinuz root=/dev/sda ro /boot/initrd.img-3.4.2 Agora basta atualizar o grub e reiniciar o sistema. # update-grub # reboot 3.2 Modo Debian (easier) make-kpkg é comando usado para criar pacotes Debian, a opção clean limpa o diretório /usr/src de todas as compilações anteriores que usaram o construtor kpkg. # make-kpkg clean A opção --initrd é usando quando estamos criando uma pacote com uma imagem do kernel linux, para quê durante a instalação a imagem initrd seja criada. kernel_image cria uma imagem do kernel linux. --revision muda o número de versão do pacote que está sendo produzido o padrão é 10.00.custom. # make-kpkg --initrd --revision=teste.1.0 kernel_image dpkg é o o gerenciador de pacotes Debian, a opção -i instala determinado pacote. # sudo dpkg -i../linux-3.4.2_custom.1.0_amd64.deb 4 Bibliografia Vivet Gite. (2005). How to: Compile Linux kernel 2.6. Available: http://www.cyberciti.biz/ tips/compiling-linux-kernel-26.html. Last accessed 14th Jun 2012.
José Lopes de Oliveira Júnior. (2005). Compilação comentada do kernel. Available: http:// www.vivaolinux.com.br/artigo/compilacao-comentada-do-kernel?pagina=1. Last accessed 14th Jun 2012. Gleydson Mazioli da Silva. (2010). Guia Foca GNU/Linux - Intermediário+Iniciante. Available: http://www.guiafoca.org/?page_id=326. Last accessed 14th Jun 2012. Wiki. (2012). Kernel/Compile. Available: https://help.ubuntu.com/community/kernel/ Compile. Last accessed 14th Jun 2012. KernelTeam/GitKernelBuild. (2011). GitKernelBuild. Available: https://wiki.ubuntu.com/ KernelTeam/GitKernelBuild. Last accessed 14th Jun 2012. Adrian Marius. (2012). Compiling Linux Kernel 3.4.x Vanilla Final - Ubuntu/Debian way. Available: http://mapopa.blogspot.com.br/2009/01/compiling-2.html. Last accessed 10th jun 2012. Ferreira, Rubem E. (2008). Linux: guia do administrador do sistema. 2nd ed. São Paulo: Novatec Editora. p314-330.