E provavel que mais dia menos dia , voce se veja diante da necessidade
de gerar um novo kernel para sua maquina , quer seja para incluir suporte
a novos dispositivos ou para remover o suporte a dispositivos que voce
nao possua , economizando deste modo memoria.
De um modo geral a grande vantagem de se gerar um kernel otimizado e a
economia de memoria que isto proporciona , alem de proporcionar um boot
muito mais rapidoe e claro permitir a utilizacao de dispositivos nao previstos
no kernel Generico.
Para poder gerar um novo kernel voce precisa ter instalado o codigo fonte
do FreeBSD ( /usr/src ) , dentro deste diretorio voce encontrara
diversos subdiretorios, mas apenas um ira nos interesar por hora, /usr/sys/sys/i386/conf
.
Neste diretorio voce ira encontrar diversos arquivos , entre eles o
GENERIC , arquivo de configuracao para
o kernel que e usado na instalacao do FreeBSD e o LINT
, este arquivo traz uma entrada para todos os dispositivos suportados pelo
FreeBSD e e geralmente utilizado como fonte de referencia. Eu recomendo
que voce de uma olhada em ambos para verificar seu formato e tambem os
dispositivos que estao disponiveis. O arquivo LINT traz diversos comentarios
em ingles simples que nao devem ser obstaculo ao seu entendimento, eu ja
estou preparando uma traducao deste mas o mesmo ainda nao se encontra pronto,
sorry por este inconveniente :-| .
O processo de geracao de um novo kernel e constituido de 2 etapas:
- Geracao do arquivo de configuracao do kernel, e
- Compilacao e instalacao do novo kernel.
E uma pratica usual entre os Administradores de Sistema , dar ao kernel
o nome do maquina que o abriga , isso facilita muito se no futuro voce
estiver operando em uma rede com diversas maquinas FreeBSD e usar apenas
uma para desenvolvimento , evitando confusoes e poupando noites de insonia
;-) , o nome do arquivo deve estar em letras maiusculas. Uma outra pratica
usual e usar o arquivo GENERIC como ponto de partida , evitando iniciar
do zero, eu recomendo que siga os procedimentos acima.
deste modo , vamos a geracao do nosso kernel , o hostname que o ira abrigar
e "FreeBSD1".
- Primeiro Passo - Faca uma copia do arquivo GENERIC:
# cd /usr/src/sys/i386/conf
# cp GENERIC FREEBSD1
- Segundo Passo - Edite o arquivo FREEBSD1 , com seu editor preferido
, removendo o suporte aos dispositivos que nao possua e adcionando suporte
a outros que voce necessite. Utilize o arquivo LINT
como fonte de referencia. Apos editar o arquivo nao esqueca de salva-lo
;-).
Veja abaixo um resumo dos dispositivos suportados pelo FreeBSD:
Linhas obrigatorias:
A seguintes palavras chaves sao obrigatorias no arquivo de configuracao de
qualquer kernel que voce venha a
compilar.
- machine ``i386''
A primeira linha e' machine, uma vez que o FreeBSD
roda apenas sob a arquitetura intel ou compativel, associado
a esta palavra chave esta o valor "i386".
- cpu ``cpu_type''
A proxima linha e' cpu, que inclui no kernel o suporte
para cada tipo de CPU suportada pelo FreeBSD.
Os valores possiveis para cpu_type sao:
o I386_CPU
o I486_CPU
o I586_CPU (Pentium)
o I686_CPU (Pentium Pro)
O kernel generico possui suporte a todos os tipos de CPU,
de modo que ao recompilar seu kernel e recomendado que voce
inclua no seu kernel, suporte apenas para a CPU que voce possui.
Isso ira economizar preciosos KB de memoria RAM do seu sistema.
- ident machine_name
A proxima linha e ident, esta e a identificacao do seu kernel.
Uma boa escolha e utilizar o hostname como nome do kernel, isso facilita
quando se possui varios hosts, cada um com um kernel diferente, em uma
mesma rede.
- maxusers numero
Esta linha define o tamanho de varias tabelas importantes do sistema.
De uma forma geral esta variavel deve ter o valor definido de acordo
com o numero de usuarios simultaneos que voce espera ter em seu sistema,
pois o numero maximo de processos simultaneos que seu sistema podera
executar, sera dado pela expressao: 20 + 16 * maxusers
OBS: O valor definido como maxusers nao limita o numero de usuarios
que podem logar simultaneamente no servidor.
- config kernel_name root on root_device
Esta linha especifica a localizacao e o nome do kernel.
A variavel kernel_name devera ter sempre o valor kernel , ja
a variavel root_device , devera ter o valor /dev/wd0, caso seu HD
seja IDE ou /dev/sd0 se seu HD for SCSI.
Opcoes gerais:
- options MATH_EMULATE
Esta linha informa ao kernel para simular um co-processador matematico caso
seu computador nao possua um. Voce so vai precisar desta linha se seu PC for
um 386 ou um 486 SX.
- options ``COMPAT_43''
Esta linha inclui ao seu kernel, compatibilidade com o 4.3 BSD.
- options BOUNCE_BUFFERS
Dispositivos ISA ou EISA , operando no modo de compatibilidade ISA,
so podem acessar sua memoria DMA em sistemas com menos de 16 MB de RAM.
Esta opcao ira permitir que os dispositivos que usam DMA funcionem em sistemas
com mais de 16 MB de memoria.
- options UCONSOLE
Esta opcao ira permitir a seus usuarios definir um console para o qual
deverao ser enviadas todas as mensagens enviadas a voce (talk, write, etc).
- options SYSVSHM
Esta linha prove suporte ao sistema de memoria compartilhada do System V. Se voce pretende
emular programas Linux ou jogar games como o DOOM ou QUAKE nao deixe de incluir
esta linha ao seu kernel.
- options SYSVSEM
Esta linha prove suporte ao sistema de semafaros do System V.
- options SYSVMSG
Esta linha prove suporte ao sistema de mensagens do System V.
- options FFS
Esta linha inclui no kernel o suporte basico ao sistema de arquivos de um HD.
Linha obrigatoria para que possui um HD.
- options NFS
Esta linha inclui no kernel suporte ao sistema de arquivos NFS.
Se voce nao planeja usar seu sistema como servidor ou cliente NFS
voce pode remover esta linha do seu kernel.
- options MSDOSFS
Esta linha inclui no kernel suporte ao sistema de arquivos do MS-DOS.
Se voce nao planeja montar nehum HD que utilize este sistema de arquivos,
voce pode remover esta linha do seu kernel.
- options ``CD9660''
Esta linha inclui no kernel suporte ao sistema de arquivos ISO 9660 para
Cd-ROMs. Voce pode remover esta linha de seu kernel caso voce nao
possua um drive de CD-ROM. CDs de audio nao precisam deste suporte.
- options PROCFS
Esta linha inclui no kernel suporte ao sistema de arquivos utilizado
pelo sistema para gravar informacoes sobre os processos em execucao (/procs),
linha obrigatoria para a maioria dos sistemas.
- options MFS
Esta linha inclui no kernel o suporte ao sistema de arquivos "Memory-mapped".
Basicamente um disco em memoria RAM usado para armazenar rapidamente arquivos temporarios.
- options QUOTA
Esta linha inclui no seu kernel o suporte ao sistema de quotas dem disco.
- options INET
Inclui suporte para Networking (rede).
- controller isa0
Esta linha inclui ao kernel suporte a barramentos ISA.
- controller pci0
Esta linha inclui ao kernel suporte a barramentos PCI.
- controller fdc0
Esta linha inclui no seu kernel suporte a controladora de floppy drives (Discos flexiveis ou tapes de backup)
- controller wdc0
Esta linha inclui no seu kernel suporte a controladora IDE primaria.
Os dispositivos wd0 e wd1 sao respectivamente os HDs master e slave.
wdc1 e a controladora IDE secundaria.
- device wcd0
Esta linha inclui no seu kernel suporte a CD-ROMs IDE. Se voce possui
um CD-ROM IDE certifique-se de incluir a linha "options ATAPI" ao seu kernel.
- device npx0 at isa? port ``IO_NPX'' irq 13 vector npxintr
npx0 e a interface para a unidade de ponto flutuante do co-processador
matematico. NAO REMOVA ESTA LINHA!!!
- device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr
Inclui suporte ao tape drive QIC-02/QIC-36
- device mcd0 at isa? port 0x300 bio irq 10 vector mcdintr
Inclui suporte a CD-ROMs Mitsumi (LU002, LU005, FX001D).
- device scd0 at isa? port 0x230 bio
Inclui suporte a CD-ROMs Sony (CDU31, CDU33A).
- controller matcd0 at isa? port ? bio
Inclui suporte a CD-ROMs Matsushita/Panasonic.
- controller bt0 at isa? port ``IO_BT0'' bio irq ? vector btintr
Inclui suporte a maioria das controladoras SCSI da Buslogic.
- controller uha0 at isa? port ``IO_UHA0'' bio irq ? drq 5 vector uhaintr
Inclui suporte as controladoras SCSI da UltraStor modelos 14F e 34F.
- controller ahc0
Inclui suporte as controladoras SCSI Adaptec modelos 274x/284x/294x.
- controller ahb0 at isa? bio irq ? vector ahbintr
Inclui suporte a controladora SCSI Adaptec modelo 174x.
- controller aha0 at isa? port ``IO_AHA0'' bio irq ? drq 5 vector ahaintr
Inclui suporte a controladora SCSI Adaptec modelo 154x.
- controller aic0 at isa? port 0x340 bio irq 11 vector aicintr
Inclui suporte a controladora SCSI Adaptec modelo 152x e as placas de
som usando a Adaptec AIC-6360.
- controller nca0 at isa? port 0x1f88 bio irq 10 vector ncaintr
Inclui suporte as placas ProAudioSpectrum usando as controladoras
NCR 5380 ou Trantor T130.
- controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr
Inclui suporte a controladora SCSI Seagate ST01/02 8 bit.
- controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr
Inclui suporte a controladora SCSI Western Digital WD7000.
- controller ncr0
Inclui suporte as controladoras PCI SCSI modelos NCR 53C810, 53C815, 53C825, 53C860 e 53C875.
- options ``SCSI_DELAY=15''
Esta linha informa ao kernel para fazer uma pausa de 15 segundos
antes de testar cada dispositivo SCSI em seu sistema.
- controller scbus0
Se voce possui alguma controladora SCSI, esta linha prove um suporte
generico aos dispositivos SCSI. Linha obrigatoria caso voce possua
algum dispositivo SCSI.
- device sd0
Inclui suporte a HDs SCSI.
- device st0
Inclui suporte a tape drives SCSI.
- device cd0
Inclui suporte a CD-ROMs SCSI.
- device sc0 at isa? port ``IO_KBD' tty irq 1 vector scintr
sc0 e o drive default do console. Consulte o arquivo LINT para ver as demais
opcoes
- options ``PCVT_FREEBSD=210''
Linha obrigatoria quando se utiliza o driver de console vt0
- options XSERVER
Linha obrigatoria quando se utiliza o driver de console vt0 e se pretende rodar o XFree86.
- device mse0 at isa? port 0x23c tty irq 5 vector ms
Insira esta linha caso voce possua um mouse Logitech ou um mouse
ATI InPort.
- device psm0 at isa? port ``IO_KBD'' conflicts tty irq 12 vector psmintr
Insira esta linha caso voce possua um mouse do tipo PS/2.
- device sio0 at isa? port ``IO_COM1'' tty irq 4 vector siointr
Inclui suporte as suas portas seriais, sio0 = COM1 , sio1 = COM2,
sio2 = COM3, sio3 = COM4, cada porta precisa de um irq exclusivo.
- device lpt0 at isa? port? tty irq 7 vector lptintr
Inclui suporte a suas portas paralelas
- device de0
Inclui suporte a placas de rede ethernet baseadas nos chips
DC21040, DC21041 e DC21140 da Digital.
- device fxp0
Inclui suporte a placa de rede ethernet Intel EtherExpress Pro/100B.
- device vx0
Inclui suporte a placas de rede ethernet 3Com modelos 3C590 e 3C595.
- device cx0 at isa? port 0x240 net irq 15 drq 7 vector cxintr
Inclui suporte a placas multiportas Cronyx/Sigma sync/async.
- device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 vector edintr
Inclui suporte a placas de rede ethernet da Western Digital
SMC 80xx e 8216; Novell NE1000 e NE2000; 3Com 3C503; HP PC Lan Plus (HP27247B e HP27252A)
- device el0 at isa? port 0x300 net irq 9 vector elintr
Inclui suporte a placa de rede ethernet 3Com 3C501.
- device eg0 at isa? port 0x310 net irq 5 vector egintr
Inclui suporte a placa de rede ethernet 3Com 3C505.
- device ep0 at isa? port 0x300 net irq 10 vector epintr
Inclui suporte a placa de rede ethernet 3Com 3C509.
- device fe0 at isa? port 0x240 net irq ? vector feintr
Inclui suporte a placas de rede ethernet Fujitsu MB86960A/MB86965A.
- device fea0 at isa? net irq ? vector feaintr
Inclui suporte ao adptador FDDI DEC DEFEA EISA.
- device ie0 at isa? port 0x360 net irq 7 iomem 0xd0000 vector ieintr
Inclui suporte a placas de rede ethernet AT&T StarLAN 10 e EN100; 3Com 3C507; padrao NI5210.
device ix0 at isa? port 0x300 net irq 10 iomem 0xd0000 iosiz 32768 vector ixintr
Inclui suporte a placa de rede ethernet Intel EtherExpress 16.
- device le0 at isa? port 0x300 net irq 5 iomem 0xd0000 vector le_intr
Inclui suporte a placas de rede ethernet Digital EtherWorks 2 e EtherWorks 3 (DEPCA,
DE100, DE101, DE200, DE201, DE202, DE203, DE204, DE205, DE422).
- device lnc0 at isa? port 0x300 net irq 10 drq 0 vector lncintr
Inclui suporte a placas de rede ethernet Lance/PCnet (Isolan, Novell NE2100, NE32-VL).
- device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr
Inclui suporte ao controlador ethernet PCMCIA da IBM/National Semiconductor.
- device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr
Inclui suporte ao controlador ethernet 3Com PCMCIA Etherlink III.
- pseudo-device loop
Interface de loopback para TCP/IP. Linha obrigatoria.
- pseudo-device ether
Linha obrigatoria caso voce possua alguma placa de rede.
- pseudo-device sl numero
Inclui suporte ao protocolo SLIP, o numero especificado determina
quantas conexoes SLIP seu server pode manter simultaneamente.
- pseudo-device ppp numero
Inclui suporte ao protocolo PPP, o numero especificado determina
quantas conexoes PPP seu server pode manter simultaneamente, atraves do pppd.
- pseudo-device tun numero
Inclui suporte ao protocolo PPP, o numero especificado determina
quantas conexoes PPP seu server pode manter simultaneamente, atraves do ppp.
- pseudo-device bpfilter numero
Inclui suporte ao "Berkeley packet filter" ou melhor dizendo
inclue suporte necessario para o IPFW
- controller snd0
Inclui suporte para uma placa de som generica. Linha obrigatoria caso voce
possua uma placa de som.
- device pas0 at isa? port 0x388 irq 10 drq 6 vector pasintr
Inclui suporte a placa de som ProAudioSpectrum audio digital e MIDI.
- device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr
Inclui suporte a placa de som SoundBlaster audio digital.
- device sbxvi0 at isa? drq 5
Inclui suporte a placa de som SoundBlaster 16-bit audio digital.
- device sbmidi0 at isa? port 0x330
Inclui suporte a interface MIDI da SoundBlaster 16, se voce possue uma SB16
voce deve inserir esta linha ou seu kernel nao ira compilar!
- device gus0 at isa? port 0x220 irq 10 drq 1 vector gusintr
Inclui suporte a placa de som Gravis Ultrasound.
- device mss0 at isa? port 0x530 irq 10 drq 1 vector adintr
Inclui suporte ao sistema de som da Microsoft.
- device opl0 at isa? port 0x388 conflicts
Insira esta linha se voce possue uma placa de som e pretende executar
arquivos MIDI com o programa playmidi.
- device mpu0 at isa? port 0x330 irq 6 drq 0
Inclui suporte a placa de som Roland MPU-401.
- device uart0 at isa? port 0x330 irq 5 vector ``m6850intr''
Inclui suporte a interface 6850 UART para MIDI.
- device pca0 at isa? port ``IO_TIMER1'' tty
Inclui suporte a audio digital atraves dos auto-falantes do PC.
- pseudo-device gzip
Esta linha permite ao FreeBSD executar o rpograma gzip.
- pseudo-device log
O log e usado para gravar as mensagens de erro do kernel. Linha obrigatoria
- pseudo-device pty number
Limita o numero simultaneo de logins remotos e/ou janelas xterm, maximo 64.
- device joy0 at isa? port ``IO_GAME''
Inclui suporte a PC joystick.
- pseudo-device speaker
Inclui suporte ao alto-falante de seu PC
- Terceiro passo - Compile o novo Kernel , para isso siga os procedimentos
abaixo:
# /usr/sbin/config FREEBSD1
# cd ../../compile/FREEBSD1
# make depend
# make
- Quarto e ultimo passo - Instale o novo kernel
# make install
Ao executar o ultimo passo o Kernel novo sera copiado para a raiz do
sistema ( / ) com o nome kernel (/kernel) e o seu antigo kernel sera renomeado
para kernel.old. Agora de shutdown em sua maquina para que o
novo kernel seja utilizado:
# shutdown -r +0
OBS: Se por algum motivo sua maquina no bootar
com o novo kernel nao se desespere! No momento do boot digite o nome do
seu kernel antigo , kernel.old , que o boot ocorrera normalmente , verfique
entao o arquivo de configuracao e veja se esta tudo correto. E gere um
novo kernel. Mas e recomendado que faca um backup do kernel atual , caso
o segundo kernel falhe ( gere uma copia com o nome kernel.bak por exemplo
).