Compilando Drivers - Fórum Debian Wiki
Compilando Drivers
Edição feita às 18h26min de 7 de Junho de 2009 por Dmatrix (Discussão | contribs)
2.1.1 build-essential
2.1.2 module-assistant
2.1.3 Header e Source do Kernel
3.1 Source do kernel
3.2 Extraindo o Source
3.3 Preparando o Source do Kernel
3.4 Verificando a versão do Compilador
3.5 Criando o Source do Kernel
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.
Esse artigo irá listar os pacotes básicos para a compilação. Alguns drivers podem precisar de softwares adicionais.
Este pacote contém uma lista informativa de pacotes que são considerados essenciais ("build-essential") para a construção de pacotes Debian (.deb).
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.
Caso possua os CDs ou DVDs da sua instalação você pode tentar instalar os pacotes direto deles adicionando-os com o comando:
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 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.
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:
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.
Extraia o pacote:
bunzip2 -c linux-source-`uname -r | cut -f1 -d-`.tar.bz2 | tar xvf -
Criando os links simbólicos:
Removendo antigo link caso exista:
Criando o novo link:
ln -s /usr/src/linux-source-`uname -r | cut -f1 -d-` linux
Crie outro link no diretório /lib/modules:
Removendo antigo link, caso exista:
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:
Agora edite o arquivo Makefile com:
mcedit /usr/src/linux/Makefile
Altere os dados no parâmetro "EXTRAVERSION" que está no inicio do arquivo:
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:
Observe na saída a versão do gcc e compare com a saída do comando:
Caso seja diferente, deve-se verificar se possue instalado o gcc e criar o link simbólico correto:
apt-get install gcc-x.x
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:
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.
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.