A maior parte dos usuários do NetBSD termina, cedo ou tarde, por compilar um kernel personalizado. Desse modo, obtêm-se vários resultados apreciáveis.
reduzem-se consideravelmente as dimensões do kernel (por ex. de 2.5 MB para 1MB) e, portanto, o uso de memória. Na versão 1.5 do NetBSD, criando um kernel personalizado, pode-se passar de 4.7 MB a menos de 2 MB.
melhoram-se as performances.
otimiza-se o sistema.
são resolvidos os problemas de conflitos/reconhecimentos de periféricos.
aprofunda-se o conhecimento do sistema.
personalizam-se algumas opções (por exemplo o tipo de teclado, o offset do relógio da BIOS, etc.)
O programa de instalação (sysinst) não instala as fontes do kernel que devem, portanto, ser extraídas a mão. O arquivo que as contém é syssrc.tgz, que se encontra no diretório source/sets. O arquivo se descompacta com
# gzip -dc syssrc.tgz | (cd / ; tar xvf -)
É preciso ter um pouco de paciência porque os arquivos a extrair são muitos e a operação dura alguns minutos. As fontes são extraídas no diretório /usr/src/sys. Para acessá-lo pode-se inclusive usar o link simbólico /sys. Portanto os comandos
# cd /usr/src/sys # cd /sys
são equivalentes.
Terminada a instalação é possível remover as fontes relativas às arquiteturas que não nos interessam e poupar um pouco de espaço em disco (se isso for problema). Para fazer isso é necessário entrar no diretório /sys/arch e eliminar os subdiretórios desnecessários. Por exemplo, para a arquitetura i386 é suficiente conservar o diretório i386. Para outras versões de hardware do NetBSD é necessário conservar mais de um diretório de fontes, já que podem conter dependências.
Tudo está pronto para a criação de um kernel personalizado. Compilar um novo kernel não tem nada de difícil. As operações a executar (quatro ou cinco ao todo) são descritas no site do NetBSD.
Uma vez instaladas as fontes do kernel, antes de recompilar convém efetuar uma pequena modificação no layout do teclado italiano contido no arquivo /sys/dev/pckbc/wskbdmap_mfii.c. Na disposição por default faltam alguns caracteres úteis para os programadores, em particular parênteses, haspas e til. Eu utilizo estes recursos.
static const keysym_t pckbd_keydesc_it[] = { ... KC(8), KS_7, KS_slash, KS_braceleft, KC(9), KS_8, KS_parenleft, KS_bracketleft, KC(10), KS_9, KS_parenright, KS_bracketright, KC(11), KS_0, KS_equal, KS_braceright, KC(12), KS_apostrophe, KS_question, KS_grave, KC(13), KS_igrave, KS_asciicircum, KS_asciitilde, KC(26), KS_egrave, KS_eacute, KS_bracketleft, KS_braceleft, KC(27), KS_plus, KS_asterisk, KS_bracketright,KS_braceright, ...
Com o código precedente obtêm-se estas correspondências
Combinação | Caracter |
---|---|
Alt Gr + 7 | { |
Alt Gr + 8 | [ |
Alt Gr + 9 | ] |
Alt Gr + 0 | } |
Alt Gr + ' | ` |
Alt Gr + ì | ~ |
Alt Gr + é | [ |
Alt Gr + + | ] |
Shift + Alt Gr + è | { |
Shift + Alt Gr + + | } |
Driver de console: desde a versão 1.4 o NetBSD utiliza o driver multiplataforma wscons para o gerenciamento da tela e do teclado. As versões precedentes utilizavam pccons ou pcvt. Para maiores detalhes ver o Capítulo 13.
A recompilação do kernel é descrita de modo simples e preciso no site do NetBSD. Assim, sugiro que se faça referência àquelas instruções. Todavia, a seguir reporto-me a algumas indicações apenas para dar uma idéia do procedimento.
Para poder recompilar o kernel é necessário ter instalado o set do compilador (comp.tgz). A recompilação do kernel consiste dos seguintes passos:
Compilação do kernel
Modificar o arquivo de configuração do kernel
Configurar o kernel
Gerar as dependências
Recompilar
Instalar o novo kernel
O arquivo de configuração do kernel define o tipo, o número e as características dos dispositivos que devem ser suportados pelo kernel. O arquivo encontra-se no diretório /sys/arch/i386/conf. Para criar um arquivo personalizado convém utilizar como base uma das configurações existentes. Para a maior parte das plataformas a configuração GENERIC é um bom ponto de partida: remeta-se aos exemplos presentes no diretório /sys/arch/<arch>/conf. Muitas opções estão descritas nos comentários dos arquivos de configuração. Muitas outras estão descritas na página de manual options(4).
# cd /sys/arch/i386/conf/ # cp GENERIC MYKERNEL # vi MYKERNEL
Nomes: tradicionalmente os nomes utilizados para os arquivos de configuração estão em maiúsculas.
Quando se modifica um arquivo de configuração do kernel, são realizados basicamente dois tipos de operação.
desabilita-se o suporte para os periféricos não presentes no sistema e se habilita o suporte para aqueles que estão presentes (por exemplo, quem não tem dispositivos SCSI pode desabilitar o suporte para a interface SCSI no kernel).
habilita-se e se desabilita o suporte das características suportadas pelo kernel (por exemplo, o suporte para a compatibilidade com o Linux, etc.).
otimizam-se os parâmetros do kernel.
Para desabilitar uma linha do arquivo de configuração é necessário acrescentar um caracter "#" no início dessa mesma linha. Um bom ponto de partida para determinar o que se pode eliminar é o estudo do output do comando dmesg para cada linha do tipo
<XXX> at <YYY>
É necessário que no arquivo de configuração estejam presentes tanto XXX como YYY. Antes de chegar a uma configuração mínima, um pouco de experimentação é necessária. Para um sistema de desktop, sem periféricos SCSI e placas PCMCIA, pode-se chegar a produzir um kernel de dimensões bem menores que o genérico.
Também é bom dar uma olhada nas opções presentes no arquivo de configuração, desabilitando aquelas que não nos interessam. Cada opção é acompanhada de uma breve descrição. Muitas opções estão descritas mais aprofundadamente em options(4). Antes de recompilar convém definir as opções para o teclado italiano e para o fuso horário. (Há necessidade de desenvolvimento da opção para o teclado br-abnt2 e us com acentos (nota do tradutor).)
options RTC_OFFSET=-60 ... options PCKBD_LAYOUT="KB_IT"
Existe um script Perl que gera automaticamente um arquivo de configuração reduzido, analisando o output do dmesg. Esse script pode ser encontrado na URL http://www.feyrer.de/Misc/adjustkernel. Para poder executá-lo, naturalmente, é necessário ter instalado o Perl no sistema, o que é bem fácil de se fazer. Ver o Capítulo 8. A título de antecipação, um modo muito simples de instalar o Perl consiste em obtermos o pacote pré-compilado perl-5.00404.tgz e depois executar o comando:
# pkg_add perl-5.00404.tgz
Neste ponto o Perl já está instalado, configurado e pronto para funcionar. Mais fácil que isso...
O script se executa com:
# cd /sys/arch/i386/conf # perl adjustkernel GENERIC > MYKERNEL
Pessoalmente usei esse script apenas uma vez e deu ótimos resultados. Preste-se atenção, contudo, no fato de que o script configura as linhas relativas aos dispositivos e não as das opções.
Depois de ter modificado à vontade o arquivo de configuração do kernel (que estaremos supondo chamar-se MYKERNEL), dar o comando
# config MYKERNEL
Se o MYKERNEL não contém erros, o programa criará os arquivos necessários para poder compilar o kernel. Caso contrário deve-se voltar ao ponto anterior e corrigir os erros. O programa config analisa o arquivo de configuração indicado como parâmetro e cria os arquivos necessários para a compilação, habilitando os dispositivos selecionados.
Deslocar-se para o diretório criado pelo config no passo anterior, executar o comando make depend e, enfim, o comando make.
# cd ../compile/MYKERNEL # make depend # make
Na compilação podem-se verificar erros, caso em que ela própria se interrompe. Se isso ocorre, significa que o arquivo de configuração não foi modificado corretamente e é necessário corrigí-lo e repetir o procedimento. Um exemplo típico é o seguinte: a opção B, que exige a opção A, está ativa; a opção A, todavia, está comentada.
Uma compilação completa pode durar de poucos minutos a muitas horas, de acordo com o hardware utilizado. A tabela seguinte contém alguns exemplos:
Ao término da compilação será criado no diretório corrente o arquivo netbsd. O último passo a ser dado é a cópia do novo kernel em / (não sem antes renomear o kernel precedente).
# mv /netbsd /netbsd.old # mv netbsd /
Como já dito, personalizando o kernel podêmo-lo reduzir consideravelmente de tamanho. Por exemplo, ao término das operações precedentes se tem:
-rwxr-xr-x 1 root wheel 1342567 Nov 13 16:47 /netbsd -rwxr-xr-x 1 root wheel 3111739 Sep 27 01:20 /netbsd.old
Neste ponto não resta senão reinicializar o sistema com o comando reboot.
É sempre possível que, ao reinicialirmos, alguma coisa não corra como o esperado. No limite, o novo kernel poderia até mesmo não conseguir reinicializar. Neste caso não precisa se desesperar. Basta inicializar com o kernel precedente, que tinhamos providencialmente salvado, em modo monousuário, da seguinte maneira:
Reinicializar a máquina
Pressionar a barra de espaço quando aparecer o prompt do boot, durante a contagem regressiva de 5 segundos
boot:
Executar o comando
> boot netbsd.old -s
Executar os seguintes comandos
fsck / mount / mv netbsd.old netbsd exit