22 julho 2007

Adicionando módulos extra ao kernel instalado.

Boas, vou tentar aqui explicar como é o processo de adicionar um módulo extra kernel.

Preparação prévia:
— É necessário ter a source do kernel instalada e tem que ser a mesma versão do kernel que está a correr no sistema. Tenho visto muita gente confundir o instalar o kernel-source com compilar o kernel, mas não é verdade, compilar o kernel não tem nada a ver com simplesmente instalar a source dele.
A source do kernel basicamente não serve para nada ao sistema, mas é necessária quando se vai adicionar um módulo extra.
Instalar o kernel-source é simples... 1º consultar qual a versão de kernel que está a correr, isto pode ser feito em alguns programas gráficos, e na consola assim
$ uname -a
Vamos então instalar o kernel-source da versão correcta usando o gestor de pacotes da vossa distro.

Caso na vossa distro não exista esse pacote, a situação complica-se, terão que procurá-lo ou ir buscar em http://www.kernel.org/ , mas neste caso pode mesmo acontecer terem compilar novo kernel e ficar sem algumas funcionalidades, pois muitas distros usam kernels alterados (com patches) que não vão ser fáceis adquirir não estando disponíveis nos repositórios da distro. Mudar de distro é uma das soluções caso esbarrem com um problema destes.

De qualquer maneira o kernel-source depois de instalado ficará em
/usr/src/linux-2.6.18.2 (exemplo de versão)
e existirá um link simbólico
/usr/src/linux
que aponta para o verdadeiro kernel source instalado.
Este detalhe é importante caso tenham que instalar a source manualmente.

--É necessário ter o "gcc" instalado (Gnu Compiler Collection) e também o "make". Isto pode ser feito facilmente na maioria das distros recorrendo apenas ao gestor de pacotes dela. Convém que o gcc seja a mesma versão que compilou o kernel que corre, ou o módulo pode não funcionar. Normalmente distros estáveis instalam o gcc da versão correcta, mas isso nem sempre acontece com distros instáveis nem quando se evolui uma distro para uma versão mais recente (por exempo de mandriva 2006 para 2007.1) sem que se tenha evoluído o novo kernel activo (o núcleo do sistema operativo), e normalmente só utilizadores experientes se aventuram nestas coisas.

Preparação do módulo a compilar:
A maior parte dos módulos vêm empacotados no arquivo tipo tar.bz, mas há inclusive outros que têm auto compiladores e instaladores como a driver gráfica da nvidia. vou tentar descrever exemplos dos dois tipos.

Os que vêm empacotados, podem ser compilados em qualquer localização, eu costumo deixá-los ao lado do kernel source, sei que vou precisar compilá-los de novo quando mudar de kernel e assim sei onde estão. Copio o arquivo para /usr/src e descompacto-o lá usando comandos como "gunzip", "bunzip2" e "tar", e acabam ficando instalados em /usr/src/gspcav1-20070110 (neste exemplo estou a mostrar a driver para webcams gspca já numa versão ultrapassada).
Notem que quando mudamos de kernel activo, é preciso voltar a instalar todos os módulos extra que usamos, pois esses ficaram no kernel antigo e não são mais utilizáveis.

Tenho notado uma grande diferença entre "compilar programas em source" e " compilar módulos em source". É que ao quando compilamos programas, muitas vezes somos confrontados com dependências que não temos e nem sempre é fácil resolvê-las, além disso geralmente é preciso correr um comando ./configure antes da compilação e esse comando chega a ter que levar parâmetros extras. Normalmente compilar um módulo tem apenas uma dependência, a de ter o kernel-source instalado.

Compilar o módulo:
No caso do gspca que foi desempacotado manualmente, apenas posiciono a minha linha de comandos em /usr/src/gspcav1-20070110 e aplico estes comandos:
# make
# make install
normalmente o make install, instala o modulo na sua localização e actualiza a lista de módulos do sistema, em caso de dúvidas se a lista foi actualizada, podem confirmar isso manualmente com o comando
# depmod -ae
e depois com
# modinfo gspca
podem verificar que o módulo está pronto a ser usado pois retorna informação dele.

Agora o módulo auto-instalável da nvidia:
Comecem por ir buscá-lo em http://www.nvidia.com/object/unix.html
tenham atenção que existem muitas versões e nem sempre a mais recente é a mais correcta para instalar no nosso sistema dependendo do sistema em si e também da placa que temos. Na área "arquive" estão lá muitas versões para experimentar. Sugiro começar pela mais recente e ir andando para trás uma versão de cada vez caso tenham problemas.
Os instaladores puxados do site nvidia podem ser guardados numa pasta qualquer e instalá-dos apartir de lá.
Este módulo tem (ou tinha) uma particularidade: não pode ser instalado estando o servidor gráfico X a funcionar, por isso procurem maneira de terminar o ambiente gráfico e logar como root na linha de comandos primária do sistema. Podem fazer isso fechando a vossa sessão, depois escolher "ir para consola" disponível no kdm ou carregar em CTRL+ALT+F1. Depois de logar na linha de comandos primária, terminar o X com # init 3, ou dando ordem de terminar ao script que controla o arranque do X, exemplo # /etc/init.d/xserver-xorg stop.
Depois usar o comando "cd" para posicionar a linha de comandos na pasta para onde descarregaram o (ou os) instaladores nvidia. Accionar um dos instaladores assim
# sh NVIDIA-Linux-x86-1.0-9639-pkg1.run (este nome de ficheiro é só um exemplo)
e seguir as indicações apresentadas no écran que o módulo fica instalado.

Uma pequena adição...
Depois da instalação usar simplesmente o comando # X
para ver se o servidor gráfico arranca e se já estiver a usar a driver nvidia, deverão ver o "logo" na nvidia do écran antes de aparecer o mouse. Para terminar este teste carreguem em CTRL+ALT+Backspace.
Caso nao esteja ainda a aparecer o logo, e o X arranque, é porque o sistema ainda está a usar a driver que vem com o sistema, então editem o ficheiro /etc/X11/xorg.conf, procurem a linha onde está
Driver "nv" e alterem para Driver "nvidia". Repitam o teste do X.
Estando tudo ok, voltem a arrancar o modo gráfico mudando para #init 5 ou #/etc/init.d/xserver-xorg start, ou em ultimo caso reiniciem o sistema todo.
Quando a usarem a driver nvidia, podem consultar com o programa "nvidia-settings" ou com o comando "glxinfo" se têm esta indicação: direct rendering: Yes
Se não tiverem a indicação e tenham a certeza que a placa suporta aceleração 3D, então algo ficou errado, possivelmente faltam pacotes "mesa" instalados. Não tenho maneira de indicar o que estará mal, cada caso é um caso e deve ser observado separadamente. Se tudo estiver ok, então podem testar a performance da vossa placa puxando por ela com programas que usem glx, especialmente com jogos.

nota. Sei que existem outros métodos de instalar a driver nvidia, mas isso é porque ela foi empacotada doutra maneira nesses métodos. O método que descrevi é o que se usa quando se vai buscar a driver à origem dela.

Abraços
ArameFarpado

comentários:

Já tive o privilégio de compilar um kernel, compilar módulos para o kernel e compilar programas e nunca tive grandes problemas.
Com os driver da nvidia, a coisa não podia ser mais simples. O instalador trata de tudo sozinho, pelo menos foi isso que aconteceu no meu caso.