Make your own free website on Tripod.com
 
Compilando um novo kernel
      - Texto por Fabio Trentini e Mauricio Scaff
      - Sistema Operacional Linux

Kernel é a principal parte do Linux. Ele é a parte do sistema que sabe como é o seu computador, se ele tem, e qual o tipo, de rede, modem, drives, etc, e faz a gerência destes recursos entre os programas dos usuários.

 Após você ter instalado o Linux, o sistema estará rodando com um kernel pré compilado pelos fornecedores da sua instalação (no caso Slackware). Como eles não sabem como é a sua maquina, o kernel é compilado de modo a ser o mais genérico possível e tenta englobar o maior número possível de configurações. Com isso, o kernel fornecido tem uma perda de performance, maior do que deveria e pode não aceitar todos os dispositivos que a sua máquina tenha.

 Além deste motivo, você terá que compilar um novo kernel cada vez que você pegar uma nova versão (ftp://sunsite.unc.edu/pub/Linux/kernel é um bom lugar para se procurar ), seja por corrigir bugs, ou aceitar novas características.

Dica: Ao pegar uma nova versão de kernel, verifique a sua numeração. Ela pode ser 2.0.xx ou 2.1.xx, onde xx é a revisão. A diferença entre 2.0.xx e 2.1.xx é que a versão 2.0.xx é considerada estável, enquanto que as versões 2.1.xx são consideradas versões de desenvolvimento, o que significa que há grandes possibilidades de alguma instabilidade. Prefira as versões 2.0.xx a não ser que você já seja muito experiente (mas ai você não estaria lendo este texto).

 Obs.: Para se poder compilar um kernel, você deve ter instalado o compilador C (GCC) , as bibliotecas C (libC), ter um espaço em disco suficiente ( eu diria que uns 50Mb são mais que suficientes) e estar logado como root.

 Adiante, será considerado que você já tenha lido os capítulos anteriores.

1) Descompactando os fontes.

Normalmente ao se instalar o Linux, teremos a seguinte configuração no diretório /usr/src que é o diretório onde por convenção são colocados os fontes de qualquer programa que você venha a compilar.

# cd /usr/src
# ls -l
total 1
lrwxrwxrwx   1 root     root           13 Mar  6 04:52 linux -> linux-2.0.30/
drwxr-xr-x  15 1046     1046         1024 Mar  6 05:04 linux-2.0.30

Caso a versão do kernel que você vai compilar é a própria que já esta instalada (no caso 2.0.30), pule para o próximo item, se não ...

Delete o link simbólico com a seguinte instrução :

 # rm linux

Descompacte a nova versão usando o comando tar (considerando-se que a nova versão seja a 2.0.33 e que ela estaja no diretório /root/tgz ):

 # tar xzvf /root/tgz/linux-2.0.33.tgz

Renomeie o kernel, que foi descompactado dentro de um diretório chamado linux para algo mais informativo :

 # mv linux linux-2.0.33

Crie um link simbólico para ele com o nome linux :

 # ln -s linux-2.0.33 linux

Opcionalmente,delete a versão antiga do kernel para liberar espaço :

 # rm -rf linux-2.0.30
 
2) Configuração do kernel

Há três maneiras de se configurar o kernel, ‘make config’, ‘make menuconfig’ e ‘make xconfig’.Eu irei seguir a primeira, que é uma interface de modo texto e a mais usada. As outras duas são interfaces mais user-friendly (facilitadas)  para a configuração do kernel, a 1a em modo texto e a segunda usando o X.
  Digite:

  # make config

A seguir será dada uma breve explicação sobre as perguntas feitas durante a configuração.
 Haverão diferenças entre as perguntas aqui descritas e as que voce irá responder, devido a diferentes versões do Kernel e diferentes configurações de hardware. (muitas vezes, ao se responder sim em uma opção, aparecerão outras mais detalhadas sobre o assunto. Neste caso, tecle “?” na pergunta , que lhe será dado uma breve explicação sobre a pergunta).

Code maturity level options'
 Prompt for development and/or incomplete code/drivers
Se disser sim, você estará habilitando o suporte a dispositivos em desenvolvimento ou experimentais, podendo o seu kernel ficar instável. Responda Não a menos que você precise de algum suporte específico.

Loadable module support
 Enable loadable module support
 Diga sim se você quiser compilar parte do seu Kernel como módulos separados que podem ser carregados posteriormente ao boot da máquina. É util quando se tem uma maquina que mude muito de comfiguração. Normalmente, diga Não.

General setup
 Kernel math emulation
Se você tiver um 386 ou um 486SX sem co-processador, diga sim, senão, Diga Não.

 Networking support
 Suporte à redes. Diga Sim, pois senão quase nada funciona.

 Limit memory to low 16MB
 Diga Não, a menos que você tenha uma motherboard antiga, incapaz de reconhecer a memória acima de 16Mb.

 PCI bios support
 Diga Sim se o seu micro tiver placas PCI.

 System V IPC
 IPC é um protocolo de comunicação entre processos, usado por alguns programas, como por exemplo o DOSEMU (emulador de DOS) e, a não ser que você esteja montando um kernel com alta restrição de tamanho, diga Sim.

 Kernel support for a.out binaries
 A.OUT é o formato de arquivo executável usado em versões antigas do Linux, portanto, é recomendável dizer Sim, a menos que você tenha certeza absoluta de que não tem nenhum programa compilado em a.out.

 Kernel support for ELF binaries
 ELF é o novo formato de executáveis no Linux, portanto diga Sim, caso contrário você não conseguirá rodar quase nada no seu micro (isso se ele chegar a dar boot).

 Compile kernel as ELF - if your GCC is ELF-GCC'
 Diga Sim. Já que existe um formato novo e mais versátil, vamos usá-lo.

 Processor type
 Escolha o tipo de processador da sua máquina. Se voce quiser um kernel genérico, porém não otimizado, escolha 386.

Floppy, IDE, and other block devices
 Normal floppy disk support
 Diga Sim para ter suporte a disquetes.

 Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
 Diga Sim para habilitar o suporte a dispositivos IDE.

 Use old disk-only driver on primary interface
 Diga Nao, a menos que você use um disco rígido antigo MFM ou RLL.

 Include IDE/ATAPI CDROM support
 Diga Sim se você tiver CDROM e ele for IDE (ATAPI)

 Include IDE/ATAPI TAPE support
 Diga Sim se voce tiver uma unidade de fita IDE

 Include IDE/ATAPI FLOPPY support (new)
 Diga Sim se você tiver um Floppy IDE (Sinceramente, nunca vi um destes)

 SCSI emulation support
 Diga Não, a menos que você tenha algum dispositivo IDE que deva ter suporte SCSI, como por exemplo gravadores de CD.

 Support removable IDE interfaces (PCMCIA)
 A nao ser que você esteja instalando o Linux em um notebook, diga Não.

 CMD640 chipset bugfix/support
 Diga Sim se voce tiver uma placa com este chipset ou não tiver certeza.

 RZ1000 chipset bugfix/support
 Diga Sim se voce tiver uma placa com este chipset ou não tiver certeza.

 Intel 82371 PIIX (Triton I/II) DMA support
 Diga Sim se voce tiver uma placa com este chipset ou não tiver certeza.

 Other IDE chipset support
 Se voce disser Sim, lhe serão dadas outras opções de chips controladores de IDE.

dditional Block Devices
 Loopback device support
 Loopback é usado para se poder montar um arquivo como se fosse um filesystem completo. Diga não, a menos que você tenha algum uso para isso.

 Multiple devices driver support
 Possibilita montar mais de um dispositivo físico (por exemplo, 2 HDs) como um único filesystem. Diga não a menos que voce vá usar isso.

 RAM disk support
 Possibilita a criação de um disco em RAM. Normalmente usado quando você cria um kernel para ser colocar em disquete. Normalmente, diga Não.

 XT harddisk support
 Diga Não, a menos que você tenha um HD antigo MFM ou RLL com placa controladora não IDE.

Networking options
 Network firewalls
 Diga não a menos que você esteja montando uma máquina firewall, e não um máquina uso normal.

 Network aliasing
 Diga Sim apenas se você precisar designar com nomes (numeros) diferentes uma mesma interface de rede. Usado por exemplo se você for rodar um servidor de HTTP.

 TCP/IP networking
 Diga Sim, pois mesmo que você não esteja em ree, vários programas, como por exemplo o Xserver usam o protocolo TCP/IP para comunicação entre processsos.

  IP: forwarding/gatewaying
 Diga não a menos que você esteja compilando o kernel para um roteador.

  IP: multicasting
 Diga não !

  IP: syn cookies
 Diga Sim. Isso evita um tipo de ataque chamado de Syn Flood.

  IP: accounting
 Diga Não, a menos que você precise das estatisticas geradas sobre o acesso à rede.

  IP: optimize as router not host
 Diga não a menos que você esteja compilando o kernel para um roteador.

  IP: tunneling
 Diga não, a menos que você saiba o que é tunneling e como usar.

  IP: PC/TCP compatibility mode
  IP: Reverse ARP
  IP: Disable Path MTU Discovery (normally enabled)
  IP: Drop source routed frames
  IP: Allow large windows (not recommended if <16Mb of memory)
 Mantenha a resposta padrão para as cinco perguntas anteriores, como recomendado pelo próprio programa de configuração, a menos que você saiba o que está fazendo.

 The IPX protocol
 Diga Não, a menos que você queira rotear pacotes IPX (Novell)

 Appletalk DDP
 Diga Não, a menos que você queira rotear pacotes Appletalk

 Amateur Radio AX.25 Level 2
 Diga Não, a menos que você queira rotear pacotes AX.25

 Kernel/User network link driver
 Diga Não, a menos que você conheça a fundo o funcionamento do Kernel.

SCSI support
 SCSI support
 Diga Sim se você algum dispositivo SCSI (ou um ZIP drive)

  SCSI disk support
 Diga Sim se você tem algum HD SCSI.

  SCSI tape support
 Diga Sim se você tem algum dispositivo de FITA SCSI.

  SCSI CD-ROM support
 Diga Sim se você tem algum CDROM SCSI.

  SCSI generic support
 Diga Sim se você tem algum outro tipo de dispositivo SCSI, como por exemplo um Gravador de CDs.

  Probe all LUNs on each SCSI device
 Diga Sim apenas se você tiver algum dispositivo SCSI que responda por mais de um endereço, como por exemplo JukeBox de CDs.

  Verbose SCSI error reporting (kernel size +=12K)
 Se voce disser Sim, o seu kernel ficará 12K maior, porém, os erros da SCSI serão reportados em palavras, e não numericamente. Normalmente se diz Não.

   7000FASST SCSI support
   Adaptec AHA152X/2825 support
   Adaptec AHA1542 support
nbsp;  Adaptec AHA1740 support
   Adaptec AIC7xxx support
   AdvanSys SCSI support
   Always IN2000 SCSI support
   AM53/79C974 PCI SCSI support
   BusLogic SCSI support
   DTC3180/3280 SCSI support
   EATA-DMA (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) support
   EATA-PIO (old DPT PM2001, PM2012A) support
   EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support
   Future Domain 16xx SCSI support
   Generic NCR5380/53c400 SCSI support
   NCR53c406a SCSI support
   NCR53c7,8xx SCSI support
   NCR53C8XX SCSI support
   IOMEGA Parallel Port ZIP drive SCSI support
   PAS16 SCSI support
   Qlogic FAS SCSI support
   Qlogic ISP SCSI support
   Seagate ST-02 and Future Domain TMC-8xx SCSI support
   Tekram DC-390(T) SCSI support
   Trantor T128/T128F/T228 SCSI support
   UltraStor 14F/34F support
   UltraStor SCSI support
   GDT SCSI Disk Array Controller support
 Diga Sim para a o(s) modelo(s) de placa(s) que voce tiver no seu computador. A placa mais comum do nosso mercado é a ADAPTEC 2940, que deve ser escolhida como Adaptec AIC7xxx.

etwork device support
 Network device support
 Diga sim, a menos que você não vá conectar sua máquina a nenhuma outra, seja via rede ou modem.

  Dummy net driver support
 Diga Sim se for usar SLIP.

  EQL (serial line load balancing) support
 Diga não, a menos que você tenha mais de uma linha serial interligando dois pontos e queira usá-las em conjunto.

nbsp; PLIP (parallel port) support
 Diga Não, a menos que você que conectar dois computadores em rede pela porta paralela.

  PPP (point-to-point) support
 Diga sim se você for usar o protocolo PPP.

  SLIP (serial line) support
 Diga Sim se você for usa o protocolo SLIP (Se o seu provedor aceitar SLIP e PPP, prefira PPP).

  Radio network interfaces
 Diga Sim se você tem alguma placa de comunicação via radio amador.

  Ethernet (10 or 100Mbit)
 Diga Sim se tiver placa de rede.
   3COM cards
   AMD LANCE and PCnet (AT1500 and NE2100) support
   Western Digital/SMC cards
   Other ISA cards
    Cabletron E21xx support
    DEPCA, DE10x, DE200, DE201, DE202, DE422 support
    EtherWORKS 3 (DE203, DE204, DE205) support
    EtherExpress 16 support
    HP PCLAN+ (27247B and 27252A) support
    HP PCLAN (27245 and other 27xxx series) support
    HP 10/100VG PCLAN (ISA, EISA, PCI) support
    NE2000/NE1000 support
    SK_G16 support
    EISA, VLB, PCI and on board controllers
    Apricot Xen-II on board ethernet
    Intel EtherExpress/Pro 100B support
    DE425, DE434, DE435, DE450, DE500 support
    DECchip Tulip (dc21x4x) PCI support
    Digi Intl. RightSwitch SE-X support
    Pocket and portable adaptors
    Token Ring driver support
    FDDI driver support
    ARCnet support
 Escolha a(s) sua(s) placa(s) de rede. As placas mais comum são cobertas pelo driver NE2000/NE1000 support.

ISDN subsystem
 Diga Não, a menos que você tenha uma linha IDSN (RDSI).

CD-ROM drivers (not for SCSI or IDE/ATAPI drives)
 Support non-SCSI/IDE/ATAPI CDROM drives
 Diga Sim se o seu CDROM não for IDE ou SCSI.

 Aztech/Orchid/Okano/Wearnes/TXC/CyDROM  CDROM support
 Goldstar R420 CDROM support
 Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support
 Mitsumi (standard) [no XA/Multisession] CDROM support
 Mitsumi [XA/MultiSession] CDROM support
 Optics Storage DOLPHIN 8000AT CDROM support
 Philips/LMS CM206 CDROM support
 Sanyo CDR-H94A CDROM support
 Soft configurable cdrom interface card support
 Sony CDU31A/CDU33A CDROM support
 Sony CDU535 CDROM support
 Escolha o tipo do seu CDROM entre as ascolhas acima. O caso mais comum, é o CDROM conectado nas placas de som, neste caso, escolha Matsushita...

Filesystems
 Quota support
 Diga Sim, se você for usar um sistema multi-usuário e queira definir cotas de espaço em diso e utilização de CPU para cada usuário.

 Minix fs support
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem.

 Extended fs support
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem (que é o antigo filesystem do Linux).

 Second extended fs support
 Diga Sim, pois este é o filesystem do Linux

 xiafs filesystem support
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem.

 DOS FAT fs support
 Diga Sim para poder acessar uma partição DOS.

 MSDOS fs support
 Diga Sim para poder acessar uma partição DOS.

 umsdos: Unix like fs on top of std MSDOS FAT fs
 Diga Não, a menos que você esteja rodando o Linux em uma partição DOS.

ISO9660 cdrom filesystem support
 Diga Sim se você tem CDROM.

 VFAT (Windows-95) fs support
 Diga Sim para ter o suporte a nomes longos do WIN95.

 /proc filesystem support
 Diga Sim para ter o filesystem virtual que é montado no diretório /proc, sem o qual vários programas não rodam.

 NFS filesystem support
 Diga Sim se você quiser montar arquivos via NFS (filesystem em rede) que, apesar de muito comodo, é muito inseguro.

 SMB filesystem support (to mount WfW shares etc..)
 Diga sim se você quer exportar/importar drives e impressoras para/de uma máquina Win95.

 SMB Win95 bug work-around
 Diga Sim sempre.

 NCP filesystem support (to mount NetWare volumes)
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem.

 OS/2 HPFS filesystem support (read only)
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem.

 System V and Coherent filesystem support
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem.

 UFS filesystem support (read only)
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem.

Character devices
 Standard/generic serial support
 Diga Sim se quiser suporte às suas seriais.

 Digiboard PC/Xx Support
 Diga Sim se tiver uma placa Digiboard.

 Cyclades async mux support
 Diga Sim se tiver um multiserial Cyclades.

 Stallion multiport serial support
 Diga Sim se tiver uma multiserial Stallion.

 SDL RISCom/8 card support
 Diga Sim se tiver uma multiserial SDL.

 Parallel printer support
 Diga Sim se for conectar uma impressora à sua máquina.

 Specialix IO8+ card support
 Diga Sim se tiver uma placa destas.

 Mouse Support (not serial mice)
 Diga Sim se tiver um mouse não serial.

 Support for user misc device modules
 Diga Sim se você tiver algo como por exemplo mesas digitalizadoras ou pens.

 QIC-02 tape support
 Diga sim se tiver um Tape Backup destes.

 Ftape (QIC-80/Travan) support
 Diga sim se tiver um Tape Backup destes.

 Advanced Power Management BIOS support
 Diga Sim se quiser suporte às caracteristicas green de sua máquina. Normalmente só diga Sim em notebooks.

 Watchdog Timer Support
 Diga Sim ser quiser suporte para Watchdog via Software ou Hardware.

Enhanced Real Time Clock Support
 Diga sim se quiser suporte ao RTC do seu micro. Necessário no caso de multiprocessamento.

Sound
Sound card support
 Diga Sim se quiser suporte à placas de som.

 ProAudioSpectrum 16 support
 Sound Blaster (SB, SBPro, SB16, clones) support
 Generic OPL2/OPL3 FM synthesizer support
 Gravis Ultrasound support
 MPU-401 support (NOT for SB16)
 6850 UART Midi support
 PSS (ECHO-ADI2111) support
 16 bit sampling option of GUS (_NOT_ GUS MAX)
 GUS MAX support
 Microsoft Sound System support
 Ensoniq SoundScape support
 MediaTrix AudioTrix Pro support
 Support for MAD16 and/or Mozart based cards
 Support for Crystal CS4232 based (PnP) cards
 Support for Turtle Beach Wave Front (Maui, Tropez) synthesizers
 Escolha a sua placa de som. De acordo com a placa escolhida, lhe serão feitas perguntas sobre ela, como por exemplo em qual I/O e IRQ ela está instalada.

 /dev/dsp and /dev/audio support
 Diga Sim, pois quase todos os programas acessam a placa de som através destes arquivos.

MIDI interface support
 Diga Sim se tiver uma saida MIDI na sua placa de som.

 FM synthesizer (YM3812/OPL-3) support
 Quase trodas as placas de som tem este sintetizador de som, logo diga Sim.

udio DMA buffer size 4096, 16384, 32768 or 65536
 Não mude, a não ser que esteja com problemas estranhos no som.

 Additional low level drivers
Diga sim se quiser ver outros drivers disponíveis.

Kernel hacking
 Kernel profiling support
 Diga Não a menos que você seja um expert em Linux.
 

3) Compilando o kernel

Após configurar o kernel, você deve rodar:

 # make dep

para que sejam criadas as dependências entre os varios fontes do kernel,depois digite:

 # make clean

para que seja feita uma limpeza da casa, garantindo que o kernel seja compilado por completo, sem que sejam usados trechos pré compilados anteriormente.
 Finalmente, digite:

 # make zImage

Sente na cadeira e espere (uns 7 minutos em um P200) enquanto o kernel compila e se compacta.
Há outros parametros de compilação para o make, como por exempolo para se compilar o kernel e não compilá-lo, porém este é o mais usado. 

Atualizando o kernel do Linux

4) Instalando o kernel

Se o kernel compilou com sucesso (*), voce terá no diretório arch/i386/boot o arquivo zImage, que é o kernel compilado e comprimido.
 Copie-o para a raiz:

 # cp arch/i386/boot/zImage /zImage.2.0.33

  Mesmo não usando módulos, é interessante digitar também os seguintes comandos, para que as referências antas aos módulos, se ouverem, sejam refeitas.

  # make modules
  # make modules-install

Edite o arquivo lilo.conf no diretório /etc

 # vi /etc/lilo.conf

que deve aparentar algo assim:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50

image=/vmlinuz
 label=linux
 root=/dev/hda3
 read-only

other=/dev/hda1
 label=dos
 table=/dev/hda

Onde há Linux e DOS instalados, e altere-o para ficar assim:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50

image=/zImage.2.0.33  \ linhas adicionadas
 label=linux          |
 root=/dev/hda3       |
 read-only            /

image=/vmlinuz
 label=linuxold  -> Linha alterada
 root=/dev/hda3
 read-only

other=/dev/hda1
 label=dos
 table=/dev/hda

Obs.: o primeiro bloco ‘image’ ou ‘other’ do arquivo será aquele selecionado no boot se não houver selecão

  Reconfigure o LILO:

  # lilo

  Finalmente, reinicie o computador e teste a nova versão.
  Caso tenha algum problema, quando aparecer,

  LILO boot:

  digite:

  linuxold

  e o sistema irá carregar o kernel antigo, te dando a chance de resolver o problema e tentar novamente.


(*) Se você tiver erros na compilação do kernel, verifique estes erros mais comuns:

Talvez você tenha habilitado muitas opções na configuração e o kernel esteja ficando grande demais.

Se você estiver tendo erros (normalmente tipo 11), principalmente se estes forem em lugares diferentes a cada compilação você pode estar na presença de uma máquina com problemas de memória (compilar um kernel com sucesso é reconhecido como o melhor teste para memórias que existe)

Tente usar o comando ‘make mrproper’ que faz uma limpeza mais profunda na configuração, inclusive deletando a sua configuração anterior.