Um driver pode ser compilado sozinho em vez de todo o kernel do Linux?

0

Eu fiz algumas alterações no driver serial na minha máquina Linux. Eu tenho tentado compilar o módulo e recarregá-lo, mas isso gera alguns erros. Em vez disso, se eu recompilar o kernel inteiro, ele funciona bem.

É possível fazer minhas alterações no driver serial, compilar apenas esse módulo e carregá-lo?

Obrigado

    
por user791953 14.11.2013 / 18:46

1 resposta

0

Como você mencionou com sucesso fazendo 'recompilar o kernel inteiro' você está pronto para ir sem recompilar o kernel inteiro novamente. A maior parte do usuário não faz a compilação do módulo apenas porque não possui toda a fonte de biblioteca de cabeçalhos disponível. Compilação completa do kernel significa outro arquivo de lib requerido no lugar.

Agora, o que você precisa fazer é emitir:

sudo make prepare 

logo após a emissão

sudo make config 

ou

sudo make oldconfig

Deixe-me dar-lhe o comando passo a passo (de maneira suja FYI :)

>cd /usr/src/linux-source-X.XX.X

>sudo cp /usr/src/linux-headers-'uname -r'/Module.symvers .
>sudo cp /boot/config-X.xx.x-xx-YYYY .config

As etapas acima são as mesmas para compilar o kernel completo ou somente o módulo mak. Agora, se você precisar fazer apenas o módulo, deixe que o seu make comando 'prepare' ele mesmo, com a mudança necessária dos arquivos lib / config automaticamente interligados para os módulos a serem feitos. Tente dois comandos abaixo:

>sudo make -C  /usr/src/linux-headers-'uname -r'/ prepare
>sudo make -C /usr/src/linux-headers-'uname -r'/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only prepare modules

Até onde eu me lembro, adicionando 'M' , o comando 'make' para compilar os módulos para o diretório de origem, com 'antes' de preparar os arquivos de lib / header necessários.

Espero que, neste momento, tudo seja feito corretamente e faça a saída sem nenhum erro. Agora você já tem o seu_module.ko pronto para instalar no caminho do módulo do seu sistema.

Tente:

>sudo make -C /usr/src/linux-headers-'uname -r'/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only modules_install 

ou

sudo make -C /usr/src/linux-headers-uname -r/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only install

>depmod -a

Espero que seu módulo esteja pronto para

>modeprob your_mod 

comando

Se você olhar cuidadosamente em sua mensagem eror criada pelo comando make quando compilar o módulo sozinho, você obterá informações do erro ether no arquivo source syntax / mission lib ou falhando em outro erro como falta de módulos / fonte de dependência.

Compilação feliz :)

    
por 08.08.2017 / 22:53