logo titulo
anterior indice proximo

O kernel do Linux


Configurar um kernel para o Linux deixou de ser um "bicho de 7 cabeças" como era antigamente. Mesmo sendo uma operação demorada, e exigir certo número de informações sobre o hardware da máquina, é a melhor maneira de se otimizar o sistema para a sua finalidade alvo. Apesar de existirem diferentes imagens do kernel para grande parte das necessidades dos usuários nas distribuições correntes, o administrador de sistemas deverá ter experiência na compilação de um kernel mais "sintonizado" com a aplicação que terá o sistema. Voce deve, entretanto, evitar o uso de kernels com o segundo número ímpar, pois são as versões de desenvolvedores. Se você não pretende ajudar a melhorar o fonte do Linux depurando e reportando (ou até consertando) os defeitos encontrados, fique fora das versões de desenvolvimento. Procure os fontes da versão estável mais recente. Por outro lado, não seja "maníaco" em manter sempre a sua versão do kernel o mais atualizada possível. Existem sites na internet rodando versões do Linux de vários anos atrás. Elas são estáveis, apesar de não suportarem cada ítem de hardware (discos, cdrom, etc) da atualidade, porque estes ítens não existiam na época que ela foi criada.
Não se apavore se voce não sabe absolutamente nada de C. O kernel é bastante fácil de compilar se voce seguir à risca todos os passos do roteiro dado a seguir. Não há possibilidade de voce destruir nada no seu sistema. Entretanto, como precaução, voce poderá se sentir mais seguro tendo um disquete com o boot atual em mãos, ou eixar no /etc/lilo.conf uma opção de boot com o seu kernel antigo (renomei-o logo com mv zImage zImage-old, no diretório /boot ou na raiz).

Roteiro para a compilação de um kernel:

A figura abaixo mostra algumas janelas de make xconfig, com a janela principal, a janela que escolhe os filesystems (um pouco mais longa que o que aparece na tela, rolável com o scrollbar à direita), e uma das janelas de ajuda (help). Cada botão na janela principal abre uma janela de configuração diferente. Voce também pode navegar pelos botões next e prev na janela com os radiobuttons de configuração. Cada opção possível tem à sua direita um botão help (ajuda) customizado. As configurações são "lembradas" entre uma execução e outra, portanto, voce não precisa decidir tudo logo, ou pode tentar novamente, caso a sua primeira tentativa falhou. Anote todas as suas opções para não se perder nas inúmeras combinações...

make xconfig

módulos do kernel


O kernel do Linux é monolítico [31], ou seja, todas as funcões do kernel estão em um único "programa" que é carregado pelo loader (o nosso amigo LILO, por exemplo).

Iniciaremos pelos comandos que listam propriedades do kernel: lsmod lista os módulos existentes, o tamanho ocupado (em páginas de 4 Kbytes e os (outros) módulos que precisam do módulo presente. Eis um exemplo (do meu próprio sistema):

Module:        #pages:  Used by: 
sr_mod             4            0 
sd_mod             3            0 
sg                 1            0 
aha152x            6            0 
scsi_mod           7    [sr_mod sd_mod sg aha152x]      4 
sound             29            1 
ppp                5            0 
slhc               2    [ppp]   0 
lp                 2            0

Neste caso, scsi_mod é usado por 4 outros módulos, e slhc é usado pelo módulo ppp. A consequência disto é que voce não poderá retirar um módulo da memória sem antes retirar todos os que o referenciam. Por exemplo, para retirar ppp, eu precisaria primeiro retirar o slhc.

Cada módulo instala vários símbolos, que podem igualmente serem listados, com o programa ksyms. Ele mostra a posição absoluta na memória da função, seu nome e o móulo a que se refere. Veja um fragmento da execução desse comando na minha máquina:

281ECE8 dma_ioctl                   [sound] 
2828378 sound_timer_syncinterval    [sound] 
2813000 --- (20k) ---               [ppp] 
2816678 ppp_register_compressor     [ppp] 
28166D8 ppp_unregister_compressor   [ppp] 
2816884 ppp_crc16_table             [ppp] 
2810000 --- (8k) ---                [slhc] 
2810004 slhc_init                   [slhc] 
28101E4 slhc_free                   [slhc]

Os scripts em /etc/rc.d já se encarregam de instalar os módulos existentes na maioria das distribuições Linux, mas provavelmente voce irá quere um funcionamento diferente. Um kernel muito grande consome muita memória, e de nada adianta voce ter instalado os drivers para controle da placa de som, por exemplo, se em um dado momento voce não irá usar nenhuma aplicação com som. Instalar e remover módulos é bastante simples, dependendo alguns comandos: insmod, depmod, modprobe e rmmod. Essencialmente, voce usará modprobe <módulo> para instalar um módulo, e rmmod <módulo> para removê-lo.

Um script em /etc/rc.d deverá ter o comando depmod -a para criar uma lista de dependências entre os módulos, que é armazenada em /lib/modules/<versão do kernel>/modules.dep (no meu caso /lib/modules/2.0.30/modules.dep). Se voce possui mais de uma versão do kernel instalada, este comando no script permitirá voce usar mais de um kernel ao mesmo tempo, carregando os módulos apropriados para o kernel usado no momento.

instalando placas plug-n-play


O kernel estável atual não possui suporte para placas plug-n-play [32], mas existe um programa, isapnptools, que configura e permite usar esse tipo de placas com o linux, desde que o driver correspondente seja compilado como um módulo. Essa restrição se deve ao fato de que a plac precisa ser configurada antes do kernel tentar acessar os seus registradores.

O pacote isapnptools contém um programa (pnpdump) que detecta as palcas existentes e emite um arquivo texto que será usado na configuração do dispositivo. Usado na forma pnpdump -autoconfig, a maioria das placas pode ser configurada automaticamente, sem intervenção do operador. O arquivo produzido, isapnp.conf será colocado no diretório /etc e está pronto. Agora, voce deverá editar os seus scripts para inserir (em rc.local, por exemplo) a linha de comando:

     isapnp /etc/isapnp.conf

e reboot a máquina. Finalmente tente carregar o(s) módulo(s) com modprobe normalmente. Se voce conhece razoavelmente a placa que está sendo instalada, poderá tentar configurar manualmente para os endereços, interrupção e canais de dma (acesso direto à memória) desejados, mas leia antes a documentação que acompanha o pacote isapnptools.

Fragmento do arquivo isapnp.conf (retirados os comentários, que são muitos!):

(READPORT 0x0273) 
(ISOLATE) 
(IDENTIFY *)
(CONFIGURE OPT0931/-1 (LD 0 
#     ANSI string -->AUX0<-- 
#(ACT Y) ))
(CONFIGURE OPT0931/-1 (LD 1 
#     ANSI string -->OPTi Audio 16<--
(IO 0 (BASE 0x0530))
(IO 1 (BASE 0x0388))
(IO 2 (BASE 0x0220))
(IO 3 (BASE 0x0e0e))
(INT 0 (IRQ 10 (MODE +E)))
(DMA 0 (CHANNEL 1))
(DMA 1 (CHANNEL 0))
(ACT Y)
))


rpragana
Tue Jan 12 20:37:36 EDT 1999