Compilando Drivers

De Fórum Debian Wiki

Índice de conteúdo

Introdução

Para que alguns periféricos como Placas de modens, rede, wireless, vídeo e TV funcionem corretamente, não basta instalar o driver certo. É necessário criar um módulo do driver para o kernel utilizado, para que com isso, o driver se integre com o kernel e seja carregado automaticamente na inicialização do sistema.

Antes de construir modulos, compilando através das fontes, deve-se preparar o ambiente instalando um conjunto de ferramentas para compilar.

Pacotes necessários

Descrição

Esse artigo irá listar os pacotes básicos para a compilação. Alguns drivers podem precisar de softwares adicionais.

build-essential

Este pacote contém uma lista informativa de pacotes que são considerados essenciais ("build-essential") para a construção de pacotes Debian (.deb).

module-assistant

A ferramenta module-assistant ajuda usuários e mantenedores com o gerenciamento de módulos externos ao núcleo empacotados para Debian. Ele pode fazer:

  • Preparação automatizada do ambiente de construção para compilação de módulos (ex. detecção automática e instalação dos fontes/cabeçalhos necessários);
  • Baixar os fontes do módulo automaticamente;
  • Configuração e rastreio de pacotes de módulos externos e localmente construídos;
  • Múltiplas construções semi-automatizadas para múltiplas versões de núcleo;

Header e Source do Kernel

Os headers, ou cabeçalhos, incluem um conjunto de endereços e comandos, necessários para que o instalador de algum driver conheça o Kernel em que está trabalhando e consiga gerar um módulo sob medida para ele, mesmo sem ter o código fonte completo. É como um marceneiro que constrói móveis sob medida apenas com as medidas dos cômodos da casa.

O pacote kernel-source contém o código fonte completo do kernel. Ele é usado por alguns drivers como o do Vmware.

Instalação

Caso possua os CDs ou DVDs da sua instalação você pode tentar instalar os pacotes direto deles adicionando-os com o comando:

apt-cdrom add

Caso possua conexão à Internet, acesse esse http://wiki.forumdebian.com.br/index.php/Sources.list artigo] e adicione alguns repositórios. Abra um terminal, logue-se como root e digite:

aptitude update
aptitude install linux-kbuild-`uname -r | cut -f1 -d-` libncurses5-dev 
aptitude install build-essential module-assistant linux-headers-`uname -r` linux-source-`uname -r | cut -f1 -d-`

Tente agora efetuar a criação dos drivers. Caso continue ocorrendo erros continue os procedimentos abaixo.

Problemas e soluções

Se erros como unresolved symbols, vmlinuz.version.h not found ou qualquer outro que esteja impedindo a finalização do processo de compilação, então siga as instruções abaixo. Em alguns casos de drivers mais antigos e não adaptados para os novos kernels, pode ocorrer erros da falta do config.h para corrigir isso deve-se criar um link simbólico no autoconf.h depois de terminar os procedimentos deste wiki:

cd /usr/src/linux/include/linux
ln -s autoconf.h config.h

Source do kernel

Descubra a versão do seu kernel com o comando:

uname -r | cut -f1 -d-

Caso não consiga o pacote do source e headers do kernel pelo apt-get então você terá que instalar manualmente, baseado na saída do comando acima, acesse esse link e baixe a versão do source correspondente ao seu kernel. Depois copie ou mova-o para a pasta /usr/src.

Extraindo o Source

  • Todos os comando abaixo devem ser executados como root.

Agora vamos extrair o pacote source, vá até o diretório:

cd /usr/src

Extraia o pacote:

bunzip2 -c linux-source-`uname -r | cut -f1 -d-`.tar.bz2 | tar xvf -


Criando os links simbólicos:

cd /usr/src

Removendo antigo link caso exista:

rm linux

Criando o novo link:

ln -s /usr/src/linux-source-`uname -r | cut -f1 -d-` linux 

Crie outro link no diretório /lib/modules:

cd /lib/modules/`uname -r`

Removendo antigo link, caso exista:

rm build 

Criando o novos links simbólicos:

ln -s /usr/src/linux-source-`uname -r | cut -f1 -d-` build
ln -s /usr/src/linux-source-`uname -r | cut -f1 -d-` source


Provavelmente este link simbólico do build em /lib/modules/`uname -r` já exista e esteja apontando para o headers, alguns pacotes de drivers ( .tar) passam sem dar erros com esse apontamento, outros não.

Por precaução execute o comando abaixo, ele vai criar um link para a fonte do kernel, alguns instaladores usam localizações diferentes para encontrar os arquivos headers do sistema:

ln -s /usr/include/linux /usr/src/linux

Preparando o Source do Kernel

Agora vamos fazer com que o source do kernel tenha a mesma configuração do kernel ativo:

cd /usr/src/linux
make mrproper
cp /boot/config-`uname -r` .config

Agora edite o arquivo Makefile com:

mcedit /usr/src/linux/Makefile

Ou se preferir:

vi /usr/src/linux/Makefile

Altere os dados no parâmetro "EXTRAVERSION" que está no inicio do arquivo:

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = xx
EXTRAVERSION = -x-xxx
( sendo que x é a versão apresentada no comando uname -r )

Como você baixou a versão do source referente ao seu kernel então o SUBLEVEL já está correto.

Verificando a versão do Compilador

Apesar dos comandos anteriores, é importante verificar se a versão do gcc é a mesma na qual o seu kernel atual foi compilado, para isso execute os seguintes comando no terminal:

cat /proc/version

Observe na saída a versão do gcc e compare com a saída do comando:

gcc --version

Caso seja diferente, deve-se verificar se possue instalado o gcc e criar o link simbólico correto:

apt-get install gcc-x.x
ls -l /usr/bin/gcc*
cd /usr/bin
rm gcc
ln -s gcc-x.x gcc

Onde x.x é a mesma versão do gcc que aparece na saída do cat /proc/version

Criando o Source do Kernel

Agora vamos dar início a criação dos arquivos do kernel:

cd /usr/src/linux
make oldconfig
make clean
make prepare
make


  • Obs.: A conclusão deste ultimo comando deve demorar cerca de 1 hora dependendo do tipo do processador.
  • Obs. 2: Não é necessário esperar terminal o make final, pode-se cancelar depois de uns 5 minutos, porém, não custa nada esperar o término.

Conclusão

Concluído o procedimento acima, siga com a instruções de instalação dos drivers, lembrando que pode ser necessário a instalação de pacotes adicionais como bibliotecas e outras dependências, por isso sempre leia o README e ou INSTALL, que quase sempre estão presentes nos fontes.

Ferramentas pessoais