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.
