Esta seção foi escrita por Al Dev <alavoor@yahoo.com)>
A ultima versão dessa seçao está em: http://www.milkywaygalaxy.freeservers.com após entrar no site clique em "Quick Steps to recompile linux kernel". Mirrors disponiveis: angelfire, geocities, virtualave, Fortunecity, Freewebsites, Tripod, 101xs, 50megs,
Estes sites contém muitas coisas boas de linux e dicas.
(A ultima versão desde documento esta em http://www.milkywaygalaxy.freeservers.com. Você pode checar lá para ver se há novas mudanças).
Recompilar o Kernel é requerido afim de que o kernel fique menor e que irá resultar em um sitema operacional mais rápido. Também é necessário para colocar suporte a novos dispositivos.
Antes de você compilar o kernel, é uma boa idéia fazer um backup do sistema. Se você não tiver feito um backup recentemente faça ele agora. Veja BRS Backup-Recovery-Software
Ou se você pode correr o risco de perder seus dados, então pule esta seçao e vá adiante.
Nota: Quando você ver '#bash' quer dizer prompt do bash, você deve digitar os comandos que aparecem depois do prompt '#bash'. Os comandos abaixo foram testados no RedHat Linux, mas devem funcionar para as outras distribuições com pequenas alterações.
Nota: Você pode ter muitas imagens do kernel no seu sistema. Seguindo os passos abaixo você não precisa sobreescrever ou causar danos ao seu kernel existente. Estes passos são muito seguros e seu kernel atual estará intacto e nao será tocado.
bash$ su - root bash# cd /mnt/cdrom/RedHat/RPMS bash# rpm -i kernel-headers*.rpm bash# rpm -i kernel-source*.rpm bash# rpm -i dev86*.rpm bash# rpm -i bin86*.rpm |
Inicie o X-Window com o comando 'startx'. Se não foi possível inicia-lo, então veja o passo abaixo.
bash# man startx bash# startx bash# cd /usr/src/linux bash# make xconfig |
Se você nao poder rodar o X-Window então tente o seguinte:
bash# export TERM=xterm
bash# make menuconfig
Se aparecer uma tela embaralhada, use um tipo de terminal diferente (ex: vt100,
vt102, vt220 ou ansi). Caso você esteja remotamente na máquina isso também
poderá acontecer, nestes casos você deve usar terminais como: vt100 ou vt220.
Por exemplo:
bash# export TERM=vt220
bash# export TERM=ansi
Ou então:
bash# export TERM=vt100
bash# make menuconfig
Se o menuconfig falhar, então tente:
bash# make config |
Dentro de 'make xconfig' você tem a obrigação de evitar os seguintes problemas:
Selecione o tipo de CPU correto - Pentium 3, AMD K6, Cyrix, Pentium 4, Intel 386, DEC Alpha, PowerPC caso contrário seu kernel nao irá dar boot!!
Selecione suporte SMP - multiplas CPUs (Nota: Não é recomendado colocar suporte a smp em sistema de CPU único!)
Arquivos de Sistema - Selecione Windows95 Vfat, MSDOS, NTFS como parte do kernel e nao como módulos. (Esta é minha preferencia mas você pode escolher o que quiser).
Ative o suporte para carregar módulos do kernel! Com esta opçao você pode carregar/descarregar os drivers dinamicamente com o linux rodando normalmente. Veja estas man pages:
bash# rpm -i /mnt/cdrom/Redhat/RPMS/modutils*.rpm bash# man lsmod bash# man insmod bash# man rmmod bash# man depmod bash# man modprobe |
Salve e Saia do "make xconfig". Todas opções que você selecionou foram salvas no arquivo de configuração: /usr/src/linux/.config. E agora, faça:
bash# make dep bash# make clean |
Leia o seguinte arquivo (para ganhar algum conhecimento sobre a compilação do kernel. Dica: use o editor gvim para uma leitura melhor) gvim
bash# gvim -R /usr/src/linux/arch/i386/config.in bash# man less bash# less /usr/src/linux/arch/i386/config.in Type 'h' for help and to navigate press i, j, k, l, h or arrow, page up/down keys. |
Agora, execute os comandos:
bash# cd /usr/src/linux
bash# man nohup
bash# nohup make bzImage &
bash# man tail
bash# tail -f nohup.out (.... para monitorar o processo)
Isto irá colocar seu kernel em /usr/src/linux/arch/i386/boot/bzImage |
Depois de criar o bzImage, preferencialmente copie ele para o diretório /boot. Veja as manpages do lilo (veja também � caso ocorra algum problema). É aconselhável que você insira no nome do arquivo a data que foi compilado.
bash# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage.09apr2002
bash# man lilo
bash# man lilo.conf
Edite o arquivo /etc/lilo.conf e coloque estas linhas:
image=/boot/bzImage.09apr2002
label=meukernel
root=/dev/hda1
read-only
Aviso: substitua o root de acordo com o seu sistema, para verificar seu
dispositivo / , use o comando:
bash# df /
|
Finalmente:
bash# lilo bash# lilo -q |
Reinicie a máquina e quando entrar no prompt do lilo, digite 'meukernel'. Se ele der boot, você fez tudo certo! Seu antigo kernel esta INTACTO e SEGURO.
Se seu novo kernel der boot e funcionar tudo que você esperava, é recomendavel que seja criado um disco de boot. Coloque um disco no driver de disquete e:
bash# cd /usr/src/linux bash# make bzdisk bash# rpm -i mkbootdisk*.rpm bash# man mkbootdisk |
Módulos Carregaveis: Este passo é necessário SOMENTE se você abilitou o suporte para carregar módulos no passo 3 mostrado acima.
bash# cd /usr/src/linux bash# make modules bash# make modules_install |
bash# man insmod bash# modprobe loop bash# insmod loop bash# lsmod |
O que ocorre: Depois de compilar e reiniciar, o sistema para antes do LILO.
Razão: Provavelmente você está usando um LILO antigo que não suporta mais que 1024 cilindros na partição de boot.
Solução: Use um disco de boot para entrar em modo rescue na partição que contém seu linux. Instale um lilo novo e coloque a opção lba32 no lilo.conf. Rode o comando lilo e agora seu sistema deve dar boot.
O seguinte erro é cometido frequentemente por novos usuários.
Se você re-configurou seu lilo para usar seu novo kernel e quando esta carregando o kernel aparece a seguinte mensagem:
Warning: unable to open an initial console Kernel panic: no init found. Try passing init= option to kernel |
O kernel procura pelo comando init que está localizado em /sbin/init. E o diretório /sbin geralmente fica na partição root. Para detalhes, veja:
bash# man init |
Quando você roda o depmod e ele retorna "Unresolved sysmbols". Por exemplo:
bash$ su - root bash# man depmod bash# depmod depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/linear.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/multipath.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/raid0.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/raid1.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/raid5.o |
Razão: Você nao fez: make modules e make modules_install depois de compilar seu novo kernel com "make bzImage".
Solução: Depois de compilar seu novo kernel, você deve fazer isso:
bash$ su - root bash# cd /usr/src/linux bash# make modules bash# make modules_install |
Quando você da boot no kernel e o sistema tenta carregar algum módulo e retorna "Unresolved symbol: algum nome de função" isto significa que você não compilou os módulos e o kernel corretamente. Normalmente você deve fazer isso:
bash# cd /usr/src/linux
bash# make dep
bash# make clean
bash# nohup make bzImage &
bash# tail -f nohup.out (.... para monitorar o progresso)
bash# make modules
bash# make modules_install |
Se o kernel falhar ao carregar um módulo, pode ser que você esteja tentando carregar um driver que não exista em seu computador. Algumas vezes os módulos carregavéis podem não funcionar e o driver precisa ser compilado dentro do kernel. Por exemplo: algumas placas de rede não tem a habilidade para ser um módulo carregavel. Portanto, no 'make xconfig' você deve colocar esse módulo para compilar "dentro do kernel".
Você pode instalar os módulos carregavéis com:
O passo mostrado abaixo pode não ser requerido mas é necessário SOMENTE PARA EMERGÊNCIAS onde seus arquivos do /lib/modules estão estragados. Se você ja tem o diretório /lib/modules e em seu caso você quer sobreescrevê-lo, então use --force para sobreescrever o pacote.
Para novas versões do linux redhat 6.0 e superiores, os módulos do kernel são incluídos no kernel-2.2*.rpm. Instale os módulos carregavéis com:
Isto irá listar os pacotes já instalados. bash# rpm -qa | grep -i kernel bash# rpm -U --force /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i686.rpm (ou) bash# rpm -U --force /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i586.rpm (ou) bash# rpm -U --force /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i386.rpm |
Isso é somente para versões antigas do redhat (5.2 e anteriores). Inicie o novo kernel e instale os módulos carregavéis do cdrom "contrib" do RedHat Linux.
bash# rpm -i /mnt/cdrom/contrib/kernel-modules*.rpm ....(Para linux antigos que o sistema não tem insmod pré-instalado) |
Depois de compilar e iniciar seu kernel, você provavelmente irá querer que seus dispositivos funcionem no linux corretamente. (Os passos abaixos foram testados no Redhat Linux mas devem funcionar com outras distribuições também).
Configuração de placa de vídeo/Monitor:
Por favor, olhe o manual da sua placa de vídeo que geralmente vem com o computador. Procure pela página "Technical Specifications".
Olhe o manual do monitor e procure pela página "Technical Specifications".
bash$ su - root bash# man Xconfigurator bash# /usr/bin/X11/Xconfigurator --help bash# /usr/bin/X11/Xconfigurator bash# /usr/bin/X11/Xconfigurator --expert Veja também: bash# man xf86config bash# /usr/bin/X11/xf86config |
Configuração da placa de som:
Conecte o seu cabo do speaker na saída da placa de som.
Conecte seu cabo de som do CDROM na placa de som. (Caso contrário seu cdrom não ira tocar as musicas do cdrom de musica)
Veja também o HOWTO sobre 'Sound' na www.linuxdoc.org
bash$ su - root bash# man sndconfig bash# /usr/sbin/sndconfig |
Configuração da placa de rede:
Use /sbin/linuxconf
Ou use o painel de controle do KDE
Veja também o HOWTO sobre 'Networking' na www.linuxdoc.org
Configurar Firewall e Mascaramento de IP: Para kernels com versão 2.4 e acima, o firewall e mascaramento de ip está implementado no pacote netfilter. Portanto no kernel você deve habilitar o Netfilter e rodar o script de Firewall/IPMasq. Faça download dos scripts de Firewall-IPMasq scripts, página principal do netfilter está em netfilter.samba.org. Material relatados estão em firewalling-matures e Netfilter-FAQ.
Para versoes do kernel abaixo de 2.4 você deve instalar os rpms da rpmfind.net ou firewall.src.rpm.
Configuração para outros dispositivos: Veja HOWTOs relatados sobre dispositivos em www.linuxdoc.org
Abaixo está um exemplo do arquivo /etc/lilo.conf. Como você não pode usar nomes extensos, como linux kernel 2.4.18, seria bom você colocar algo como: linux-2.4.18. É possível ter várias bzImages do kernel, então você pode compilar vários kernels. Exemplo de lilo.conf:
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 default=firewall image=/boot/vmlinuz-2.2.14-5.0 label=ker2214 read-only root=/dev/hda9 image=/boot/vmlinuz-2.2.17-14 label=ker2217 read-only root=/dev/hda9 #image=/usr/src/linux/arch/i386/boot/bzImage # label=meukernel # root=/dev/hda7 # read-only image=/boot/bzImage.myker.11feb2001 label=myker11feb root=/dev/hda9 read-only image=/boot/bzImage.myker.01jan2001 label=myker01jan root=/dev/hda9 read-only image=/boot/bzImage.myker-firewall.16mar2001 label=firewall root=/dev/hda9 read-only |